class Gourami::Form
Base Form
for doing actions based on the attributes specified. This class has to be inherited by different forms, each performing a different action. If needed, validate
method can be overridden if necessary.
@example
class LogIn < Gourami::Form attribute(:username, :type => :string) attribute(:password, :type => :string) def validate unless valid_login? append_error(:username, :invalid_credentials) end end def perform User.create(attributes) end private def valid_login? user = User.first(:username => username) user && check_password_secure(user.password, password) end end
@example
class UpdateUser < Gourami::Form VALID_TYPES = %w[buyer seller] record(:user, :skip => true) attribute(:username, :type => :string) attribute(:first_name, :type => :string) attribute(:percentage, :type => :integer) attribute(:type, :type => :string) def validate validate_presence(:username) validate_length(:username, :min => 2, :max => 64) validate_presence(:first_name) validate_presence(:percantage) validate_range(:percentage, :min => 0, :max => 100) validate_presence(:type) validate_inclusion(:type, VALID_TYPES) end def perform user.update(attributes) end end # Usage of the new form class: form = UpdateUser.new({ :user => User.first, :username => "WeijieWorld", :first_name => "Weijie", :percentage => "100", :type => "buyer" }) if form.valid? form.perform # Do something else else # Do something else end