Module: SuperModel::Associations::BelongsTo
- Defined in:
- lib/super_model/associations/belongs_to.rb
Class Method Summary collapse
Instance Method Summary collapse
Class Method Details
.def_association_methods(options = {}) ⇒ Object
25 26 27 28 29 30 31 32 33 34 |
# File 'lib/super_model/associations/belongs_to.rb', line 25 def def_association_methods(={}) Error::HashType.check( , required_keys: [:class, :resource_name, :getter_proc, :setter_proc] ) Error::ProcType.check( [:getter_proc] ) Error::ProcType.check( [:setter_proc] ) [:class].instance_eval do define_method( [:resource_name], &[:getter_proc] ) define_method( "#{ [:resource_name] }=", &[:setter_proc] ) end end |
.def_foreign_key_methods(options = {}) ⇒ Object
13 14 15 16 17 18 19 20 21 22 23 |
# File 'lib/super_model/associations/belongs_to.rb', line 13 def def_foreign_key_methods(={}) Error::HashType.check( , required_keys: [:class, :foreign_key] ) [:class].instance_eval do attr_reader [:foreign_key] define_method("#{ [:foreign_key] }=") do |value| instance_variable_set( "@#{ [:foreign_key] }", Error::IntegerType.check(value) ) end end end |
Instance Method Details
#belongs_to(resource_name, options = {}) ⇒ Object
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/super_model/associations/belongs_to.rb', line 38 def belongs_to(resource_name, ={}) [:resource_name] ||= SuperModel::Associations.sanitize_resource_name( resource_name, :singular ) [:foreign_key] ||= SuperModel::Associations.foreign_key_for( [:resource_name], :singular ) BelongsTo.def_foreign_key_methods( class: self, foreign_key: [:foreign_key] ) BelongsTo.def_association_methods( class: self, resource_name: [:resource_name], getter_proc: Proc.new do ObjectSpace._id2ref( instance_variable_get("@#{ [:foreign_key] }") ) if instance_variable_defined?("@#{ [:foreign_key] }") end, setter_proc: Proc.new do |value| send( "#{ [:foreign_key] }=", value.object_id ) end ) end |