Fix document formatting on ActionMailbox [ci skip]

Use `+` instead of backquote.
This commit is contained in:
colorbox 2019-01-16 00:55:42 +09:00
parent d67863af39
commit 620ba4c12a
11 changed files with 48 additions and 48 deletions

View File

@ -38,7 +38,7 @@ module ActionMailbox
# config.action_mailbox.ingress = :mailgun # config.action_mailbox.ingress = :mailgun
# #
# 3. {Configure Mailgun}[https://documentation.mailgun.com/en/latest/user_manual.html#receiving-forwarding-and-storing-messages] # 3. {Configure Mailgun}[https://documentation.mailgun.com/en/latest/user_manual.html#receiving-forwarding-and-storing-messages]
# to forward inbound emails to `/rails/action_mailbox/mailgun/inbound_emails/mime`. # to forward inbound emails to +/rails/action_mailbox/mailgun/inbound_emails/mime+.
# #
# If your application lived at <tt>https://example.com</tt>, you would specify the fully-qualified URL # If your application lived at <tt>https://example.com</tt>, you would specify the fully-qualified URL
# <tt>https://example.com/rails/action_mailbox/mailgun/inbound_emails/mime</tt>. # <tt>https://example.com/rails/action_mailbox/mailgun/inbound_emails/mime</tt>.

View File

@ -1,10 +1,10 @@
# frozen_string_literal: true # frozen_string_literal: true
module ActionMailbox module ActionMailbox
# You can configure when this `IncinerationJob` will be run as a time-after-processing using the # You can configure when this +IncinerationJob+ will be run as a time-after-processing using the
# `config.action_mailbox.incinerate_after` or `ActionMailbox.incinerate_after` setting. # +config.action_mailbox.incinerate_after+ or +ActionMailbox.incinerate_after+ setting.
# #
# Since this incineration is set for the future, it'll automatically ignore any `InboundEmail`s # Since this incineration is set for the future, it'll automatically ignore any <tt>InboundEmail</tt>s
# that have already been deleted and discard itself if so. # that have already been deleted and discard itself if so.
class IncinerationJob < ActiveJob::Base class IncinerationJob < ActiveJob::Base
queue_as { ActionMailbox.queues[:incineration] } queue_as { ActionMailbox.queues[:incineration] }

View File

@ -3,22 +3,22 @@
require "mail" require "mail"
module ActionMailbox module ActionMailbox
# The `InboundEmail` is an Active Record that keeps a reference to the raw email stored in Active Storage # The +InboundEmail+ is an Active Record that keeps a reference to the raw email stored in Active Storage
# and tracks the status of processing. By default, incoming emails will go through the following lifecycle: # and tracks the status of processing. By default, incoming emails will go through the following lifecycle:
# #
# * Pending: Just received by one of the ingress controllers and scheduled for routing. # * Pending: Just received by one of the ingress controllers and scheduled for routing.
# * Processing: During active processing, while a specific mailbox is running its #process method. # * Processing: During active processing, while a specific mailbox is running its #process method.
# * Delivered: Successfully processed by the specific mailbox. # * Delivered: Successfully processed by the specific mailbox.
# * Failed: An exception was raised during the specific mailbox's execution of the `#process` method. # * Failed: An exception was raised during the specific mailbox's execution of the +#process+ method.
# * Bounced: Rejected processing by the specific mailbox and bounced to sender. # * Bounced: Rejected processing by the specific mailbox and bounced to sender.
# #
# Once the `InboundEmail` has reached the status of being either `delivered`, `failed`, or `bounced`, # Once the +InboundEmail+ has reached the status of being either +delivered+, +failed+, or +bounced+,
# it'll count as having been `#processed?`. Once processed, the `InboundEmail` will be scheduled for # it'll count as having been +#processed?+. Once processed, the +InboundEmail+ will be scheduled for
# automatic incineration at a later point. # automatic incineration at a later point.
# #
# When working with an `InboundEmail`, you'll usually interact with the parsed version of the source, # When working with an +InboundEmail+, you'll usually interact with the parsed version of the source,
# which is available as a `Mail` object from `#mail`. But you can also access the raw source directly # which is available as a +Mail+ object from +#mail+. But you can also access the raw source directly
# using the `#source` method. # using the +#source+ method.
# #
# Examples: # Examples:
# #

