こんな風に書いてみたいと思った。

   1  <% posts.each.if do %>
   2  <ul>
   3    <% iterate do |post| %>
   4    <li><%= h(post.body) %></li>
   5    <% end %>
   6  </ul>
   7  <% end.else %>
   8  <div>
   9    Not yet posted.
  10  </div>
  11  <% end %>

Enumerator#ifを作れば実現出来そうだ。

追記

という事で、作ってみた。

   1  module Enumerable
   2    class Iterator  
   3      def initialize(enumerable)
   4        @enumerable = enumerable
   5      end
   6  
   7      def iterate(&block)
   8        block.call(@enumerable.next) while true
   9      rescue StopIteration                 
  10      end                                  
  11    end                          
  12  
  13    class Enumerator 
  14      def if(&block)
  15        Iterator.new(self).instance_eval(&block) if count > 0
  16        self
  17      end
  18  
  19      def else(&block)
  20        block.call if count == 0
  21      end
  22    end
  23  end

posted by Png genki on Fri 30 Jan 2009 at 18:56

MerbのRakeタスク間の依存関係が知りたかったので、調べてみました。

   1  app <= [slices:merb-auth-slice-password:freeze:app_with_gem]
   2  clobber_coverage <= [spec:clobber, spec:coverage]
   3  copy_assets <= [slices:merb-auth-slice-password:install]create <= [db:reset]
   4  db:migrate:up <= [db:migrate]
   5  drop <= [db:reset]
   6  env <= [slices:list]
   7  freeze:app <= [slices:merb-auth-slice-password:freeze]
   8  freeze:views <= [slices:merb-auth-slice-password:patch]
   9  gem <= [slices:merb-auth-slice-password:freeze:app_with_gem]
  10  load <= [db:migrate:down, db:migrate:up]
  11  merb_env <= [audit:actions, audit:controllers, audit:routes, db:automigrate, db:
  12  autoupgrade, db:database_yaml, db:migrate:load, sessions:clear, sessions:create]
  13  migrate <= [db:reset, slices:merb-auth-slice-password:install]
  14  preflight <= [slices:merb-auth-slice-password:install]
  15  setup_directories <= [slices:merb-auth-slice-password:install]
  16  slices:list <= [slices]
  17  spec <= [default]
  18  spec:default <= [slices:merb-auth-slice-password:spec, spec]
  19  spec:explain <= [slices:merb-auth-slice-password:spec]
  20  stubs <= [slices:merb-auth-slice-password:patch]

右側が左側に依存してる感じです。 以下のようなコードをRakefileの末尾に記述して取得しました。

   1  tree = {}
   2  Rake::Task.tasks.each{|t| t.prerequisites.each{|r| (tree[r] ||= []) << t.name}}
   3  tree.sort_by{|i,j|i}.each{|r,a| puts "#{r} <= [#{a.sort.join(', ')}]"}

posted by Png genki on Fri 30 Jan 2009 at 03:07
Contents
Enumeratorに関する妄想
MerbのRakeタスクの依存関係
Comments
dsjf: https://gist.github.com/6bf1bf2c3cbb5eb6e7a7 これ... '13-1
瀧内元気: おお、チェックしてみます。thx! '11-12
overisland: Reeder for iPhone もこの UI を実装していますね。 '11-12
瀧内元気: その情報は見たのですが、以下のサイトによると、現在はまた必要になってるっぽいんですよね。 ... '11-12
tkawa: http://devcenter.heroku.com/articles/rails31_he... '11-12
Services from s21g
twpro(ツイプロ)
Twitterプロフィールを快適検索
地価2009
土地の値段を調べてみよう
MyRestaurant
自分だけのレストラン手帳
Formula
ブログに数式を埋め込める数式コミュニティ