Sha256: 4ed1404ddb6364ca3fbbe88a1314a2f9fe5e4cd0fefbfccaaa65c3866bd76d21

Contents?: true

Size: 1.92 KB

Versions: 1

Compression:

Stored size: 1.92 KB

Contents

require 'rake'
require 'rake/tasklib'

module RbsRails
  class RakeTask < Rake::TaskLib
    attr_accessor :ignore_model_if, :name

    def initialize(name = :rbs_rails, &block)
      super()

      @name = name

      block.call(self) if block

      def_copy_signature_files
      def_generate_rbs_for_models
      def_generate_rbs_for_path_helpers
      def_all
    end

    def def_all
      desc 'Run all tasks of rbs_rails'

      deps = [:"#{name}:copy_signature_files", :"#{name}:generate_rbs_for_models", :"#{name}:generate_rbs_for_path_helpers"]
      task("#{name}:all": deps)
    end

    def def_copy_signature_files
      desc 'Copy RBS files for rbs_rails'
      task("#{name}:copy_signature_files": :environment) do
        require 'rbs_rails'

        to = Rails.root.join('sig/rbs_rails/')
        to.mkpath unless to.exist?
        RbsRails.copy_signatures(to: to)
      end
    end

    def def_generate_rbs_for_models
      desc 'Generate RBS files for Active Record models'
      task("#{name}:generate_rbs_for_models": :environment) do
        require 'rbs_rails'

        out_dir = Rails.root / 'sig'
        out_dir.mkdir unless out_dir.exist?

        Rails.application.eager_load!

        
        # HACK: for steep
        (_ = ::ActiveRecord::Base).descendants.each do |klass|
          next if klass.abstract_class?
          next if ignore_model_if&.call(klass)

          path = out_dir / "app/models/#{klass.name.underscore}.rbs"
          FileUtils.mkdir_p(path.dirname)

          sig = RbsRails::ActiveRecord.class_to_rbs(klass)
          path.write sig
        end
      end
    end

    def def_generate_rbs_for_path_helpers
      desc 'Generate RBS files for path helpers'
      task("#{name}:generate_rbs_for_path_helpers": :environment) do
        require 'rbs_rails'

        out_path = Rails.root.join 'sig/path_helpers.rbs'
        rbs = RbsRails::PathHelpers.generate
        out_path.write rbs
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rbs_rails-0.6.0 lib/rbs_rails/rake_task.rb