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