class Scrivener module Validations # Validates that minimum size of the specified attribute. # # class SignUp < Scrivener # attr_accessor :password # # def validate # assert_minimum_length(:password, 8) # end # end # # signup = Signup.new(password: "short") # signup.valid? # => false # signup.errors[:password] # => [:too_short] # def assert_minimum_length(att, val, error = [att, :too_short]) assert(send(att).to_s.length >= val, error) end # Validates that maximum size of the specified attribute. # # class SignUp < Scrivener # attr_accessor :password # # def validate # assert_minimum_length(:password, 72) # end # end # # signup = Signup.new(password: _very_long_password) # signup.valid? # => false # signup.errors[:password] # => [:too_long] # def assert_maximum_length(att, val, error = [att, :too_long]) assert(send(att).to_s.length <= val, error) end # Validates that the specified attribute matches exactly the # length restriction supplied. # # class SignUp < Scrivener # attr_accessor :status # # def validate # assert_exact_length(:status, 1) # end # end # # signup = Signup.new(status: "10") # signup.valid? # => false # signup.errors[:status] # => [:wrong_length] # def assert_exact_length(att, val, error = [att, :wrong_length]) assert(send(att).to_s.length == val, error) end # Encapsulates the pattern of wanting to validate a password or # email address field with a confirmation. # # class SignUp < Scrivener # attr_accessor :password, :password_confirmation # # def validate # assert_present(:password) # assert_confirmation(:password) # end # end # # signup = SignUp.new # signup.password = "123456" # signup.password_confirmation = "nonsense" # signup.valid? # => false # signup.errors[:password] # => [:not_confirmed] # def assert_confirmation(att, error = [att, :not_confirmed]) assert(send(:"#{att}_confirmation") == send(att), error) end end end