class RSpec::Matchers::BuiltIn::HaveAttributes
@api private Provides the implementation for ‘have_attributes`. Not intended to be instantiated directly.
Attributes
respond_to_failed[R]
@private
Public Class Methods
new(expected)
click to toggle source
# File lib/rspec/matchers/built_in/have_attributes.rb, line 11 def initialize(expected) @expected = expected @values = {} @respond_to_failed = false @negated = false end
Public Instance Methods
actual()
click to toggle source
@private
# File lib/rspec/matchers/built_in/have_attributes.rb, line 19 def actual @values end
description()
click to toggle source
@api private @return [String]
# File lib/rspec/matchers/built_in/have_attributes.rb, line 43 def description described_items = surface_descriptions_in(expected) improve_hash_formatting "have attributes #{RSpec::Support::ObjectFormatter.format(described_items)}" end
diffable?()
click to toggle source
@api private @return [Boolean]
# File lib/rspec/matchers/built_in/have_attributes.rb, line 50 def diffable? !@respond_to_failed && !@negated end
does_not_match?(actual)
click to toggle source
@api private @return [Boolean]
# File lib/rspec/matchers/built_in/have_attributes.rb, line 34 def does_not_match?(actual) @actual = actual @negated = true return false unless respond_to_attributes? perform_match(:none?) end
failure_message()
click to toggle source
@api private @return [String]
# File lib/rspec/matchers/built_in/have_attributes.rb, line 56 def failure_message respond_to_failure_message_or do "expected #{actual_formatted} to #{description} but had attributes #{ formatted_values }" end end
failure_message_when_negated()
click to toggle source
@api private @return [String]
# File lib/rspec/matchers/built_in/have_attributes.rb, line 64 def failure_message_when_negated respond_to_failure_message_or { "expected #{actual_formatted} not to #{description}" } end
matches?(actual)
click to toggle source
@api private @return [Boolean]
# File lib/rspec/matchers/built_in/have_attributes.rb, line 25 def matches?(actual) @actual = actual @negated = false return false unless respond_to_attributes? perform_match(:all?) end
Private Instance Methods
actual_has_attribute?(attribute_key, attribute_value)
click to toggle source
# File lib/rspec/matchers/built_in/have_attributes.rb, line 85 def actual_has_attribute?(attribute_key, attribute_value) values_match?(attribute_value, @values.fetch(attribute_key)) end
cache_all_values()
click to toggle source
# File lib/rspec/matchers/built_in/have_attributes.rb, line 70 def cache_all_values @values = {} expected.each do |attribute_key, _attribute_value| actual_value = @actual.__send__(attribute_key) @values[attribute_key] = actual_value end end
formatted_values()
click to toggle source
# File lib/rspec/matchers/built_in/have_attributes.rb, line 107 def formatted_values values = RSpec::Support::ObjectFormatter.format(@values) improve_hash_formatting(values) end
perform_match(predicate)
click to toggle source
# File lib/rspec/matchers/built_in/have_attributes.rb, line 78 def perform_match(predicate) cache_all_values expected.__send__(predicate) do |attribute_key, attribute_value| actual_has_attribute?(attribute_key, attribute_value) end end
respond_to_attributes?()
click to toggle source
# File lib/rspec/matchers/built_in/have_attributes.rb, line 89 def respond_to_attributes? matches = respond_to_matcher.matches?(@actual) @respond_to_failed = !matches matches end
respond_to_failure_message_or() { || ... }
click to toggle source
# File lib/rspec/matchers/built_in/have_attributes.rb, line 99 def respond_to_failure_message_or if respond_to_failed respond_to_matcher.failure_message else improve_hash_formatting(yield) end end
respond_to_matcher()
click to toggle source
# File lib/rspec/matchers/built_in/have_attributes.rb, line 95 def respond_to_matcher @respond_to_matcher ||= RespondTo.new(*expected.keys).with(0).arguments.tap { |m| m.ignoring_method_signature_failure! } end