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.
		
		
		
		
		
			
		
			
				
					
					
						
							46 lines
						
					
					
						
							1.4 KiB
						
					
					
				
			
		
		
	
	
							46 lines
						
					
					
						
							1.4 KiB
						
					
					
				| class CaseLogValidator < ActiveModel::Validator | |
|   # Methods need to be named 'validate_' followed by field name | |
|   # this is how the metaprogramming of the method name being | |
|   # call in the validate method works. | |
|  | |
|   def validate_tenant_age(record) | |
|     if record.tenant_age && !/^[1-9][0-9]?$|^120$/.match?(record.tenant_age.to_s) | |
|       record.errors.add :tenant_age, "must be between 0 and 120" | |
|     end | |
|   end | |
|  | |
|   def validate(record) | |
|     question_to_validate = options[:previous_page] | |
|     if question_to_validate && respond_to?("validate_#{question_to_validate}") | |
|       public_send("validate_#{question_to_validate}", record) | |
|     else | |
|       validation_methods = public_methods(false) - [__callee__] | |
|       validation_methods.each { |meth| public_send(meth, record) } | |
|     end | |
|   end | |
| end | |
|  | |
| class CaseLog < ApplicationRecord | |
|   validate :instance_validations | |
|   before_save :update_status! | |
|  | |
|   attr_writer :previous_page | |
|  | |
|   enum status: { "in progress" => 0, "submitted" => 1 } | |
|  | |
|   def instance_validations | |
|     validates_with CaseLogValidator, ({ previous_page: @previous_page } || {}) | |
|   end | |
|  | |
|   def update_status! | |
|     self.status = if all_fields_completed? && errors.empty? | |
|                     "submitted" | |
|                   else | |
|                     "in progress" | |
|                   end | |
|   end | |
|  | |
|   def all_fields_completed? | |
|     tenant_age.present? && tenant_code.present? && tenant_nationality.present? | |
|   end | |
| end
 | |
| 
 |