長野新幹線に乗っている間に Rails プラグインを作ってみる
東京 - 長野間は約1時間40分。その間に Rails プラグインを作り、公開して、ブログまで書けるかやってみました。
作るプラグインはとても簡単。
帳票などの機能を作っていると、日付や時刻を年度で考えなければならない、ってときがあります。
そこで、DateやTimeクラスを拡張し、fiscal_yearというメソッドを追加して、
% script/console
Loading development environment (Rails 2.2.2)
>> Date.new(2009, 3, 31).fiscal_year
=> 2008
>> Date.new(2009, 4, 1).fiscal_year
=> 2009
のように年度を返すようなことをやっていたのですが、これをプラグイン化してみました。
13:24 東京駅出発。
パソコンをリュックから取り出し、準備万端。
上野駅到着。
script/generate plugin fiscal_year
でプラグインのひな形を作成。
う、emobile つながらない。ま、いいや。とりあえずすでに config/initializers 以下に置いて利用していたコードをコピーします。
ほとんどコピペですむので早くもプラグイン完成。
% script/console
Loading development environment (Rails 2.2.2)
>> Date.new(2009, 3, 31).fiscal_year
NoMethodError: undefined method `fiscal_year' for Tue, 31 Mar 2009:Date
from (irb):1
ありゃ NoMethodError。
init.rb に
require 'fiscal_year'
と書き忘れてました。
% script/console
Loading development environment (Rails 2.2.2)
>> Date.new(2009, 3, 31).fiscal_year
=> 2008
>> Date.new(2009, 4, 1).fiscal_year
=> 2009
OK。ほぼ完成。
README を書く。
大宮駅でやっと emobile つながった。
github にレポジトリを作り、表示された以下の指示の通りに実行。
mkdir fiscal_year
cd fiscal_year
git init
touch README
git add README
git commit -m 'first commit'
git remote add origin git@github.com:champierre/fiscal_year.git
git push origin master
git push origin master で、公開準備も整った。
写真をぱしゃり。
サンプルアプリから、githubに置いたプラグインをインストールして実行してみる。
script/plugin install git://github.com/champierre/fiscal_year.git
テストを書き足す。
» The Complete Guide to Rails Plugins: Part II | Ruby on Rails for Newbies
を参考に。
A surprisingly large number of plugins have no tests at all.
と揶揄されている。僕は書くぞー。
なんの進展もないまま高崎に着いちゃった。
山がみえてきた。トンネルも多いし、これはやばい。emobile 切れそう。
軽井沢につくころ、ようやくテストが通った。
テストの冒頭に書く
require 'test/unit'
require 'test/test_helper'
require File.dirname(__FILE__) + '/../lib/fiscal_year'
あたりでつまづいていた。
レポジトリに再度プッシュ、サンプルアプリからもう一回プラグインをインストールして、テストまで通るか試す。
% script/plugin install git://github.com/champierre/fiscal_year.git
Initialized empty Git repository in /Users/ishihara/rails/sample/vendor/plugins/fiscal_year/.git/
remote: Counting objects: 19, done.
remote: Compressing objects: 100% (15/15), done.
remote: Total 19 (delta 1), reused 0 (delta 0)
Unpacking objects: 100% (19/19), done.
From git://github.com/champierre/fiscal_year
* branch HEAD -> FETCH_HEAD
% cd vendor/plugins/fiscal_year
% rake test
(in /Users/ishihara/rails/sample/vendor/plugins/fiscal_year)
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby -Ilib:lib:test "/Library/Ruby/Gems/1.8/gems/rake-0.8.3/lib/rake/rake_test_loader.rb" "test/fiscal_year_test.rb"
Loaded suite /Library/Ruby/Gems/1.8/gems/rake-0.8.3/lib/rake/rake_test_loader
Started
..
Finished in 0.00118 seconds.2 tests, 2 assertions, 0 failures, 0 errors
ok。完成。
残り時間は急いで、このエントリーの下書きを書く。酔いそう。
エントリーも完成。
15:04 長野駅到着。
FiscalYear プラグインは以下で公開しています。
» champierre's fiscal_year at master - GitHub
2009/04/03 16:28:25