module LunaPark::Extensions::Dsl::ForeignKey::ClassMethods
Public Instance Methods
fk(fk_name, assoc_name, pk: :id)
click to toggle source
# 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)
click to toggle source
# 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