«前の日記(2007-05-22(Tue)) 最新 次の日記(2007-05-24(Thu))» 編集

ぽっぺん日記@karashi.org


2007-05-23(Wed) [長年日記]

_ define_methodを使うpluginを書いてみた

今書いているRailsアプリのModelに

updated_at_without_second
  time = self.updated_at
  Time.mktime(time.year, time.month, time.day, time.hour, time.min)
end

みたいな感じで、秒を落としたTimeオブジェクトを返すメソッドを色々な ところに書いているんだけど、全然、DRYではない。

そんな訳で、習作も兼ねて、 Making a Pluginを参考に上記 メソッドをplugin化してみた。

手順

railsディレクトリの中で

./script/generate plugin TimeFormatter

を実行して、pluginの基本ファイル一式を生成する(名前が変なのはご容赦)。 ファイルはvendor/plugins/time_formatter/以下に生成される。

生成されたファイルを下記のように書き換える。

vendor/plugins/time_formatter/init.rb:

require 'time_formatter'

class ActiveRecord::Base
  extend TimeFormatter
end

vendor/plugins/time_formatter/lib/time_formatter.rb:

module TimeFormatter
  def time_formatter(*names)
    names.each do |name|
      define_method("#{name}_without_second") do
        time = read_attribute(name)
        Time.mktime(time.year, time.month, time.day, time.hour, time.min)
      end

      define_method("#{name}_without_second=") do |time|
        write_attribute(name, Time.mktime(time.year, time.month, time.day, time.hour, time.min))
      end
    end
  end
end

おまけで、Timeオブジェクトを代入した時に、秒を落とすメソッドも追加した。

メソッドを追加したいModelにこんな感じに書く。

class User < ActiveRecord::Base
  time_formatter :created_at, :updated_at
end

これでUserオブジェクトに

  • created_at_without_second
  • updated_at_without_second
  • created_at_without_second=
  • updated_at_without_second=

4つのメソッドが自動的に追加される。

本当ならtestを書くんだろうけども、とりあえず、./scipt/consoleでテスト

>> u = User.find(:first)
=> #<User:0x9b68c(長いので省略)
>> u.created_at
=> Tue Mar 27 15:50:25 +0900 2007
>> u.created_at_without_second
=> Tue Mar 27 15:50:00 +0900 2007
>> time = Time.now
=> Wed May 23 17:56:23 +0900 2007
>> u.created_at_without_second = time
=> Wed May 23 17:56:23 +0900 2007
>> u.created_at
=> Wed May 23 17:56:00 +0900 2007

OK!

追記

console表記が適切ではなかったので修正。

感想

やってみたら、かなり簡単なので、DRY化を進めることができそうな感じ。

_ 風の払暁―満州国演義〈1〉(船戸 与一) 風の払暁―満州国演義〈1〉(船戸 与一)

日本冒険小説界の第一人者と個人的に思っている船戸与一の最新刊である。

正直なところ、最近の船戸与一の作品には、思わず手に取ってしまうような 強烈な魅力を持ったものがあまりなかった。しかし、本書は違う。

舞台は、昭和3年(1929年)の満州。思えば、船戸与一が大得意とするテーマ── 「国家のエゴが渦巻く国際政治の中で、運命を翻弄されつつも、それに抗う主人公」というものに、 満州ほどしっくりとする地があっただろうか。今まで書かれなかったのが不思議だと思ってしまう ほどだが、たぶん、船戸与一の中でずっと熟成されてきたものであるのだろう。そういう意味で、 「満を持して」という文句が本書ほど似合う作品もそうはないのではないかと思う。

本書の主人公は東京の名門と言っていい敷島家の四兄弟である。長男の太郎は奉天総領事館参事官、 次男の次郎は馬賊の長、三男の三郎は関東軍の少尉、四男の四郎は左翼運動に共感を寄せる早大生。 この四人が、満州某重大事件と呼ばれた張作霖爆殺事件を契機に、運命を捻じ曲げられていく過程が本書では描かれている(これ以上書くとネタバレになってしまうのだ)。

冒頭の会津戦争の意味。四兄弟に悪霊のようにまとわりつく特務機関員、間垣の意図。日本を、そして 世界を揺がす重大事件に関わってくることを予感させる登場人物の数々。物語の幕は上がったばかりだが、 これからの展開を期待させるピースは、本書だけでも充分に出揃っている。ピースが組み上がり、どのような 絵が現われるのかが今から楽しみな作品だ。


風の払暁

Amazonで購入
livedoor BOOKS
書評/国内純文学

[]
本日のPingbacks(全0件)

«前の日記(2007-05-22(Tue)) 最新 次の日記(2007-05-24(Thu))» 編集