View File

@ -1,8 +1,8 @@
# frozen_string_literal: true # frozen_string_literal: true
# Ensure that the `InboundEmail` is automatically scheduled for later incineration if the status has been # Ensure that the +InboundEmail+ is automatically scheduled for later incineration if the status has been
# changed to `processed`. The later incineration will be invoked at the time specified by the # changed to +processed+. The later incineration will be invoked at the time specified by the
# `ActionMailbox.incinerate_after` time using the `IncinerationJob`. # +ActionMailbox.incinerate_after+ time using the +IncinerationJob+.
module ActionMailbox::InboundEmail::Incineratable module ActionMailbox::InboundEmail::Incineratable
extend ActiveSupport::Concern extend ActiveSupport::Concern

View File

@ -1,10 +1,10 @@
# frozen_string_literal: true # frozen_string_literal: true
module ActionMailbox module ActionMailbox
# Command class for carrying out the actual incineration of the `InboundMail` that's been scheduled # Command class for carrying out the actual incineration of the +InboundMail+ that's been scheduled
# for removal. Before the incineration which really is just a call to `#destroy!` is run, we verify # for removal. Before the incineration which really is just a call to +#destroy!+ is run, we verify
# that it's both eligible (by virtue of having already been processed) and time to do so (that is, # that it's both eligible (by virtue of having already been processed) and time to do so (that is,
# the `InboundEmail` was processed after the `incinerate_after` time). # the +InboundEmail+ was processed after the +incinerate_after+ time).
class InboundEmail::Incineratable::Incineration class InboundEmail::Incineratable::Incineration
def initialize(inbound_email) def initialize(inbound_email)
@inbound_email = inbound_email @inbound_email = inbound_email

View File

@ -1,11 +1,11 @@
# frozen_string_literal: true # frozen_string_literal: true
# The `Message-ID` as specified by rfc822 is supposed to be a unique identifier for that individual email. # The +Message-ID+ as specified by rfc822 is supposed to be a unique identifier for that individual email.
# That makes it an ideal tracking token for debugging and forensics, just like `X-Request-Id` does for # That makes it an ideal tracking token for debugging and forensics, just like +X-Request-Id+ does for
# web request. # web request.
# #
# If an inbound email does not, against the rfc822 mandate, specify a Message-ID, one will be generated # If an inbound email does not, against the rfc822 mandate, specify a Message-ID, one will be generated
# using the approach from `Mail::MessageIdField`. # using the approach from <tt>Mail::MessageIdField</tt>.
module ActionMailbox::InboundEmail::MessageId module ActionMailbox::InboundEmail::MessageId
extend ActiveSupport::Concern extend ActiveSupport::Concern
@ -14,9 +14,9 @@ module ActionMailbox::InboundEmail::MessageId
end end
class_methods do class_methods do
# Create a new `InboundEmail` from the raw `source` of the email, which be uploaded as a Active Storage # Create a new +InboundEmail+ from the raw +source+ of the email, which be uploaded as a Active Storage
# attachment called `raw_email`. Before the upload, extract the Message-ID from the `source` and set # attachment called +raw_email+. Before the upload, extract the Message-ID from the +source+ and set
# it as an attribute on the new `InboundEmail`. # it as an attribute on the new +InboundEmail+.
def create_and_extract_message_id!(source, **options) def create_and_extract_message_id!(source, **options)
create! options.merge(message_id: extract_message_id(source)) do |inbound_email| create! options.merge(message_id: extract_message_id(source)) do |inbound_email|
inbound_email.raw_email.attach io: StringIO.new(source), filename: "message.eml", content_type: "message/rfc822" inbound_email.raw_email.attach io: StringIO.new(source), filename: "message.eml", content_type: "message/rfc822"

View File

