class Assembly::Model

Attributes

client[R]
id[R]

Public Class Methods

class_name() click to toggle source
# File lib/assembly/model.rb, line 75
def self.class_name
  self.name.split('::')[-1]
end
construct_from(response, client=nil) click to toggle source
# File lib/assembly/model.rb, line 27
def self.construct_from(response, client=nil)
  new(response[:id], client).merge(response, client)
end
new(id=nil, client=nil) click to toggle source
# File lib/assembly/model.rb, line 11
def initialize(id=nil, client=nil)
  @id = id
  @client = client
  @values = {}
  @dirty_values = Set.new
end

Public Instance Methods

[](k) click to toggle source
# File lib/assembly/model.rb, line 40
def [](k)
  @values[k.to_sym]
end
[]=(k, v) click to toggle source
# File lib/assembly/model.rb, line 44
def []=(k, v)
  send(:"#{k}=", v)
end
as_json(*a) click to toggle source
# File lib/assembly/model.rb, line 60
def as_json(*a)
  @values.as_json(*a)
end
dirty?() click to toggle source
# File lib/assembly/model.rb, line 36
def dirty?
  @dirty_values.any?
end
dirty_params() click to toggle source
# File lib/assembly/model.rb, line 79
def dirty_params
  @dirty_values.reduce({}) do |hsh, k|
    hsh[k] = @values[k]
    hsh
  end
end
each(&blk) click to toggle source
# File lib/assembly/model.rb, line 71
def each(&blk)
  @values.each(&blk)
end
keys() click to toggle source
# File lib/assembly/model.rb, line 48
def keys
  @values.keys
end
merge(values, client=nil) click to toggle source
# File lib/assembly/model.rb, line 18
def merge(values, client=nil)
  added = Set.new(values.keys - @values.keys)
  add_accessors(added)
  values.each do |k, v|
    @values[k] = Util.build(v, client)
  end
  self
end
to_hash() click to toggle source
# File lib/assembly/model.rb, line 64
def to_hash
  @values.inject({}) do |acc, (key, value)|
    acc[key] = value.respond_to?(:to_hash) ? value.to_hash : value
    acc
  end
end
to_json(*a) click to toggle source
# File lib/assembly/model.rb, line 56
def to_json(*a)
  JSON.generate(@values)
end
update_from(response) click to toggle source
# File lib/assembly/model.rb, line 31
def update_from(response)
  @dirty_values.clear
  merge(response)
end
values() click to toggle source
# File lib/assembly/model.rb, line 52
def values
  @values.values
end

Protected Instance Methods

add_accessors(keys) click to toggle source
# File lib/assembly/model.rb, line 92
def add_accessors(keys)
  keys.each do |k|
    next if k == :id
    next if self.class.instance_methods(false).include?(k)
    self.class.class_eval %[
      def #{k}
        @values[:#{k}]
      end

      def #{k}=(v)
        @values[:#{k}] = v
        @dirty_values.add(:#{k})
      end
    ]
  end
end
metaclass() click to toggle source
# File lib/assembly/model.rb, line 88
def metaclass
  class << self; self; end
end