module Mycrm::Facade::ClassMethods

Public Class Methods

extended(descendant) click to toggle source
# File lib/mycrm/facade.rb, line 60
def self.extended(descendant)
  descendant.singleton_class.class_eval do
    attr_accessor :delegate_classes
  end
end

Public Instance Methods

delegate(name, clazz, relations = {}) click to toggle source
# File lib/mycrm/facade.rb, line 66
def delegate(name, clazz, relations = {})
  self.delegate_classes ||= {}
  delegate_classes[name] = { class: clazz, relations: relations }
end
relations(delegate) click to toggle source
# File lib/mycrm/facade.rb, line 71
def relations(delegate)
  delegate_classes[delegate][:relations]
end
run(method = :find, *args) { |name, delegate, response| ... } click to toggle source
# File lib/mycrm/facade.rb, line 81
def run(method = :find, *args)
  attributes = {}.tap do |response|
    Mycrm::Connectable.session do
      self.delegate_classes.each do |name, delegate|
        res = if block_given?
          yield(name, delegate, response)
        elsif delegate[:class].respond_to? :find
          delegate[:class].send(method, *args)
        end
        response[name] = res.is_a?(Array) ? res.map(&:to_json) : res.to_json
      end
    end
  end
  new(attributes)
end