You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
28 lines
1021 B
28 lines
1021 B
2 years ago
|
module DerivedVariables::SharedLogic
|
||
|
private
|
||
|
|
||
|
def reset_invalidated_derived_values!(dependencies)
|
||
|
dependencies.each do |dependency|
|
||
|
any_conditions_changed = dependency[:conditions].any? { |attribute, _value| send("#{attribute}_changed?") }
|
||
|
next unless any_conditions_changed
|
||
|
|
||
|
previously_in_derived_state = dependency[:conditions].all? { |attribute, value| send("#{attribute}_was") == value }
|
||
|
next unless previously_in_derived_state
|
||
|
|
||
|
dependency[:derived_values].each do |derived_attribute, _derived_value|
|
||
|
Rails.logger.debug("Cleared derived #{derived_attribute} value")
|
||
|
send("#{derived_attribute}=", nil)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def set_encoded_derived_values!(dependencies)
|
||
|
dependencies.each do |dependency|
|
||
|
derivation_applies = dependency[:conditions].all? { |attribute, value| send(attribute) == value }
|
||
|
if derivation_applies
|
||
|
dependency[:derived_values].each { |attribute, value| send("#{attribute}=", value) }
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|