class RSpec::Matchers::DSL::Matcher

Public Class Methods

chain_value(value, &actual_definition) click to toggle source
# File lib/attribute_matcher/ext/rspec/chain_value.rb, line 7
def chain_value(value, &actual_definition)
  attr_accessor :chained_values, :"expected_#{value}", :"expected_#{value}_set"

  create_chain_method(value)
  create_all_values_match_method
  create_value_match_method(value, actual_definition)
end
failure_messages(&block) click to toggle source
Calls superclass method
# File lib/attribute_matcher/ext/rspec/failure_messages.rb, line 7
def failure_messages(&block)
  define_method :failure_message do
    failures = instance_eval(&block).compact.join(' and ')
    [super(), failures].reject(&:empty?).join(' but ')
  end
end

Private Class Methods

create_all_values_match_method() click to toggle source
# File lib/attribute_matcher/ext/rspec/chain_value.rb, line 27
def create_all_values_match_method
  return if instance_methods(false).include?(:values_match?)

  define_method(:all_values_match?) do
    chained_values.nil? || chained_values.map { |m| send(m) }.all?
  end
end
create_chain_method(value) click to toggle source
# File lib/attribute_matcher/ext/rspec/chain_value.rb, line 17
def create_chain_method(value)
  chain(value) do |expected_value = true|
    self.chained_values ||= []
    chained_values << :"#{value}_match?"

    send(:"expected_#{value}=", expected_value)
    send(:"expected_#{value}_set=", true)
  end
end
create_value_match_method(value, actual_definition) click to toggle source
# File lib/attribute_matcher/ext/rspec/chain_value.rb, line 35
def create_value_match_method(value, actual_definition)
  define_method :"#{value}_match?" do
    send(:"expected_#{value}_set").nil? || send(:"expected_#{value}").eql?(instance_exec(send(:"expected_#{value}"), &actual_definition))
  end
end