トップ «前の日記(2009-08-03) 最新 次の日記(2009-08-05)» 編集

Route 477



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の使い方

  1. gem install less
  2. script/plugin install git://github.com/augustl/less-for-rails.git
  3. public/stylesheets/foobar.less を編集
  4. レイアウトに <%= stylesheet_link_tag "foobar" %> とか書く
  5. 自動的に 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