Skip to content

Instantly share code, notes, and snippets.

@gbpereira
Last active January 10, 2018 01:46
Show Gist options
  • Save gbpereira/10242a79dd2f983d2d0d to your computer and use it in GitHub Desktop.
Save gbpereira/10242a79dd2f983d2d0d to your computer and use it in GitHub Desktop.
# models de exemplo
rails g model product name:string description:text price:decimal
rails g model location lease_at:date return_at:date status:boolean
# application.rb
config.autoload_paths += %W["#{config.root}/app/validators/"]
# date_validator.rb
class DateValidator < ActiveModel::EachValidator
def validate_each(record, attribute, value)
valid = value.to_date rescue false
record.errors[attribute] << (options[:message] || "invalid date") unless valid
end
end
# validações no model
validates :lease_at, presence: true
validates :status, inclusion: [true, false]
validates :name, uniqueness: true
validates :price, numericality: { greater_than: 0 }
validates :lease_at, date: true
validates :password, presence: true, confirmation: true,
length: { within: 5..15 },
on: :update, if: :password_required?
def password_required?
(password.present? || password_confirmation.present?)
end
# exemplos de validações
it 'presence' do
product.price = nil
product.valid?
expect(product.errors[:price].any?).to be_truthy
end
it 'uniqueness' do
dup = product.dup
dup.save
product.valid?
expect(product.errors[:name].any?).to be_truthy
end
it 'numericality' do
product.price = 'abcde'
product.valid?
expect(product.errors[:price].any?).to be_truthy
end
it 'greater_than 0' do
[0, -1, -100].each do |p|
product.price = p
product.valid?
expect(product.errors[:price].any?).to be_truthy
end
end
it 'date' do
['abcd', 2000].each do |d|
location.return_at = d
location.valid?
expect(location.errors[:return_at].any?).to be_truthy
end
end
it 'inclusion' do
location.status = nil
location.valid?
expect(location.errors[:status].any?).to be_truthy
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment