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