Repository navigation
Add types for actionmailer v8.1 - #1092
Conversation
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Generated with `rbs prototype rb` from the activejob 8.1.4 source and post-processed the same way as the other Rails 8.1 gems: drop members already defined elsewhere, fill missing type arguments, add accessors defined with class_attribute, mattr_accessor, and cattr_accessor, add methods defined with delegate, and carry over typed signatures from 6.0 where the method still has the same parameters. The job generator in lib/rails is left out, as its superclass comes from railties, which activejob doesn't depend on. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Rails no longer has QueAdapter or SuckerPunchAdapter, so nothing refers to Que::Job or SuckerPunch::Job. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Logging defines them on the job class with cattr_accessor and class_attribute in its included block, which rbs prototype doesn't see. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
job_id, arguments, executions, queue_name, priority, and the other job attributes, enqueue, and perform_later, which returns the job or false when it couldn't be enqueued. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
rbs prototype marks a block as required unless the method checks it. These forward the block or don't use it: the callbacks with method names (before_perform :foo), assert_no_enqueued_jobs and assert_no_performed_jobs without a block, and a few internal methods. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…:Base ActiveJob::Callbacks and ActiveJob::Exceptions include ActiveSupport::Callbacks and ActiveSupport::Rescuable, so job classes have rescue_from and set_callback. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
7.0 had only hand-written signatures. 8.1 adds signatures generated with `rbs prototype rb` from the actionmailer 8.1.4 source and post-processed the same way as the other Rails 8.1 gems: drop members already defined elsewhere, fill missing type arguments, add the modules included inside `included do ... end`, and add accessors defined with class_attribute, mattr_accessor, and cattr_accessor and methods defined with delegate. Methods defined inside `class_methods do ... end` are generated as the concern's ClassMethods. The mailer generator in lib/rails is left out, as its superclass comes from railties, which actionmailer doesn't depend on. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
actionmailer depends on mail, whose RBS in this repository declares it. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
MessageDelivery has no processed method. processed? returns the processed mailer or message, or nil. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
rbs prototype marks a block as required unless the method checks it. These forward the block or store it: the callbacks with method names (before_deliver :foo), Collector#any, and the test assertions such as assert_no_emails and assert_enqueued_emails, which check the current deliveries when called without a block. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…Mailer::Base QueuedDelivery defines them on the mailer class with class_attribute in its included block, which rbs prototype doesn't see. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…Base includes Only the ones from Action Pack and Action View were listed, so mailers had no before_deliver, rescue_from, deliveries, or with. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…pture_emails deliver_later and deliver_later! return the enqueued job, or false if it couldn't be enqueued. deliveries is delegated to Mail::TestMailer. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…TestCase includes The generated classes now extend the ClassMethods of the concerns they include, directly or through other concerns, as ActiveSupport::Concern does. ActionMailer::TestCase gets tests and determine_default_mailer. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
@amatsuda Thanks for your contribution! Please follow the instructions below for each change. Available commandsYou can use the following commands by commenting on this PR.
|
|
/merge |

Adds signatures for actionmailer 8.1, based on 8.1.4.
This PR is stacked on #1090 (activejob 8.1), because actionmailer 8.1 needs activejob 8.1's signatures. Until that is merged, its commits show up here too. The commits for this PR are the ones starting with
actionmailer:.The latest version in this repository was actionmailer 7.0, which had only hand-written signatures for the main mailer API. This PR adds signatures generated from the 8.1.4 source and carries over the hand-written ones.
How it is made
actionmailer-generated.rbscomes fromrbs prototype rbrun onlib, then post-processed the same way as the other Rails 8.1 gems:untypedincluded do ... end, accessors defined withclass_attribute,mattr_accessor, andcattr_accessor, and methods defined withdelegateclass_methods do ... endas the concern'sClassMethods, whichrbs prototypeskipsClassMethodsof the concerns they include, directly or through other concerns, asActiveSupport::ConcerndoesThe mailer generator in
lib/railsis left out, since its superclass comes from railties, which actionmailer doesn't depend on.Changes to the hand-written RBS
The first commit copies 7.0's hand-written files unchanged, so the following commits show only the 8.1-specific changes:
Mail::Message. actionmailer depends on mail, whose RBS in this repository declares itMessageDelivery#processedis renamed toprocessed?. There's noprocessedmethoddelivery_jobanddeliver_later_queue_nametoActionMailer::Base.QueuedDeliverydefines them in itsincludedblockActionMailer::Baseextends theClassMethodsof the concerns it includes. Only the ones from Action Pack and Action View were listed, so mailers had nobefore_deliver,rescue_from,deliveries, orwithReturn types
deliver_lateranddeliver_later!return the enqueued job, orfalseif it couldn't be enqueued.ActionMailer::Base.deliveriesandcapture_emailsreturnArray[Mail::Message].Optional blocks
All required blocks were checked against the source, and the 10 that only forward or store the block were made optional: for example,
before_deliver :method_name,assert_no_emailsandassert_enqueued_emailswithout a block, andCollector#any.Tests
Each commit that changes types adds tests that fail without it.
bin/test gems/actionmailer/8.1and RuboCop's strict cops pass on every commit from the generation commit onward.🤖 Generated with Claude Code