class Shoulda::Matchers::ActiveModel::Qualifiers::IgnoreInterferenceByWriter
@private
def always?
def always? setting == :always end
def changed?
def changed? @changed end
def condition_matches?(value)
def condition_matches?(value) if condition.respond_to?(:call) condition.call(value) else value.public_send(condition) end end
def considering?(value)
def considering?(value) case setting when :always then true when :never then false else condition_matches?(value) end end
def default_to(argument)
def default_to(argument) temporary_ignore_interference_by_writer = IgnoreInterferenceByWriter.new(argument) unless changed? @setting = temporary_ignore_interference_by_writer.setting @condition = temporary_ignore_interference_by_writer.condition end self end
def initialize(argument = :always)
def initialize(argument = :always) set(argument) @changed = false end
def invalid_argument_error(invalid_argument)
def invalid_argument_error(invalid_argument) ArgumentError.new(<<-ERROR) gument: #{invalid_argument.inspect}. nterference_by_writer takes one of three arguments: , either :never or :always. n, either true (which means always) or false (which means ith a single key, :when, and a single value, which is either of a method or a Proc. ERROR end
def never?
def never? setting == :never end
def set(argument)
def set(argument) if argument.is_a?(self.class) @setting = argument.setting @condition = argument.condition else case argument when true, :always @setting = :always when false, :never @setting = :never else @setting = :sometimes if argument.is_a?(Hash) @condition = argument.fetch(:when) else raise invalid_argument_error(argument) end end end @changed = true self rescue KeyError raise invalid_argument_error(argument) end