Object Attorney
This gem allows you to create use cases with ActiveModel validations and keep your model clean.
1) Basic Usage
class User < Struct.new(:title, :first_name, :last_name)
end
class UserValidator < ObjectAttorney::Base
validates_presence_of :first_name
validate :last_name_present
def last_name_present(user)
return if user.last_name.present?
user.errors.add(:last_name, :blank)
end
end
@user = User.new
UserValidator.new(@user).valid? # false
@user.errors. # { first_name: ["can't be blank"], last_name: ["can't be blank"] }
2) Custom Usage
class User < ActiveRecord::Base
end
class UserValidator
include ObjectAttorney
defend :user
validates_presence_of :first_name, if: :last_name_is_present
attr_accessor :user
def initialize(user)
@user = user
end
def last_name_is_present(user)
user.last_name.present?
end
end
@user = User.new(last_name: 'Snow')
UserValidator.new(@user).invalid? # true
@user.errors. # { first_name: ["can't be blank"] }