Sha256: 4d68a4db93e8bb384fa63a9c4af7cb7586caa49bbd1fc7c04e93e2a053288dde

Contents?: true

Size: 1.42 KB

Versions: 2

Compression:

Stored size: 1.42 KB

Contents

# frozen_string_literal: true

require "pathname"
require "rake/task"

module RbsActionmailer
  class RakeTask < Rake::TaskLib
    attr_accessor :name #: Symbol
    attr_accessor :signature_root_dir #: Pathname

    # @rbs name: Symbol
    # @rbs &block: ?(self) -> void
    def initialize(name = :'rbs:actionmailer', &block) #: void
      super()

      @name = name
      @signature_root_dir = Rails.root / "sig/actionmailer"

      block&.call(self)

      define_clean_task
      define_generate_task
      define_setup_task
    end

    def define_setup_task #: void
      deps = [:"#{name}:clean", :"#{name}:generate"]

      desc "Run all tasks of rbs_actionmailer"
      task("#{name}:setup" => deps)
    end

    def define_clean_task #: void
      desc "Clean up generated RBS files"
      task("#{name}:clean": :environment) do
        sh "rm", "-rf", signature_root_dir.to_s
      end
    end

    def define_generate_task #: void
      desc "Generate RBS files for ActionMailer classes"
      task("#{name}:generate": :environment) do
        require "rbs_actionmailer" # load RbsActionMailer lazily

        Rails.application.eager_load!

        ActionMailer::Base.descendants.each do |klass|
          path = signature_root_dir / "app/mailers/#{klass.name.underscore}.rbs"
          path.dirname.mkpath
          rbs = RbsActionmailer::Generator.new(klass).generate
          path.write rbs if rbs
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
rbs_actionmailer-1.1.0 lib/rbs_actionmailer/rake_task.rb
rbs_actionmailer-1.0.0 lib/rbs_actionmailer/rake_task.rb