Make it possible to patch ActionMailer compiler #1409
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Motivation
Give a workaround for #1392 where included helper methods are typed by tapioca as if they were mailer methods. As @paracycle points out in that thread, tapioca is technically doing the right thing (see the
action_methods
implementation) although subjectively it may not always be what the consumer might want.One suggestion was to use
helper Foo
instead ofinclude Foo
but that may break ifFoo
is a "concern" and usesincluded do/end
that expected to be included in aActionMailer::Base
sincehelper Foo
includes that module into a vanilla module. For example:Implementation
I think there are a few options to address:
ActionMailer
rbi compiler gets more opinionated and explicitly only generates mailer method RBI for methods defined by the mailer itself or any non-abstract parent class (i.e. not any included module ancestors).ActionMailer
compiler to fetch the action methods so it's easier to patch with some more opinionated logic by the consumer.The selected option would make it possible to:
Happy to change options or open to other suggestions if the maintainers have any thoughts.
Tests
This doesn't change any behavior, but I did backfill a few new tests to lock in the current behavior of the rbi compiler.