module Disposable::Twin::Setup

Read all properties at twin initialization time from model. Simply pass through all properties from the model to the respective twin writer method. This will result in all twin properties/collection items being twinned, and collections being Collection to expose the desired public API.

Public Class Methods

new(model, options={}) click to toggle source
# File lib/disposable/twin/setup.rb, line 8
def initialize(model, options={})
  @fields = {}
  @model  = model
  @mapper = mapper_for(model) # mapper for model.

  setup_properties!(options)
end

Private Instance Methods

mapper_for(model) click to toggle source
# File lib/disposable/twin/setup.rb, line 17
def mapper_for(model)
  model
end
read_value_for(dfn, options) click to toggle source
# File lib/disposable/twin/setup.rb, line 44
def read_value_for(dfn, options)
  mapper.send(dfn[:name]) # model.title.
end
setup_properties!(options) click to toggle source
# File lib/disposable/twin/setup.rb, line 21
def setup_properties!(options)
  schema.each { |dfn| setup_property!(dfn, options) }
end
setup_property!(dfn, options) click to toggle source
# File lib/disposable/twin/setup.rb, line 25
def setup_property!(dfn, options)
  if options.has_key?(dfn[:name].to_sym)
    value = options[dfn[:name].to_sym]
    return setup_write!(dfn, value)
  end

  value = setup_value_for(dfn, options)

  # this sucks and is why i introduce pipetrees in 0.4.
  return if dfn[:readable] == false && dfn[:default].nil?

  setup_write!(dfn, value) # note: even readable: false will be written to twin as nil.
end
setup_value_for(dfn, options) click to toggle source
# File lib/disposable/twin/setup.rb, line 39
def setup_value_for(dfn, options) # overridden by Default.
  return if dfn[:readable] == false
  read_value_for(dfn, options)
end
setup_write!(dfn, value) click to toggle source
# File lib/disposable/twin/setup.rb, line 48
def setup_write!(dfn, value)
  # send(dfn.setter, value)
  send("#{dfn[:name]}=", value) # FIXME!
end