• 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 Png genki on Sun 11 Feb 2007 at 09:32
Contents
シンプルで汎用的なStringパーサ&コンバータ
Comments
瀧内元気: MacOS版は以下にあります * [genki/ViMouse](https://githu... '23-1
dsjf: https://gist.github.com/6bf1bf2c3cbb5eb6e7a7 これ... '13-1
瀧内元気: おお、チェックしてみます。thx! '11-12
overisland: Reeder for iPhone もこの UI を実装していますね。 '11-12
瀧内元気: その情報は見たのですが、以下のサイトによると、現在はまた必要になってるっぽいんですよね。 ... '11-12
Services from s21g
twpro(ツイプロ)
Twitterプロフィールを快適検索
地価2009
土地の値段を調べてみよう
MyRestaurant
自分だけのレストラン手帳
Formula
ブログに数式を埋め込める数式コミュニティ