From 6c22ea8b554c3662de3807b66734a4a274edc3e2 Mon Sep 17 00:00:00 2001 From: Arthur Campbell Date: Fri, 28 Apr 2023 07:29:26 +0100 Subject: [PATCH] extract reusable logic from SalesLogVariables to independent module --- .../derived_variables/sales_log_variables.rb | 30 +++---------------- app/models/derived_variables/shared_logic.rb | 27 +++++++++++++++++ 2 files changed, 31 insertions(+), 26 deletions(-) create mode 100644 app/models/derived_variables/shared_logic.rb diff --git a/app/models/derived_variables/sales_log_variables.rb b/app/models/derived_variables/sales_log_variables.rb index 9151a72f5..c30c62b9a 100644 --- a/app/models/derived_variables/sales_log_variables.rb +++ b/app/models/derived_variables/sales_log_variables.rb @@ -1,6 +1,8 @@ module DerivedVariables::SalesLogVariables + include DerivedVariables::SharedLogic + def set_derived_fields! - reset_invalidated_derived_values! + reset_invalidated_derived_values!(DEPENDENCIES) self.ethnic = 17 if ethnic_refused? self.mscharge = nil if no_monthly_leasehold_charges? @@ -30,7 +32,7 @@ module DerivedVariables::SalesLogVariables self.uprn_known = 0 end - set_encoded_derived_values! + set_encoded_derived_values!(DEPENDENCIES) end private @@ -73,30 +75,6 @@ private }, ].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 return unless hholdcount.present? && jointpur.present? diff --git a/app/models/derived_variables/shared_logic.rb b/app/models/derived_variables/shared_logic.rb new file mode 100644 index 000000000..ce265c276 --- /dev/null +++ b/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 \ No newline at end of file