HumanDateの最近のブログ記事
HumanDate-ja0.0.3をリリースします。
おもな修正内容は、rails2.0になってActiveSupportの仕様が変わっちゃったことへの追随です。
hideAki :
日にちがうまくでません(T-T;;;
7月は1日か11日にしかなんないですね〜
もぎゃ
そうなのですよ。どうも普通に日付を書いた時の挙動がおかしくて、何とかしないといけないなぁ、と思いながら、先送りになっちゃっています。
(HumanDate 0.0.2 - もぎゃろぐ)
そうなのですよ、と言ったのですが、「そこまでひどかったっけ?」という心の声がしたので、単体テストを走らせてみたら、日付関係のテストが全滅しています。
調べてみると、activeSupportのtime#changeからすでにおかしい。
irb(main):006:0> test = Time.parse("Mon May 21 23:51:59 +0900 2001")
=> Mon May 21 23:51:59 +0900 2001
irb(main):010:0> test = test.change(:mday=>25)
=> Mon May 21 23:51:59 +0900 2001
...timeの「分」部分が変更できません。調べてみると、あらびっくり。
*2.0.1* (December 7th, 2007)
* Deprecation: remove deprecated :mday option from Time, Date, and DateTime#change. [Jeremy Kemper]
rails / activesupport / CHANGELOG -- GitHub
以前、timeの「分」部分を変えようと思ったら、change(:mday=>25)だったのですが、このラベルがdayに変わってしまったようです。
irb(main):011:0> test = test.change(:mday=>25)
=> Mon May 21 23:51:59 +0900 2001
irb(main):019:0> test = test.change(:day=>25)
=> Fri May 25 23:51:59 +0900 2001
...rails2.0はrails1.0系と互換性がとれないよ、ということをはっきりさせるためにメジャー番号をあげたわけですから、非互換だからと言って文句は言えないですね。
しょうがないのでこうすることにしました。
irb(main):009:0> test.change(:mday=>25,:day=>25)
=> Fri May 25 23:51:59 +0900 2001
これで、rails1.0系でも、2.0系でもとりあえず動いてくれるはずです。
あと、end_of_monthが0:00じゃなくて23:59を指すことになった仕様変更にも対応しました。
#これなんて、ドキュメントすらキャッチアップされていないような^^;
ずれてます2 - urekatのスカンク日記3 の不具合は治らないままですが、とりあえずHumanDate-ja0.0.3として置いておきます。
HumanDate-ja-0.0.3.gem
hideAkiさんよかったら試してみてくださいませ。
svnで公開してもらえると便利ですということだったので、
HumanDate改めHumanDate-ja を、rubyforge.orgに登録してみました。
名前が変わった関係で、古いファイルはあげていないので、まだgemでとってくることはできないです。ごめんなさい。
月が一ヶ月ずれちゃう問題が意外と根深いので、ちょっとアルゴリズムからいじらないとだめかも、と思っています。
svn co svn+ssh://@rubyforge.org/var/svn/humandate-ja/trunk/で最新の(まだunittestを通らない^^;)ソースコードを取ってくることができます。
名前が変わった関係で、古いファイルはあげていないので、まだgemでとってくることはできないです。ごめんなさい。
月が一ヶ月ずれちゃう問題が意外と根深いので、ちょっとアルゴリズムからいじらないとだめかも、と思っています。
HumanDate.rbのver0.0.2をリリースします。
HumanDate-0.0.2.gem
urekatのスカンク日記3 - ずれてますでご指摘いただいた件の修正です。urekatさん、どうもありがとうございました。
「○月」と指定されたときに、その時点で「○月1日」にポインタを移動させておかないといけないのですが、抜けていたので、そのあと「○日」と指定されると、翌月の日付を探しに行っちゃっていました。
WEBフォームを作って、寄ってたかってテストしていただくというのは魅力的ですね。つくってみます♪
ところで、やっていて気がついたのですが。"10月2日三時半"をparseすると、午前三時になるのですよね。
プログラム的には正しいのですが、「じゃあ明日三時ね!」と言って約束して朝三時に押しかけたら普通怒られますので、人間的にはあまり正しくありません。「午前」と指定しなかったら常に昼間の時間を優先する、とかいう仕様のほうが正しいのだろうか。
でも、「9時」とかは結構微妙ですよね。ボク的には朝一ですが、ゲーム業界で9時といえば夜9時をさしたりするんじゃないかと。設定項目とかはあまり作りたくないのですが、うーん。
HumanDate-0.0.2.gem
urekatのスカンク日記3 - ずれてますでご指摘いただいた件の修正です。urekatさん、どうもありがとうございました。
「○月」と指定されたときに、その時点で「○月1日」にポインタを移動させておかないといけないのですが、抜けていたので、そのあと「○日」と指定されると、翌月の日付を探しに行っちゃっていました。
urekat 『考えられる入力パターンを集めて正規表現をたくさん作ればいいかなと思いましたがそんな単純なやり方ではだめでしょうか。 入力パターンはWebフォームを作ってみんなで入力。』
WEBフォームを作って、寄ってたかってテストしていただくというのは魅力的ですね。つくってみます♪
ところで、やっていて気がついたのですが。"10月2日三時半"をparseすると、午前三時になるのですよね。
プログラム的には正しいのですが、「じゃあ明日三時ね!」と言って約束して朝三時に押しかけたら普通怒られますので、人間的にはあまり正しくありません。「午前」と指定しなかったら常に昼間の時間を優先する、とかいう仕様のほうが正しいのだろうか。
でも、「9時」とかは結構微妙ですよね。ボク的には朝一ですが、ゲーム業界で9時といえば夜9時をさしたりするんじゃないかと。設定項目とかはあまり作りたくないのですが、うーん。
本日はITpro Challenge!でライトニングトークをさせていただきますした。
pdfファイル
HumanDate.pdf
HumanDate.rbのgemファイル。
HumanDate-0.0.1.gem
あと、プレゼンで紹介した、HumanDateをつかって携帯電話(というか電子メール)からGoogleカレンダーに登録するスクリプトはこちら。
pop3togcal.rb
このスクリプトを
cronで定期的に呼び出すようにすることで、
設定したメールアドレスのメールをチェックしにいって、
該当するメールがあればgoogle calendar apiをつかってGoogleカレンダーに登録するようになっています。
なお、このスクリプトは
zorioの日記 - メールからGoogle Calendarに登録するサンプル
を元にさせていただきました。素敵なコード、どうもありがとうございます。
(追記 2007-09-08 08:28:27)
maeda.na@はてな - ITpro Challenge!のメモとか
古川氏のカレンダライブラリはいいと思う。
いえぇ~っ!そうそうたるメンバーに囲まれてどうしようかと思っていたのですが、このお言葉はうれしいです。
ライトニングトーク中毒になってしまいそうだ(笑)