class Netfira::WebConnect::HashOfModels

Public Class Methods

new() click to toggle source
Calls superclass method
# File lib/netfira/web_connect/components/hash_of_models.rb, line 4
def initialize
  super { |hash, key| hash[key] = [] }
end

Public Instance Methods

<<(value) click to toggle source
# File lib/netfira/web_connect/components/hash_of_models.rb, line 12
def <<(value)
  raise 'Only models are acceptable' unless Model === value
  self[value.class] << value
end
[](key) click to toggle source
Calls superclass method
# File lib/netfira/web_connect/components/hash_of_models.rb, line 8
def [](key)
  super class_for_key(key)
end
as_json(options = nil) click to toggle source
# File lib/netfira/web_connect/components/hash_of_models.rb, line 30
def as_json(options = nil)
  map do |klass, records|
    is_relation = klass < Model::Relation
    [
        klass.name.demodulize.to_sym,
        records.map { |record| is_relation ? record.records.map(&:origin_id) : record.origin_id }
    ]
  end.to_h
end
method_missing(sym, *args, &block) click to toggle source
Calls superclass method
# File lib/netfira/web_connect/components/hash_of_models.rb, line 17
def method_missing(sym, *args, &block)
  if respond_to_missing? sym
    klass = class_for_key(sym)
    -> { self[klass] }.tap { |method| self.class.__send__ :define_method, sym, method }.call
  else
    super sym, *args, &block
  end
end
respond_to_missing?(sym) click to toggle source
# File lib/netfira/web_connect/components/hash_of_models.rb, line 26
def respond_to_missing?(sym)
  sym !~ /[^\w]/ && !!class_for_key(sym)
end

Private Instance Methods

class_for_key(key) click to toggle source
# File lib/netfira/web_connect/components/hash_of_models.rb, line 42
def class_for_key(key)
  return key if Class === key and key < Model
  class_name = key.to_s.demodulize.camelize.singularize.to_sym
  if Models.const_defined? class_name
    klass = Models.const_get(class_name)
    klass < Model and klass
  end
end