Forms have 2 basic data flows:
User input -> form object -> model
When writing, forms have 2 basic purposes:
- Validating user input
- Normalizing user input
model -> form object -> display to user
When displaying, forms have 1 purpose:
- Normalizing persisted input for display to user
(separate read / write transformers???)
# For use in create/update actions
class PhoneWriter < PoFo::InTransformer
# The form object will see this version of the attribute internally.
# Sets @value
# User input -> form object.
def value=(phone)
¦ @value = phone.gsub('-', '').gsub(' ', '')
end
# form object -> model
def value
¦ # default returns @value
end
end
# For use in edit action
class PhoneReader < PoFo::OutTransformer
# form object -> display to user
def value
¦ format_phone_number(@value)
end
# model -> form object
def value=(phone)
¦ # defaults to @model.<value>
end
end