Class: RSpec::Rails::Matchers::SendEmail Private
Relationships & Source Files | |
Super Chains via Extension / Inclusion / Inheritance | |
Class Chain:
self,
BaseMatcher
|
|
Instance Chain:
|
|
Inherits: |
RSpec::Rails::Matchers::BaseMatcher
|
Defined in: | rspec-rails/lib/rspec/rails/matchers/send_email.rb |
Overview
Matcher class for #send_email. Should not be instantiated directly.
Constant Summary
-
INSPECT_EMAIL_ATTRIBUTES =
Define the email attributes that should be included in the inspection output.
%i[subject from to cc bcc].freeze
BaseMatcher
- Inherited
Class Method Summary
- .new(criteria) ⇒ SendEmail constructor Internal use only
BaseMatcher
- Inherited
.matcher_name, .new, | |
.underscore | Borrowed from ActiveSupport. |
Instance Attribute Summary
- #supports_block_expectations? ⇒ Boolean readonly Internal use only
- #supports_value_expectations? ⇒ Boolean readonly Internal use only
- #diffable? ⇒ Boolean readonly private Internal use only
- #multiple_match? ⇒ Boolean readonly private Internal use only
BaseMatcher
- Inherited
#actual, | |
#diffable? |
|
#expected, #expects_call_stack_jump?, #matcher_name, #matcher_name=, #rescued_exception, | |
#supports_block_expectations? | Most matchers are value matchers (i.e. meant to work with ‘expect(value)`) rather than block matchers (i.e. meant to work with `expect { }`), so this defaults to false. |
Instance Method Summary
- #failure_message ⇒ String Internal use only
- #failure_message_when_negated ⇒ String Internal use only
- #matches?(block) ⇒ Boolean Internal use only
- #define_matched_emails(block) private Internal use only
- #deliveries private Internal use only
- #matched_email?(email) ⇒ Boolean private Internal use only
- #sent_emails_message private Internal use only
BaseMatcher
- Inherited
#actual_formatted, | |
#description | Generates a description using |
#expected_formatted, | |
#match_unless_raises | Used to wrap a block of code that will indicate failure by raising one of the named exceptions. |
#matches? | Indicates if the match is successful. |
#assert_ivars, #present_ivars |
BaseMatcher::DefaultFailureMessages
- Included
#failure_message | Provides a good generic failure message. |
#failure_message_when_negated | Provides a good generic negative failure message. |
BaseMatcher::HashFormatting
- Included
#improve_hash_formatting | ‘{ |
::RSpec::Matchers::Composable
- Included
#& | Alias for Matchers::Composable#and. |
#=== | Delegates to #matches?. |
#and | Creates a compound |
#description_of | Returns the description of the given object in a way that is aware of composed matchers. |
#or | Creates a compound |
#values_match? | This provides a generic way to fuzzy-match an expected value against an actual value. |
#| | Alias for Matchers::Composable#or. |
#should_enumerate? | We should enumerate arrays as long as they are not recursive. |
#surface_descriptions_in | Transforms the given data structure (typically a hash or array) into a new data structure that, when |
#unreadable_io?, | |
#with_matchers_cloned | Historically, a single matcher instance was only checked against a single value. |
Instance Attribute Details
#diffable? ⇒ Boolean
(readonly, private)
# File 'rspec-rails/lib/rspec/rails/matchers/send_email.rb', line 56
def diffable? true end
#multiple_match? ⇒ Boolean
(readonly, private)
# File 'rspec-rails/lib/rspec/rails/matchers/send_email.rb', line 88
def multiple_match? @matched_emails.many? end
#supports_block_expectations? ⇒ Boolean
(readonly)
# File 'rspec-rails/lib/rspec/rails/matchers/send_email.rb', line 26
def supports_block_expectations? true end
#supports_value_expectations? ⇒ Boolean
(readonly)
# File 'rspec-rails/lib/rspec/rails/matchers/send_email.rb', line 21
def supports_value_expectations? false end
Instance Method Details
#define_matched_emails(block) (private)
[ GitHub ]# File 'rspec-rails/lib/rspec/rails/matchers/send_email.rb', line 64
def define_matched_emails(block) before = deliveries.dup block.call after = deliveries @diff = after - before @matched_emails = @diff.select(&method(:matched_email?)) end
#deliveries (private)
[ GitHub ]# File 'rspec-rails/lib/rspec/rails/matchers/send_email.rb', line 60
def deliveries ActionMailer::Base.deliveries end
#failure_message ⇒ String
# File 'rspec-rails/lib/rspec/rails/matchers/send_email.rb', line 38
def result = if multiple_match? "More than 1 matching emails were sent." else "No matching emails were sent." end "#{result}#{}" end
#failure_message_when_negated ⇒ String
# File 'rspec-rails/lib/rspec/rails/matchers/send_email.rb', line 50
def "Expected not to send an email but it was sent." end
#matched_email?(email) ⇒ Boolean
(private)
# File 'rspec-rails/lib/rspec/rails/matchers/send_email.rb', line 75
def matched_email?(email) @criteria.all? do |attr, value| expected = case attr when :to, :from, :cc, :bcc then Array(value) else value end values_match?(expected, email.public_send(attr)) end end
#matches?(block) ⇒ Boolean
# File 'rspec-rails/lib/rspec/rails/matchers/send_email.rb', line 30
def matches?(block) define_matched_emails(block) @matched_emails.one? end
#sent_emails_message (private)
[ GitHub ]# File 'rspec-rails/lib/rspec/rails/matchers/send_email.rb', line 92
def if @diff.empty? "\n\nThere were no any emails sent inside the expectation block." else sent_emails = @diff.map do |email| inspected = INSPECT_EMAIL_ATTRIBUTES.map { |attr| "#{attr}: #{email.public_send(attr)}" }.join(", ") "- #{inspected}" end.join("\n") "\n\nThe following emails were sent:\n#{sent_emails}" end end