• 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/163

Rubyのダックタイピングを活用して、シンプルかつ汎用的な Stringパーサ&コンバータstring_to.rbを書いてみました。

このコードは、to_xxxx_xxxxメッセージを受け取り、 XxxxXxxx#parse(self)を呼び出すことで 自分自身をXxxxXxxxに変換する method_missingハンドラをStringクラスに付け加えます。


class String
  def method_missing(method, *arg, &block)
    method_name = method.to_s
    if method_name.slice!(0..2) == "to_"
      method_name.gsub!(%r(__), '::_')
      method_name.camelize.constantize.parse(self, *arg, &block)
    else
      super
    end
  end
end

利用方法:

  1. 上のコードをコピーして、

  2. $:の通った場所にstring_to.rbとして保存し、

  3. そしてこの機能を使いたいところからrequireします。

require 'date'
require 'uri'
require 'string_to'

"2007-2-11".to_date #=> Date.parse(self)
"http://www.drecom.co.jp/".to_URI #=> URI.parse(self)

[English]

POSTSCRIPT:

constantizecamelize等のRails依存のメソッドを 書き直して、RubyForgeにプロジェクトを登録しました。

  string-to
これでようやく、いつものようにgemコマンドでインストールできるようになりました。
$ sudo gem install string-to
使い方は以下のとおり:
require 'rubygems'
require 'string_to'
require 'date'

"2007-2-13".to_date # => Date.parse("2007-2-13")
parseメソッドを実装しているクラスやモジュールは意外と多いですね。 CGI、Date、Name、Ripper、URI、Time、YAML、JSON、CGI::Cookie...

次のバージョンでは、parseメソッドがあったら便利なモジュールにparseを追加するのをやろう。

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/163

posted by genki genki on Sun 11 Feb 2007 at 09:32 with 0 comments
Contents rssrss
光ファイバーを二次元振動させて走査するAR用ディスプレイ
因果の取り違え
Swift2's defer for CoffeeScript
mongodb-3.0からcreateIndexのdropDupsが無くなったらしい
mongodb-3.0以降のWiredTigerの設定を動的に変更する方法
一般楕円の高速生成アルゴリズムへの道標
farro mantecatoのレシピ
Droonga関連の記事のまとめ
RuntimeErrorの特定のメッセージに限定してrescueする方法
jQueryでscriptタグを実行せずにappendする
Tags
coffeescriptdefergroongajsmemonodenodejs
Comments rssrss
瀧内元気 瀧内元気: MacOS版は以下にあります genki/ViMouse 01/16 05:40
dsjf dsjf: https://gist.github.com/6bf1bf2c3cbb5eb6e7a7 これでも出... 01/08 23:23
瀧内元気 瀧内元気: おお、チェックしてみます。thx! 12/24 05:23
overisland overisland: Reeder for iPhone もこの UI を実装していますね。 12/24 05:13
瀧内元気 瀧内元気: その情報は見たのですが、以下のサイトによると、現在はまた必要になってるっぽいんですよね。 http:... 12/01 12:20
tkawa tkawa: http://devcenter.heroku.com/articles/rails31_herok... 12/01 10:47
瀧内元気 瀧内元気: どもー。いまはgithubに置いてあります https://github.com/genki/irb... 07/10 08:31
ともち ともち: こんにちは! すばらしいプログラムをありがとうございます。しかし、merbiのドメイン、切れているみ... 07/10 02:30
Services from s21g
YOMU Web小説リーダー
Web小説を音声で楽しむ読み上げリーダー
補助探
公開されている補助金・助成金情報を集約し、条件に合う制度を探しやすくするサービスです。
jotter.me
個人開発者のためのホスティング一体型ノートサービス
ハンドミラー
iPhone向けの手鏡アプリ
ツイプロ(twpro)
Twitterプロフィールの高速検索エンジン