• 18:40より会場設営
  • 19:00開始。まずは自己紹介。Merbと私。聞きたいこと。
  • DataMapperとActiveRecordの比較
  • MerbとRailsの比較
  • その他色々とMerb談義

参考資料

posted by Png genki on Fri 19 Dec 2008 at 17:29 with 7 comments

僕はMerbではDataMapperを使うのがお勧めだと思いますが、 DataMapperで利用可能なpropertyの型をまとめておきます。

  • TrueClass, Boolean
  • String
  • Text (デフォルトでは65536バイト)
  • Float
  • Integer
  • BigDecimal
  • DateTime
  • Date
  • Time
  • Object (マーシャル/アンマーシャルされる)
  • Class (Stringと同様に扱われる)

基本的には、

   1  property :name, Type[, options]

という感じで利用します。

optionsとしては、Hashの形式で以下のようなものが指定出来ます。

  • :accessor, :reader, :writer => :private, :protected, :public
  • :nullable => true
  • :default => value
  • :lazy => true, false (遅延読み込みのオン/オフ)
  • :key => true (Model[key]でアクセスできるようになる)
  • :index => true, "name" (インデックスを作成)
  • :size => length (テキストの長さなど)
  • and so on...

See Also

posted by Png genki on Fri 19 Dec 2008 at 15:28

Merb勉強会の参考資料としてMerbの思想的なものをまとめておきます。

1. alias_method_chain is evil

Rails流のalias_method_chainによる機能拡張や改変はよろしくないという立場で、代わりにあらかじめhookをちゃんと提供しようという感じみたいです。

例)

   1  Merb::BootLoader.before_app_loads do
   2    # do something
   3  end

2. APIを用意する

MerbにはAPIが用意されていて、以下の三つのカテゴリに分かれているようです。

  • @public 次のメジャーバージョンアップまで変化しない事が保証される。
  • @private Merbコンポーネント開発者向け?
  • @plugin プラグイン開発者向け。

Merbのソースをみると、@publicや@privateなどとメソッドのコメントに書かれています。

posted by Png genki on Fri 19 Dec 2008 at 13:39

昔からあったような気がするのですが、 つい最近までその存在に気がついてませんでした。

   1  % sudo gem update merb

これで、merb関連のgemを一括で最新バージョンにアップデートする事が出来ます。

posted by Png genki on Fri 19 Dec 2008 at 13:06

しばらくMerb-1.0.3を使ってたのですが、Merb-1.0.6.1にアップデートした所、以下のようなエラーが出たので原因を調査していました。

   1  MERB_ROOT/slices/merb-auth-slice-activation/lib/merb-auth-
   2  slice-activation.rb:5:in `load_dependency': wrong number of arguments (1 for 2) 
   3  (ArgumentError)

どうやらload_dependencyの第二引数が省略出来なくなったらしい。

merb-core-1.0.3/lib/merb-core/core_ext/kernel.rb

   1    def load_dependency(name, *ver, &blk)    dep = name.is_a?(Gem::Dependency) ? name : track_dependency(name, *ver, &blk
   2  )
   3      gem(dep)
   4    rescue Gem::LoadError => e
   5      Merb.fatal! "The gem #{name}, #{ver.inspect} was not found", e
   6    ensure
   7      begin
   8        require dep.require_as
   9      rescue LoadError => e
  10        Merb.fatal! "The file #{dep.require_as} was not found", e
  11      end
  12  
  13      if block = dep.require_block
  14        block.call
  15      end
  16      Merb.logger.verbose!("loading gem '#{dep.name}' ...")
  17      return dep # ensure needs explicit return
  18    end

これに対して、

merb-core-1.0.6.1/lib/merb-core/core_ext/kernel.rb

   1    def load_dependency(name, clr, *ver, &blk)
   2      begin
   3        dep = name.is_a?(Gem::Dependency) ? name : track_dependency(name, clr, *ve
   4  r, &blk)
   5        return unless dep.require_as
   6        Gem.activate(dep)
   7      rescue Gem::LoadError => e
   8        e.set_backtrace dep.original_caller
   9        Merb.fatal! "The gem #{name}, #{ver.inspect} was not found", e
  10      end
  11  
  12      begin
  13        require dep.require_as
  14      rescue LoadError => e
  15        e.set_backtrace dep.original_caller
  16        Merb.fatal! "The file #{dep.require_as} was not found", e
  17      end
  18  
  19      if block = dep.require_block
  20        block.call
  21      end
  22  
  23      Merb.logger.verbose!("loading gem '#{dep.name}' ...")
  24      return dep # ensure needs explicit return
  25    end

第二引数のclrが省略出来なくなった模様。 private APIはメジャーバージョンアップじゃなくても仕様変わるのか。

#merbで聞いてみた所、1.0.4から以下のように明示的に指定するようになったらしい。

   1  load_dependency 'merb-slices', :immediate => true

詳しくは http://wiki.merbivore.com/releases/1.x/known_issues 参照のこと。

教えてくれたcarpeliamありがとう!

See Also

posted by Png genki on Fri 19 Dec 2008 at 04:08

GitX は、MacOSXで使えるGit用のGUIツールです。

ss1

基本的にはCUIで操作してるのですが、 これを使うとブランチのマージの様子などが視覚的に追えて便利。

アバター画像はメールアドレスから gravatar経由で持ってきてるんですね。 賢い。

See Also

posted by Png genki on Fri 19 Dec 2008 at 02:29
Contents
Merb勉強会#1 Hand Out
DataMapperで使用出来るpropertyの型
Merbの思想(1)
指定したgemに関連するgemを一気にアップデートする方法
Merb-1.0.6.1ではload_dependencyの第二引数が省略不能に
GitX: MacOSXで使えるGit用GUIツール
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
ブログに数式を埋め込める数式コミュニティ