キモブロ

Please spy check please, Fucking retard

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
  # => 

これはやり過ぎな気がする