class EmployerSetupForm include ActiveModel::Model include ActiveModel::Attributes FIRST_STEP = "general_information" attribute :current_step, :string, default: FIRST_STEP attribute :general_information_data attribute :plans_data attribute :network_exceptions_data def initialize(params = {}) unless self.steps.first == FIRST_STEP raise StepMisalignmentError, "FIRST_STEP does not match first entry in steps" end @general_information_data = EmployerSetupGeneralInformationForm.new(attributes[:general_information_data]) @plans_data = EmployerSetupPlansForm.new(attributes[:plans_data]) @network_exceptions_data = EmployerSetupNetworkExceptionsForm.new(attributes[:network_exceptions_data]) end def steps %w[general_information plans network_exceptions summary] end def current_step_view "employer_setup/#{self.current_step}" end def next_step index = steps.index(current_step) if index && index < steps.length - 1 if steps[index + 1] == 'network_exceptions' && general_information_data.number_of_additional_network_logos == 0 steps[index + 2] else steps[index + 1] end end end def previous_step index = steps.index(current_step) steps[index - 1] if index && index > 0 end def save if valid? pl_plan_key = attributes[:general_information_data][:pl_plan_key] EmployerSetupGeneralInformationForm.new(attributes[:general_information_data]).save EmployerSetupPlansForm.new(attributes[:plans_data]).save(pl_plan_key) EmployerSetupNetworkExceptionsForm.new(attributes[:network_exceptions_data]).save(pl_plan_key) true else false end end end