20
loading...
This website collects cookies to deliver better user experience
#... /models/restaurant.rb
class Restaurant < ApplicationRecordvalidates :name, presence: true
validates :address, presence: true
validates :phone_number, presence: true
validates :category, presence: true
validates :closing_time, presence: trueend # 5 lines of code
#... test/models/restaurant_test.rbclass RestaurantTest < ActiveSupport::TestCase
def setup
@restaurant = restaurants :first
end test 'Name should be present' do
@restaurant.name = nil
assert_not @restaurant.valid?
end test 'Address should be present' do
@restaurant.address = nil
assert_not @restaurant.valid?
end test 'Phone Number should be present' do
@restaurant.phone_number = nil
assert_not @restaurant.valid?
end test 'Category should be present' do
@restaurant.category = nil
assert_not @restaurant.valid?
end test 'Closing Time should be present' do
@restaurant.closing_time = nil
assert_not @restaurant.valid?
end
end # 4 lines of code per attribute test, 5 attributes 5*4 = 20 lines
test 'attribute is present' do
@restaurant.attribute = nil
assert_not @restaurant.valid?
end
#... test/models/restaurant_test.rb%i[name phone_number address category closing_time].each do |attr|
test "#{attr} must be present" do
eval "@restaurant.#{attr} = nil"
assert_not @restaurant.valid?
end
end# 6 lines of code 70% reduction in code volume ;)
#... /models/restaurant.rb%i[name phone_number address category closing_time].each do |attr|
eval "validates_presence_of #{attr}"
end # 3 lines of code 60% reduction in code volume