@ -1,9 +1,9 @@
# frozen_string_literal: true # frozen_string_literal: true
# A newly received `InboundEmail` will not be routed synchronously as part of ingress controller's receival. # A newly received +InboundEmail+ will not be routed synchronously as part of ingress controller's receival.
# Instead, the routing will be done asynchronously, using a `RoutingJob`, to ensure maximum parallel capacity. # Instead, the routing will be done asynchronously, using a +RoutingJob+, to ensure maximum parallel capacity.
# #
# By default, all newly created `InboundEmail` records that have the status of `pending`, which is the default, # By default, all newly created +InboundEmail+ records that have the status of +pending+, which is the default,
# will be scheduled for automatic, deferred routing. # will be scheduled for automatic, deferred routing.
module ActionMailbox::InboundEmail::Routable module ActionMailbox::InboundEmail::Routable
extend ActiveSupport::Concern extend ActiveSupport::Concern
@ -12,12 +12,12 @@ module ActionMailbox::InboundEmail::Routable
after_create_commit :route_later, if: :pending? after_create_commit :route_later, if: :pending?
end end
# Enqueue a `RoutingJob` for this `InboundEmail`. # Enqueue a +RoutingJob+ for this +InboundEmail+.
def route_later def route_later
ActionMailbox::RoutingJob.perform_later self ActionMailbox::RoutingJob.perform_later self
end end
# Route this `InboundEmail` using the routing rules declared on the `ApplicationMailbox`. # Route this +InboundEmail+ using the routing rules declared on the +ApplicationMailbox+.
def route def route
ApplicationMailbox.route self ApplicationMailbox.route self
end end

View File

@ -7,7 +7,7 @@ require "action_mailbox/routing"
module ActionMailbox module ActionMailbox
# The base class for all application mailboxes. Not intended to be inherited from directly. Inherit from # The base class for all application mailboxes. Not intended to be inherited from directly. Inherit from
# `ApplicationMailbox` instead, as that's where the app-specific routing is configured. This routing # +ApplicationMailbox+ instead, as that's where the app-specific routing is configured. This routing
# is specified in the following ways: # is specified in the following ways:
# #
# class ApplicationMailbox < ActionMailbox::Base # class ApplicationMailbox < ActionMailbox::Base
@ -27,15 +27,15 @@ module ActionMailbox
# routing :all => :backstop # routing :all => :backstop
# end # end
# #
# Application mailboxes need to overwrite the `#process` method, which is invoked by the framework after # Application mailboxes need to overwrite the +#process+ method, which is invoked by the framework after
# callbacks have been run. The callbacks available are: `before_processing`, `after_processing`, and # callbacks have been run. The callbacks available are: +before_processing+, +after_processing+, and
# `around_processing`. The primary use case is ensure certain preconditions to processing are fulfilled # +around_processing+. The primary use case is ensure certain preconditions to processing are fulfilled
# using `before_processing` callbacks. # using +before_processing+ callbacks.
# #
# If a precondition fails to be met, you can halt the processing using the `#bounced!` method, # If a precondition fails to be met, you can halt the processing using the +#bounced!+ method,
# which will silently prevent any further processing, but not actually send out any bounce notice. You # which will silently prevent any further processing, but not actually send out any bounce notice. You
# can also pair this behavior with the invocation of an Action Mailer class responsible for sending out # can also pair this behavior with the invocation of an Action Mailer class responsible for sending out
# an actual bounce email. This is done using the `#bounce_with` method, which takes the mail object returned # an actual bounce email. This is done using the +#bounce_with+ method, which takes the mail object returned
# by an Action Mailer method, like so: # by an Action Mailer method, like so:
# #
# class ForwardsMailbox < ApplicationMailbox # class ForwardsMailbox < ApplicationMailbox
@ -50,12 +50,12 @@ module ActionMailbox
# end # end
# #
# During the processing of the inbound email, the status will be tracked. Before processing begins, # During the processing of the inbound email, the status will be tracked. Before processing begins,
# the email will normally have the `pending` status. Once processing begins, just before callbacks # the email will normally have the +pending+ status. Once processing begins, just before callbacks
# and the `#process` method is called, the status is changed to `processing`. If processing is allowed to # and the +#process+ method is called, the status is changed to +processing+. If processing is allowed to
# complete, the status is changed to `delivered`. If a bounce is triggered, then `bounced`. If an unhandled # complete, the status is changed to +delivered+. If a bounce is triggered, then +bounced+. If an unhandled
# exception is bubbled up, then `failed`. # exception is bubbled up, then +failed+.
# #
# Exceptions can be handled at the class level using the familiar `Rescuable` approach: # Exceptions can be handled at the class level using the familiar +Rescuable+ approach:
# #
# class ForwardsMailbox < ApplicationMailbox # class ForwardsMailbox < ApplicationMailbox
# rescue_from(ApplicationSpecificVerificationError) { bounced! } # rescue_from(ApplicationSpecificVerificationError) { bounced! }

