Browse Source

extract reusable logic from SalesLogVariables to independent module

pull/1596/head
Arthur Campbell 3 years ago
parent
commit
6c22ea8b55
  1. 30
      app/models/derived_variables/sales_log_variables.rb
  2. 27
      app/models/derived_variables/shared_logic.rb

30
app/models/derived_variables/sales_log_variables.rb

@ -1,6 +1,8 @@
module DerivedVariables::SalesLogVariables module DerivedVariables::SalesLogVariables
include DerivedVariables::SharedLogic
def set_derived_fields! def set_derived_fields!
reset_invalidated_derived_values! reset_invalidated_derived_values!(DEPENDENCIES)
self.ethnic = 17 if ethnic_refused? self.ethnic = 17 if ethnic_refused?
self.mscharge = nil if no_monthly_leasehold_charges? self.mscharge = nil if no_monthly_leasehold_charges?
@ -30,7 +32,7 @@ module DerivedVariables::SalesLogVariables
self.uprn_known = 0 self.uprn_known = 0
end end
set_encoded_derived_values! set_encoded_derived_values!(DEPENDENCIES)
end end
private private
@ -73,30 +75,6 @@ private
}, },
].freeze ].freeze
def reset_invalidated_derived_values!
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.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
def number_of_household_members def number_of_household_members
return unless hholdcount.present? && jointpur.present? return unless hholdcount.present? && jointpur.present?

27
app/models/derived_variables/shared_logic.rb

@ -0,0 +1,27 @@
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
Loading…
Cancel
Save