Class: RbsRails::RakeTask

Inherits:
Rake::TaskLib
  • Object
show all
Defined in:
lib/rbs_rails/rake_task.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name = :rbs_rails, &block) ⇒ RakeTask

Returns a new instance of RakeTask.



8
9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/rbs_rails/rake_task.rb', line 8

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

  @name = name

  block.call(self) if block

  setup_signature_root_dir!

  def_generate_rbs_for_models
  def_generate_rbs_for_path_helpers
  def_all
end

Instance Attribute Details

#ignore_model_ifObject

Returns the value of attribute ignore_model_if.



6
7
8
# File 'lib/rbs_rails/rake_task.rb', line 6

def ignore_model_if
  @ignore_model_if
end

#nameObject

Returns the value of attribute name.



6
7
8
# File 'lib/rbs_rails/rake_task.rb', line 6

def name
  @name
end

#signature_root_dirObject

Returns the value of attribute signature_root_dir.



6
7
8
# File 'lib/rbs_rails/rake_task.rb', line 6

def signature_root_dir
  @signature_root_dir
end

Instance Method Details

#def_allObject



22
23
24
25
26
27
# File 'lib/rbs_rails/rake_task.rb', line 22

def def_all
  desc 'Run all tasks of rbs_rails'

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

#def_generate_rbs_for_modelsObject



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/rbs_rails/rake_task.rb', line 29

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'

    Rails.application.eager_load!

    dep_builder = DependencyBuilder.new
    
    ::ActiveRecord::Base.descendants.each do |klass|
      next unless RbsRails::ActiveRecord.generatable?(klass)
      next if ignore_model_if&.call(klass)

      path = signature_root_dir / "app/models/#{klass.name.underscore}.rbs"
      path.dirname.mkpath

      sig = RbsRails::ActiveRecord.class_to_rbs(klass, dependencies: dep_builder.deps)
      path.write sig
      dep_builder.done << klass.name
    end

    if dep_rbs = dep_builder.build
      signature_root_dir.join('model_dependencies.rbs').write(dep_rbs)
    end
  end
end

#def_generate_rbs_for_path_helpersObject



56
57
58
59
60
61
62
63
64
65
# File 'lib/rbs_rails/rake_task.rb', line 56

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 = signature_root_dir.join 'path_helpers.rbs'
    rbs = RbsRails::PathHelpers.generate
    out_path.write rbs
  end
end