CSVMapper v0.0.4 Released
https://github.com/kimoto/csvmapper/blob/master/Changes
0.04 - Added #columns method columns :first_name, :last_name, :age - Added #grouped_by method grouped by field key - Added #where method arel style finder (testing)
- columnsはまとめて複数のフィールドを定義できるやつ。ただし全部型が:stringになるけど。
- whereはActiveRecordとかDataMapperみたいなarelスタイルのfinder。
まだ思案してる途中だけど、
MyCSV.load("./test.csv").where(:name => 'kimoto').where(:age => 15).first
みたいな感じでfindできる。正直いらんかも。
- あとはEnumerableをincludeしたので、each/map/select/detect/rejectとかあの辺のは全部使えるようになった
バージョン1.0.0まではいろいろアイデアを追加したり消したりしまくる予定なので、使ってくれる人がいるのであればバージョン指定で利用してもらえると安全かも。 Gemfile内で
gem 'csvmapper', '0.0.3'
みたいな指定をしてもらって、bundle exec ruby ./your_script.rb するみたいな感じで
↓arel styleでfindingしてる例
# encoding: utf-8 require 'csvmapper' require 'cgi' class YPIndex < CSVMapper delimiter '<>' column :name, 0, :string column :hash, 1 column :host, 2 column :contact, 3, :uri column :genre, 4 column :description, 5 column :active_viewers, 6, :numeric column :total_viewers, 7, :numeric column :bitrate, 8, :numeric column :filetype, 9 column :artist, 10 column :title, 11 column :album, 12 column :reserved, 13 column :hash2, 14 column :time, 15 column :type, 16 column :reservee, 17 column :nullfield, 18 end p YPIndex.load_file("http://temp.orz.hm/yp/index.txt").where(:name => 'あくえり').where(:genre => 'DQ3 SFC').first
今後の予定の妄想
DataMapper/ActiveRecordみたいにリレーショナルなものも扱えるようにしてしまう
profiles.csv
id,name 1,kimoto 2,fuba 3,eigokun
player_scores.csv
profile_id,score 1,100 2,300 3,400
みたいなものを以下のようにして使えるようにする
class Profile < CSVMapper column :id, 0 :numeric column :name, 1, :string end class PlayerScore < CSVMapper column :profile_id, 0, :numeric column :score, 1, :numeric belongs_to :profile end scores = PlayerScore.load_file("./profile_scores.csv") p scores.first.profile # =>
これはやり過ぎな気がする