Skip to content

Instantly share code, notes, and snippets.

@pumpkincouture
Created July 7, 2015 18:22
Show Gist options
  • Save pumpkincouture/52ca15f89091c687a624 to your computer and use it in GitHub Desktop.
Save pumpkincouture/52ca15f89091c687a624 to your computer and use it in GitHub Desktop.
module Form
GENDER_VALUES = ["Female", "Male", "Unknown"]
def self.build
{
first_name: create_field(:first_name, 'First Name', create_strategy(PresenceValidation)),
middle_name: create_field(:middle_name, 'Middle Name', create_strategy(NoValidation)),
last_name: create_field(:last_name, 'Last Name', create_strategy(PresenceValidation)),
gender: create_field(:gender, 'Gender', create_strategy(IncludedValidation, GENDER_VALUES), GENDER_VALUES),
birthdate: create_field(:birthdate, 'Date Of Birth', create_strategy(DateValidation)),
house_number: create_field(:house_number, 'House #', create_strategy(NoValidation)),
apartment_number: create_field(:apartment_number, 'Apt #', create_strategy(NoValidation)),
street1: create_field(:street1, 'Street', create_strategy(PresenceValidation)),
street2: create_field(:street2, 'Address Line 2', create_strategy(NoValidation)),
city: create_field(:city, 'City', create_strategy(PresenceValidation)),
state: create_field(:state, 'State', create_strategy(IncludedValidation, STATE_CODES), STATE_CODES),
zip: create_field(:zip, 'Zip Code', create_strategy(ZipValidation)),
zip4: create_field(:zip4, 'Zip+4', create_strategy(ZipFourValidation)),
issue_state: create_field(:issue_state, 'Issue State', create_strategy(IncludedValidation, STATE_CODES), STATE_CODES)
}
end
def self.create_field(name, label, validation_validation, values = [])
Field.new(name, label, validation_validation, values)
end
def self.create_strategy(strategy, *args)
strategy.new(*args)
end
def self.validate(form, params)
form.each do |name, field|
field.validate(params[name])
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment