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