2009-08-04
■ [ruby] Enumerable#else
Pythonだと、forやwhileにelseを付けられるらしいですが、似たような挙動をRubyで実装する方法について。
module Enumerable def else(&block) self.respond_to?('empty?') && self.empty? ? yield : self end end
とすると、
<% results.each do |x| %> <%= x %> <% end.else do %> no data <% end %>
と書ける!
予約語もメソッド名に使えるRubyならではですね。
via http://d.hatena.ne.jp/ursm/20090316/1237220104
コメント欄では
ary.each do |i| puts i end.any? or puts 'none'
という案や、
<% if results.empty? -%> no hits found <% else -%> <% results.each do |x| -%> hit:<%=x-%> <% end -%> <% end -%>
でよくね?という人も。
■ [rails] CSSを構造化したい→それLessで
あるいは、Sassはカッコイイけどインデントが嫌だ→それLessで (という意図を機能から感じる…)
Lessは、
table#main { tr { ... } td { ... } }
みたいに、ちょっとイイ感じな記法でCSSを書くツールである。 独自記法?じゃあコンパイルが面倒じゃないですか? いいえ、Railsならプラグイン入れるだけでなんかよろしくやってくれるんです。楽ちんですね。
Less for Railsの使い方
- gem install less
- script/plugin install git://github.com/augustl/less-for-rails.git
- public/stylesheets/foobar.less を編集
- レイアウトに <%= stylesheet_link_tag "foobar" %> とか書く
- 自動的に public/stylesheets/foobar.css にコンパイルされる(※developmentモード)
productionでは起動時に全CSSをコンパイルし、自動コンパイルは行われません。 起動時に作るのは「デプロイしたらCSSが生成されてなくて真っ白」みたいのを防ぐためですね。
Lessのいいところベスト3
1. 定義をネストできる
「div#footer内のdiv.date」とか、ネストしてるものはネストして書きたいですよね。
#footer { .date{ color: green } .version{ font-weight: bold; } }
2. 変数が使える
@から始めると変数になる。
@base_width = 10em;
しかも四則演算ができる!
.wide { width: @base_width * 2; }
3. コメントに「//」が使える
// this is comment color: red
地味に嬉しい。
その他の機能(mixinとか)は→ http://lesscss.org/docs.html