class Eco::Language::Models::Wrap

Attributes

getters[R]
object[R]
setters[R]

Public Class Methods

new(object = nil, setters: [], getters: []) click to toggle source
# File lib/eco/language/models/wrap.rb, line 9
def initialize(object = nil, setters: [], getters: [])
  @object = object
  self.setters = setters
  self.getters = getters
end
test() click to toggle source
# File lib/eco/language/models/wrap.rb, line 74
def self.test()
  # setters
  soa = ->(o,v) { o.a = v }
  soe = ->(o,v) { o.e = v }
  # getters
  goa  = ->(o) { o.a }
  goe  = ->(o) { o.e }
  goex = ->(o) { o.exp }

  # arrays
  setters = [soa, soe ]
  getters = [goa, goe, goex]

  a = Test::A.new(3)
  b = Test::A.new(5)
  w = self.new(a, setters: setters, getters: getters)

  puts "before check  -> a: #{a.a}; e: #{a.e}; exp: #{a.exp}"
  # launch setters
  w << [4, 2]
  puts "after setters -> a: #{a.a}; e: #{a.e}; exp: #{a.exp}"
  # launch getters
  a, e, exp = w.row
  puts "from getters(a) -> a: #{a}; e: #{e}; exp: #{exp}"
  # switch object
  w.object = b
  # launch getters
  a, e, exp = w.row
  puts "from getters(b) -> a: #{a}; e: #{e}; exp: #{exp}"
end

Public Instance Methods

<<(value = []) click to toggle source
# File lib/eco/language/models/wrap.rb, line 31
def <<(value = [])
  value = into_a(value)
  @wsetters.each_with_index.map do |set, i|
    args = into_a(value[i])
    set.call(*args)
  end
end
getters=(value) click to toggle source
# File lib/eco/language/models/wrap.rb, line 15
def getters=(value)
  @getters = into_a(value)
  @wgetters = wrap_object(@object, @getters)
end
object=(value) click to toggle source
# File lib/eco/language/models/wrap.rb, line 25
def object=(value)
  @object = value
  @wgetters = wrap_object(@object, @getters)
  @wsetters = wrap_object(@object, @setters)
end
row(value = (miss = true; [])) click to toggle source
# File lib/eco/language/models/wrap.rb, line 39
def row(value = (miss = true; []))
  value = into_a(value)
  @wgetters.each_with_index.map do |get, i|
    args = into_a(value[i])
    get.call(*args) unless miss
    get.call
  end
end
setters=(value) click to toggle source
# File lib/eco/language/models/wrap.rb, line 20
def setters=(value)
  @setters = into_a(value)
  @wsetters = wrap_object(@object, @setters)
end
wrap_object(object = nil, ops = []) click to toggle source
# File lib/eco/language/models/wrap.rb, line 48
def wrap_object(object = nil, ops = [])
  object = object || @object
  return [] unless !!object
  into_a(ops).map do |op|
    cop = required_parameters?(op) ? curry(op) : op
    ->(*args) {
      args.unshift(object);
      #puts "calling wop: #{cop}, with args: #{args}, object: #{object}"
      cop[*args] #rescue nil
    }
  end
end

Private Instance Methods

into_a(value) click to toggle source
# File lib/eco/language/models/wrap.rb, line 107
def into_a(value)
  value = [].push(value) unless value.is_a?(Array)
  value
end