Module: LunaPark::Extensions::Dsl::ForeignKey::ClassMethods
- Defined in:
- lib/luna_park/extensions/dsl/foreign_key.rb
Instance Method Summary collapse
- #fk(fk_name, assoc_name, pk: :id) ⇒ Object
-
#foreign_key(fk_name, assoc_name, primary_key: :id) ⇒ Object
rubocop:disable Metrics/MethodLength, Metrics/AbcSize.
Instance Method Details
#fk(fk_name, assoc_name, pk: :id) ⇒ Object
53 54 55 |
# File 'lib/luna_park/extensions/dsl/foreign_key.rb', line 53 def fk(fk_name, assoc_name, pk: :id) foreign_key(fk_name, assoc_name, primary_key: pk) end |
#foreign_key(fk_name, assoc_name, primary_key: :id) ⇒ Object
rubocop:disable Metrics/MethodLength, Metrics/AbcSize
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/luna_park/extensions/dsl/foreign_key.rb', line 57 def foreign_key(fk_name, assoc_name, primary_key: :id) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize pk_name = primary_key serializable_attributes(fk_name) if include?(Serializable) comparable_attributes(fk_name) if include?(Comparable) attr_reader fk_name, assoc_name anonym_mixin = Module.new do define_method(:"#{assoc_name}=") do |new_assoc| new_assoc_pk = extract_pk_value_from_object__(new_assoc, pk_name) instance_variable_set(:"@#{fk_name}", new_assoc_pk) instance_variable_set(:"@#{assoc_name}", new_assoc) end define_method(:"#{fk_name}=") do |new_fk| assoc = public_send(assoc_name) instance_variable_set(:"@#{fk_name}", new_fk) return new_fk if assoc.nil? current_assoc_pk = extract_pk_value_from_object__(assoc, pk_name) instance_variable_set(:"@#{assoc_name}", nil) unless new_fk == current_assoc_pk new_fk end end include anonym_mixin end |