module Data2ruby::ClassMethods
Private Class Methods
name()
click to toggle source
# File lib/data2ruby.rb, line 49 def self.name 'AnonAssociation' end
Public Instance Methods
associations()
click to toggle source
# File lib/data2ruby.rb, line 9 def associations @_associations ||= [] end
has_many(label, &block)
click to toggle source
# File lib/data2ruby.rb, line 25 def has_many(label, &block) attr_writer(label) associations << label klass = build_assoc_class(&block) assoc_instance_builder = build_assoc_instance_builder(klass) inst_var_memo = "@_has_many_#{label}" define_method(label) do memoize(inst_var_memo) do data[label].map do |item| assoc_instance_builder.(item) end end end end
has_one(label, &block)
click to toggle source
# File lib/data2ruby.rb, line 13 def has_one(label, &block) attr_writer(label) associations << label klass = build_assoc_class(&block) assoc_instance_builder = build_assoc_instance_builder(klass) inst_var_memo = "@_has_one_#{label}" define_method(label) do memoize(inst_var_memo) { assoc_instance_builder.(data[label]) } end end
Private Instance Methods
build_assoc_class(&block)
click to toggle source
# File lib/data2ruby.rb, line 43 def build_assoc_class(&block) Class.new do include ActiveModel::Model include Data2ruby extend ActiveModel::Naming def self.name 'AnonAssociation' end def name self.class.name end end .tap { |klass| klass.class_exec(&block) } end
build_assoc_instance_builder(klass)
click to toggle source
# File lib/data2ruby.rb, line 60 def build_assoc_instance_builder(klass) lambda do |data| klass.new(data).tap do |obj| obj.define_singleton_method(:data) { data } end end end
name()
click to toggle source
# File lib/data2ruby.rb, line 53 def name self.class.name end