View File

@ -2,7 +2,7 @@
module ActionMailbox module ActionMailbox
# Encapsulates a route, which can then be matched against an inbound_email and provide a lookup of the matching # Encapsulates a route, which can then be matched against an inbound_email and provide a lookup of the matching
# mailbox class. See examples for the different route addresses and how to use them in the `ActionMailbox::Base` # mailbox class. See examples for the different route addresses and how to use them in the +ActionMailbox::Base+
# documentation. # documentation.
class Router::Route class Router::Route
attr_reader :address, :mailbox_name attr_reader :address, :mailbox_name

View File

@ -1,7 +1,7 @@
# frozen_string_literal: true # frozen_string_literal: true
module ActionMailbox module ActionMailbox
# See `ActionMailbox::Base` for how to specify routing. # See +ActionMailbox::Base+ for how to specify routing.
module Routing module Routing
extend ActiveSupport::Concern extend ActiveSupport::Concern

View File

@ -4,38 +4,38 @@ require "mail"
module ActionMailbox module ActionMailbox
module TestHelper module TestHelper
# Create an `InboundEmail` record using an eml fixture in the format of message/rfc822 # Create an +InboundEmail+ record using an eml fixture in the format of message/rfc822
# referenced with +fixture_name+ located in +test/fixtures/files/fixture_name+. # referenced with +fixture_name+ located in +test/fixtures/files/fixture_name+.
def create_inbound_email_from_fixture(fixture_name, status: :processing) def create_inbound_email_from_fixture(fixture_name, status: :processing)
create_inbound_email_from_source file_fixture(fixture_name).read, status: status create_inbound_email_from_source file_fixture(fixture_name).read, status: status
end end
# Create an `InboundEmail` by specifying it using `Mail.new` options. Example: # Create an +InboundEmail+ by specifying it using +Mail.new+ options. Example:
# #
# create_inbound_email_from_mail(from: "david@loudthinking.com", subject: "Hello!") # create_inbound_email_from_mail(from: "david@loudthinking.com", subject: "Hello!")
def create_inbound_email_from_mail(status: :processing, **mail_options) def create_inbound_email_from_mail(status: :processing, **mail_options)
create_inbound_email_from_source Mail.new(mail_options).to_s, status: status create_inbound_email_from_source Mail.new(mail_options).to_s, status: status
end end
# Create an `InboundEmail` using the raw rfc822 `source` as text. # Create an +InboundEmail+ using the raw rfc822 +source+ as text.
def create_inbound_email_from_source(source, status: :processing) def create_inbound_email_from_source(source, status: :processing)
ActionMailbox::InboundEmail.create_and_extract_message_id! source, status: status ActionMailbox::InboundEmail.create_and_extract_message_id! source, status: status
end end
# Create an `InboundEmail` from fixture using the same arguments as `create_inbound_email_from_fixture` # Create an +InboundEmail+ from fixture using the same arguments as +create_inbound_email_from_fixture+
# and immediately route it to processing. # and immediately route it to processing.
def receive_inbound_email_from_fixture(*args) def receive_inbound_email_from_fixture(*args)
create_inbound_email_from_fixture(*args).tap(&:route) create_inbound_email_from_fixture(*args).tap(&:route)
end end
# Create an `InboundEmail` from fixture using the same arguments as `create_inbound_email_from_mail` # Create an +InboundEmail+ from fixture using the same arguments as +create_inbound_email_from_mail+
# and immediately route it to processing. # and immediately route it to processing.
def receive_inbound_email_from_mail(**kwargs) def receive_inbound_email_from_mail(**kwargs)
create_inbound_email_from_mail(**kwargs).tap(&:route) create_inbound_email_from_mail(**kwargs).tap(&:route)
end end
# Create an `InboundEmail` from fixture using the same arguments as `create_inbound_email_from_source` # Create an +InboundEmail+ from fixture using the same arguments as +create_inbound_email_from_source+
# and immediately route it to processing. # and immediately route it to processing.
def receive_inbound_email_from_source(**kwargs) def receive_inbound_email_from_source(**kwargs)
create_inbound_email_from_source(**kwargs).tap(&:route) create_inbound_email_from_source(**kwargs).tap(&:route)