module Mycrm::Facade::InstanceMethods
Public Class Methods
included(descendant)
click to toggle source
# File lib/mycrm/facade.rb, line 10 def self.included(descendant) descendant.class_eval do attr_accessor :delegates end end
new(attributes = {})
click to toggle source
# File lib/mycrm/facade.rb, line 16 def initialize(attributes = {}) self.delegates = {} self.class.delegate_classes.each do |name, delegate| delegates[name] = delegate[:class].new attributes[name] end end
Public Instance Methods
method_missing(name, *args, &block)
click to toggle source
Calls superclass method
# File lib/mycrm/facade.rb, line 48 def method_missing(name, *args, &block) return delegates[name] if delegates.key?(name) delegate = delegates.values.detect { |d| d.respond_to?(name) } delegate ? delegate.send(name, *args) : super end
refresh_relation(name)
click to toggle source
# File lib/mycrm/facade.rb, line 38 def refresh_relation(name) self.class.relations(name).to_a.each do |pair| delegates[name].send("#{pair.first}=", relative_value(*pair.last.split('.'))) rescue nil end end
relative_value(delegate_name, field)
click to toggle source
# File lib/mycrm/facade.rb, line 44 def relative_value(delegate_name, field) delegates[delegate_name.to_sym].send(field) end
respond_to_missing?(name, include_private = false)
click to toggle source
Calls superclass method
# File lib/mycrm/facade.rb, line 54 def respond_to_missing?(name, include_private = false) delegates[name] || delegates.detect { |d| d.respond_to?(name) } || super end
run() { |instance| ... }
click to toggle source
# File lib/mycrm/facade.rb, line 27 def run {}.tap do |response| Mycrm::Connectable.session do delegates.each do |name, instance| refresh_relation(name) response[name] = yield(instance) end end end end
to_json()
click to toggle source
# File lib/mycrm/facade.rb, line 23 def to_json delegates.each_with_object({}) { |(name, instance), r| r[name] = instance.to_json } end