Module: Mongokit::CsvTransformer::ClassMethods
- Defined in:
- lib/mongokit/csv_transformer.rb
Overview
Example
class Address
include Mongoid::Document
mongokit :csv_transformer
field :name
field :region
field :district
field :state
field :zip_code, type: Integer
csv_import_mapping :address, [:name, :zip_code], headers: true do |row, attrs|
attrs[:zip_code] = attrs[:zip_code].to_i
end
csv_export_mapping :address, [:zip_code, :name, :region] do |row, record|
row[:zip_code] = "IN-#{row[:zip_code]}"
end
end
Address.from_address_csv('address.csv') # Import
Address.to_address_csv('address.csv') # Export
Constant Summary collapse
- CsvTransformerError =
Class.new(StandardError)
Instance Method Summary collapse
- #_csv_columns_(options = nil) ⇒ Object
- #csv_export(file, criteria, options = {}, &block) ⇒ Object
- #csv_export_mapping(name, fields, options = {}, &block) ⇒ Object
- #csv_import(file, options = {}, &block) ⇒ Object
- #csv_import_mapping(name, fields, options = {}, &block) ⇒ Object
Instance Method Details
#_csv_columns_(options = nil) ⇒ Object
62 63 64 65 66 67 68 69 70 71 |
# File 'lib/mongokit/csv_transformer.rb', line 62 def _csv_columns_( = nil) columns = fields.collect do |f, o| if o.class == Mongoid::Fields::Standard && o.type != BSON::ObjectId o.name end end columns.compact! ? Options.process([:columns] || columns, ) : columns end |
#csv_export(file, criteria, options = {}, &block) ⇒ Object
73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/mongokit/csv_transformer.rb', line 73 def csv_export(file, criteria, = {}, &block) columns = _csv_columns_() io = CsvIO.new(:write, file, columns, ) criteria.in_batches do |records| records.each do |record| row = io.to_row(record, block) io << row if row end end io.close end |
#csv_export_mapping(name, fields, options = {}, &block) ⇒ Object
48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/mongokit/csv_transformer.rb', line 48 def csv_export_mapping(name, fields, = {}, &block) if respond_to?("to_#{name}_csv") raise CsvTransformerError, "#{name} export mapper is already defined." end self.class.instance_eval do define_method "to_#{name}_csv" do |file, criteria = nil| [:columns] = fields criteria = self.all if criteria.nil? csv_export(file, criteria, , &block) end end end |
#csv_import(file, options = {}, &block) ⇒ Object
87 88 89 90 91 92 93 94 |
# File 'lib/mongokit/csv_transformer.rb', line 87 def csv_import(file, = {}, &block) io = CsvIO.new(:read, file, [:columns] || _csv_columns_, ) io.each do |row| attrs = io.to_attrs(row, block) create(attrs) if attrs end end |
#csv_import_mapping(name, fields, options = {}, &block) ⇒ Object
35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/mongokit/csv_transformer.rb', line 35 def csv_import_mapping(name, fields, = {}, &block) if respond_to?("from_#{name}_csv") raise CsvTransformerError, "#{name} import mapper is already defined." end self.class.instance_eval do define_method "from_#{name}_csv" do |file| [:columns] = fields csv_import(file, , &block) end end end |