module PlainModel::Modeling::Associatable
Public Instance Methods
association_loaded?(name)
click to toggle source
# File lib/plain_model/modeling/associatable.rb, line 55 def association_loaded?(name) associations.key?(name.to_s) end
associations()
click to toggle source
# File lib/plain_model/modeling/associatable.rb, line 12 def associations @associations ||= {} end
define_association(name, options = {})
click to toggle source
# File lib/plain_model/modeling/associatable.rb, line 21 def define_association(name, options = {}) name = name.to_s association_builder_class = options.fetch(:klass) { ::PlainModel::AssociationBuilder } association_builder = association_builder_class.new self, options.except(:klass) self.association_types = association_types.merge(name => association_builder) define_association_methods(name) end
define_association_methods(name)
click to toggle source
# File lib/plain_model/modeling/associatable.rb, line 29 def define_association_methods(name) define_method(name) do return associations[name] if association_loaded?(name) associations[name] = load_association(name) end define_method("#{name}=") do |value| associations[name] = value end end
load_association(records, name, context: nil, includes: {})
click to toggle source
# File lib/plain_model/modeling/associatable.rb, line 41 def load_association(records, name, context: nil, includes: {}) association_builder = association_types.fetch(name.to_s) do raise ArgumentError, "invalid association #{name}" end association_builder.load_records(name, records, context: context, includes: includes) end
load_associations(records, includes, context: nil)
click to toggle source
# File lib/plain_model/modeling/associatable.rb, line 48 def load_associations(records, includes, context: nil) includes.each do |name, nested| load_association(records, name, context: context, includes: nested) end end