# File lib/nested_record/setup.rb, line 47 def primary_check(type) if (pkey_attributes = primary_key) klass = record_class else klass = record_class.find_subtype(type) while !(pkey_attributes = klass.primary_key) && (klass < NestedRecord::Base) klass = klass.superclass end end # TODO: cache this NestedRecord::PrimaryKeyCheck.new(klass, pkey_attributes) if pkey_attributes end
class NestedRecord::Setup
Attributes
name[R]
primary_key[R]
reject_if_proc[R]
Public Class Methods
new(owner, name, **options, &block)
click to toggle source
# File lib/nested_record/setup.rb, line 6 def initialize(owner, name, **options, &block) @options = options @owner = owner @name = name setup_association_attribute setup_record_class(&block) setup_attributes_writer_opts setup_methods_extension end
Public Instance Methods
attributes_writer_strategy()
click to toggle source
# File lib/nested_record/setup.rb, line 36 def attributes_writer_strategy return unless @options.fetch(:attributes_writer) { true } case (strategy = @attributes_writer_opts.fetch(:strategy) { :upsert }) when :rewrite, :upsert return strategy else raise NestedRecord::ConfigurationError, "Unknown strategy #{strategy.inspect}" end end
primary_check(type)
click to toggle source
record_class()
click to toggle source
# File lib/nested_record/setup.rb, line 17 def record_class if @record_class.is_a? String @record_class = NestedRecord.lookup_const(@owner, @record_class) end @record_class end
Private Instance Methods
define_local_record_class(&block)
click to toggle source
# File lib/nested_record/setup.rb, line 74 def define_local_record_class(&block) case (cn = @options.fetch(:class_name) { false }) when true class_name = infer_record_class_name when false class_name = nil when String, Symbol class_name = cn.to_s else raise NestedRecord::ConfigurationError, "Bad :class_name option #{cn.inspect}" end @record_class = Class.new(NestedRecord::Base, &block) @owner.const_set(class_name, @record_class) if class_name end
infer_record_class_name()
click to toggle source
# File lib/nested_record/setup.rb, line 102 def infer_record_class_name cn = name.to_s.camelize cn = cn.singularize if self.is_a?(HasMany) cn end
link_existing_record_class()
click to toggle source
# File lib/nested_record/setup.rb, line 89 def link_existing_record_class if @options.key? :class_name case (cn = @options.fetch(:class_name)) when String, Symbol @record_class = cn.to_s else raise NestedRecord::ConfigurationError, "Bad :class_name option #{cn.inspect}" end else @record_class = infer_record_class_name end end
methods_extension_module_name()
click to toggle source
# File lib/nested_record/setup.rb, line 129 def methods_extension_module_name @methods_extension_module_name ||= :"NestedRecord_#{self.class.name.demodulize}_#{name.to_s.camelize}" end
setup_association_attribute()
click to toggle source
# File lib/nested_record/setup.rb, line 62 def setup_association_attribute @owner.attribute name, type, default: default_value end
setup_attributes_writer_opts()
click to toggle source
# File lib/nested_record/setup.rb, line 108 def setup_attributes_writer_opts case (aw = @options.fetch(:attributes_writer) { {} }) when Hash @attributes_writer_opts = aw when true, false @attributes_writer_opts = {} when Symbol @attributes_writer_opts = { strategy: aw } else raise NestedRecord::ConfigurationError, "Bad :attributes_writer option #{aw.inspect}" end @reject_if_proc = @attributes_writer_opts[:reject_if] end
setup_methods_extension()
click to toggle source
# File lib/nested_record/setup.rb, line 122 def setup_methods_extension methods_extension = build_methods_extension @owner.include methods_extension @owner.const_set methods_extension_module_name, methods_extension @owner.validate methods_extension.validation_method_name end
setup_record_class(&block)
click to toggle source
# File lib/nested_record/setup.rb, line 66 def setup_record_class(&block) if block define_local_record_class(&block) else link_existing_record_class end end