class Bumblebee::Column
This is main piece of logic that defines a column which can go from objects to csv cell values and csv rows to objects.
Attributes
header[R]
property[R]
resolver[R]
through[R]
to_csv[R]
to_object[R]
Public Class Methods
new( header, property: nil, through: [], to_csv: nil, to_object: nil )
click to toggle source
# File lib/bumblebee/column.rb, line 20 def initialize( header, property: nil, through: [], to_csv: nil, to_object: nil ) raise ArgumentError, 'header is required' if header.to_s.empty? @header = header.to_s @property = property || @header @through = Array(through) # We need to ensure the to_csv mutator is not splitting any keys because its hash has already # been resolved where each key is the actual presentational value (csv header). @to_csv = Mutator.new(to_csv, resolver: Objectable.resolver(separator: '')) @to_object = Mutator.new(to_object) @resolver = Objectable.resolver freeze end
Public Instance Methods
csv_set(data_object, hash)
click to toggle source
Extract from object and set on hash
# File lib/bumblebee/column.rb, line 44 def csv_set(data_object, hash) value = resolver.get(data_object, full_property) to_csv.set(hash, header, value) end
object_set(csv_object, hash)
click to toggle source
# File lib/bumblebee/column.rb, line 50 def object_set(csv_object, hash) value = csv_object[header] to_object.set(hash, full_property, value) hash end
Private Instance Methods
full_property()
click to toggle source
# File lib/bumblebee/column.rb, line 62 def full_property through + [property] end