Sha256: 366cb5c53fc4ccb9982fd0ea62ef6b3afe4675d5e16f4dbb42e6217313fb2af5

Contents?: true

Size: 1.52 KB

Versions: 17

Compression:

Stored size: 1.52 KB

Contents

# typed: strict
require('parlour')
require('sorbet-rails/sorbet_utils.rb')

module SorbetRails
  class MailerRbiFormatter
    extend T::Sig

    Parameter = ::Parlour::RbiGenerator::Parameter

    sig { returns(Parlour::RbiGenerator) }
    attr_reader :rbi_generator

    sig { returns(T.class_of(ActionMailer::Base)) }
    attr_reader :mailer_class

    sig { params(mailer_class: T.class_of(ActionMailer::Base)).void }
    def initialize(mailer_class)
      @mailer_class = T.let(mailer_class, T.class_of(ActionMailer::Base))
      @rbi_generator = T.let(Parlour::RbiGenerator.new, Parlour::RbiGenerator)
    end

    sig { void }
    def populate_rbi
      @rbi_generator.root.add_comment([
        "This is an autogenerated file for Rails' mailers.",
        'Please rerun bundle exec rake rails_rbi:mailers to regenerate.'
      ])

      @rbi_generator.root.create_class(T.must(@mailer_class.name)) do |mailer_rbi|
        @mailer_class.action_methods.to_a.sort.each do |mailer_method|
          method_def = @mailer_class.instance_method(mailer_method)
          parameters = SorbetRails::SorbetUtils.parameters_from_method_def(method_def)
          mailer_rbi.create_method(
            mailer_method.to_s,
            parameters: parameters,
            return_type: 'ActionMailer::MessageDelivery',
            class_method: true,
          )
        end
      end
    end

    sig { returns(String) }
    def generate_rbi
      puts "-- Generate sigs for mailer #{@mailer_class.name} --"
      populate_rbi
      @rbi_generator.rbi
    end
  end
end

Version data entries

17 entries across 17 versions & 1 rubygems

Version Path
sorbet-rails-0.7.34 lib/sorbet-rails/mailer_rbi_formatter.rb
sorbet-rails-0.7.33 lib/sorbet-rails/mailer_rbi_formatter.rb
sorbet-rails-0.7.32 lib/sorbet-rails/mailer_rbi_formatter.rb
sorbet-rails-0.7.31 lib/sorbet-rails/mailer_rbi_formatter.rb
sorbet-rails-0.7.27 lib/sorbet-rails/mailer_rbi_formatter.rb
sorbet-rails-0.7.26 lib/sorbet-rails/mailer_rbi_formatter.rb
sorbet-rails-0.7.25 lib/sorbet-rails/mailer_rbi_formatter.rb
sorbet-rails-0.7.24 lib/sorbet-rails/mailer_rbi_formatter.rb
sorbet-rails-0.7.23 lib/sorbet-rails/mailer_rbi_formatter.rb
sorbet-rails-0.7.22 lib/sorbet-rails/mailer_rbi_formatter.rb
sorbet-rails-0.7.20 lib/sorbet-rails/mailer_rbi_formatter.rb
sorbet-rails-0.7.19 lib/sorbet-rails/mailer_rbi_formatter.rb
sorbet-rails-0.7.18 lib/sorbet-rails/mailer_rbi_formatter.rb
sorbet-rails-0.7.5 lib/sorbet-rails/mailer_rbi_formatter.rb
sorbet-rails-0.7.4 lib/sorbet-rails/mailer_rbi_formatter.rb
sorbet-rails-0.7.3 lib/sorbet-rails/mailer_rbi_formatter.rb
sorbet-rails-0.7.2 lib/sorbet-rails/mailer_rbi_formatter.rb