class Shoulda::Matchers::ActiveRecord::AssociationMatchers::OptionalMatcher
@private
Attributes
attribute_name[R]
missing_option[R]
optional[R]
submatcher[R]
Public Class Methods
new(attribute_name, optional)
click to toggle source
# File lib/shoulda/matchers/active_record/association_matchers/optional_matcher.rb, line 9 def initialize(attribute_name, optional) @attribute_name = attribute_name @optional = optional @submatcher = ActiveModel::AllowValueMatcher.new(nil). for(attribute_name) @missing_option = '' end
Public Instance Methods
description()
click to toggle source
# File lib/shoulda/matchers/active_record/association_matchers/optional_matcher.rb, line 17 def description "optional: #{optional}" end
matches?(subject)
click to toggle source
# File lib/shoulda/matchers/active_record/association_matchers/optional_matcher.rb, line 21 def matches?(subject) if submatcher_passes?(subject) true else @missing_option = build_missing_option false end end
Private Instance Methods
build_missing_option()
click to toggle source
# File lib/shoulda/matchers/active_record/association_matchers/optional_matcher.rb, line 43 def build_missing_option String.new('and for the record ').tap do |missing_option_string| missing_option_string << if optional 'not to ' else 'to ' end missing_option_string << ( 'fail validation if '\ ":#{attribute_name} is unset; i.e., either the association "\ 'should have been defined with `optional: '\ "#{optional.inspect}`, or there " ) missing_option_string << if optional 'should not ' else 'should ' end missing_option_string << "be a presence validation on :#{attribute_name}" end end
submatcher_passes?(subject)
click to toggle source
# File lib/shoulda/matchers/active_record/association_matchers/optional_matcher.rb, line 35 def submatcher_passes?(subject) if optional submatcher.matches?(subject) else submatcher.does_not_match?(subject) end end