Sha256: 863ff6798c4b251ef5cd4c38b5eb7c396215ed03df1b543b16bd555f2c1f55aa

Contents?: true

Size: 1.87 KB

Versions: 17

Compression:

Stored size: 1.87 KB

Contents

# typed: strict
# frozen_string_literal: true

require "parlour"

begin
  require "action_mailer"
rescue LoadError
  return
end

module Tapioca
  module Compilers
    module Dsl
      # `Tapioca::Compilers::Dsl::ActionMailer` generates RBI files for subclasses of
      # [`ActionMailer::Base`](https://api.rubyonrails.org/classes/ActionMailer/Base.html).
      #
      # For example, with the following `ActionMailer` subclass:
      #
      # ~~~rb
      # class NotifierMailer < ActionMailer::Base
      #   def notify_customer(customer_id)
      #     # ...
      #   end
      # end
      # ~~~
      #
      # this generator will produce the RBI file `notifier_mailer.rbi` with the following content:
      #
      # ~~~rbi
      # # notifier_mailer.rbi
      # # typed: true
      # class NotifierMailer
      #   sig { params(customer_id: T.untyped).returns(::ActionMailer::MessageDelivery) }
      #   def self.notify_customer(customer_id); end
      # end
      # ~~~
      class ActionMailer < Base
        extend T::Sig

        sig { override.params(root: Parlour::RbiGenerator::Namespace, constant: T.class_of(::ActionMailer::Base)).void }
        def decorate(root, constant)
          root.path(constant) do |mailer|
            constant.action_methods.to_a.each do |mailer_method|
              method_def = constant.instance_method(mailer_method)
              parameters = compile_method_parameters_to_parlour(method_def)
              create_method(
                mailer,
                mailer_method,
                parameters: parameters,
                return_type: '::ActionMailer::MessageDelivery',
                class_method: true
              )
            end
          end
        end

        sig { override.returns(T::Enumerable[Module]) }
        def gather_constants
          ::ActionMailer::Base.descendants.reject(&:abstract?)
        end
      end
    end
  end
end

Version data entries

17 entries across 17 versions & 1 rubygems

Version Path
tapioca-0.4.27 lib/tapioca/compilers/dsl/action_mailer.rb
tapioca-0.4.26 lib/tapioca/compilers/dsl/action_mailer.rb
tapioca-0.4.25 lib/tapioca/compilers/dsl/action_mailer.rb
tapioca-0.4.24 lib/tapioca/compilers/dsl/action_mailer.rb
tapioca-0.4.23 lib/tapioca/compilers/dsl/action_mailer.rb
tapioca-0.4.22 lib/tapioca/compilers/dsl/action_mailer.rb
tapioca-0.4.21 lib/tapioca/compilers/dsl/action_mailer.rb
tapioca-0.4.20 lib/tapioca/compilers/dsl/action_mailer.rb
tapioca-0.4.19 lib/tapioca/compilers/dsl/action_mailer.rb
tapioca-0.4.18 lib/tapioca/compilers/dsl/action_mailer.rb
tapioca-0.4.17 lib/tapioca/compilers/dsl/action_mailer.rb
tapioca-0.4.16 lib/tapioca/compilers/dsl/action_mailer.rb
tapioca-0.4.15 lib/tapioca/compilers/dsl/action_mailer.rb
tapioca-0.4.14 lib/tapioca/compilers/dsl/action_mailer.rb
tapioca-0.4.13 lib/tapioca/compilers/dsl/action_mailer.rb
tapioca-0.4.12 lib/tapioca/compilers/dsl/action_mailer.rb
tapioca-0.4.11 lib/tapioca/compilers/dsl/action_mailer.rb