ActA
ActAはActiveRecord
というかActiveModel
のvalidationを指定したもののみ行い、valid?
を得るものです。
class Model < ActiveRecord::Base
validates :str, :txt,
presence: true
validate :validate_str
def validate_str
errors.add(:str, :validate_str) if str == '失敗する'
end
end
model = Model.new
model.assign_attributes(str: '文字列').valid?
# false
actor = ActA.(Model)
actor.apply(str: '文字列').valid?
# true
actor.apply(str: '').valid?
# false
ただしActAのvalid?
ではvalidates
で与えられたバリデーションしか行えないので、実際のモデルで行われるvalid?
同等のことをするにはvalid_brutally?
を使う。
actor = ActA.(Model)
actor.apply(str: '失敗する').valid?
# true
actor.apply(str: '失敗する').valid_brutally?
# false
Installation
gem 'act_a'
bundle install
Usage
actor = ActA.(Model)
# <ActA::Actor:0x007f5577929388...
actor.apply(str: '文字列')
# <ActA::Validator:0x007f438907a250...
actor.apply(str: '文字列') == actor.apply(str: '文字列')
# false
actor.apply(str: '文字列').validate!
# not raise exception
actor.apply(str: '文字列', txt: '').validate!
# raise ActiveRecord::RecordInvalid
actor.apply(str: '失敗する').validate_brutally!
# raise ActiveRecord::RecordInvalid
actor.apply(str: '').validate.errors
# #<ActiveModel::Errors:0x007fad97b15368 @base=#<Model id: nil, str: "", txt: nil, created_at: nil, updated_at: nil>, @messages={:str=>["can't be blank"]}>
actor.apply(str: '').validate.messages
# {:str=>["can't be blank"]}
actor.apply(str: '').validate.valid?
# false
actor.apply(str: '文字列').validate.messages
# {}
actor.apply(str: '文字列').validate.valid?
# true