Sha256: a5c37b184a3806f598396b5d4b010244353fd7de085da0e30bed3dc64f06045a

Contents?: true

Size: 1.15 KB

Versions: 6

Compression:

Stored size: 1.15 KB

Contents

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

class SorbetRails::MailerRbiFormatter
  extend T::Sig

  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))
    @parlour = T.let(Parlour::RbiGenerator.new, Parlour::RbiGenerator)
  end

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

    @parlour.root.add_comments([
      "This is an autogenerated file for Rails' mailers.",
      'Please rerun bundle exec rake rails_rbi:mailers to regenerate.'
    ])

    @parlour.root.create_class(@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,
          parameters: parameters,
          return_type: 'ActionMailer::MessageDelivery',
          class_method: true,
        )
      end
    end

    @parlour.rbi
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
sorbet-rails-0.7.0 lib/sorbet-rails/mailer_rbi_formatter.rb
sorbet-rails-0.6.5.1 lib/sorbet-rails/mailer_rbi_formatter.rb
sorbet-rails-0.6.5 lib/sorbet-rails/mailer_rbi_formatter.rb
sorbet-rails-0.6.4 lib/sorbet-rails/mailer_rbi_formatter.rb
sorbet-rails-0.6.3 lib/sorbet-rails/mailer_rbi_formatter.rb
sorbet-rails-0.6.2 lib/sorbet-rails/mailer_rbi_formatter.rb