class SorbetRails::RoutesRbiFormatter

typed: strict

Public Class Methods

new() click to toggle source
# File lib/sorbet-rails/routes_rbi_formatter.rb, line 6
def initialize
  @parlour = T.let(Parlour::RbiGenerator.new, Parlour::RbiGenerator)
end

Public Instance Methods

header(routes) click to toggle source
# File lib/sorbet-rails/routes_rbi_formatter.rb, line 21
def header(routes)
  @parlour.root.add_comment([
    'This is an autogenerated file for Rails routes.',
    'Please run bundle exec rake rails_rbi:routes to regenerate.'
  ])

  @parlour.root.create_class('ActionController::Base') do |klass|
    klass.create_include('GeneratedUrlHelpers')
  end

  @parlour.root.create_class('ActionController::API') do |klass|
    klass.create_include('GeneratedUrlHelpers')
  end

  @parlour.root.create_module('ActionView::Helpers') do |mod|
    mod.create_include('GeneratedUrlHelpers')
  end

  @parlour.root.create_class('ActionMailer::Base') do |mod|
    mod.create_include('GeneratedUrlHelpers')
  end
end
no_routes(routes = nil, filter = nil) click to toggle source
# File lib/sorbet-rails/routes_rbi_formatter.rb, line 45
def no_routes(routes = nil, filter = nil)
  @parlour.root.add_comment([
    'You do not have any routes defined!',
    'Please add some routes in config/routes.rb.',
    'For more information about routes, see the Rails guide: https://guides.rubyonrails.org/routing.html.'
  ])
end
result() click to toggle source
# File lib/sorbet-rails/routes_rbi_formatter.rb, line 54
def result
  @parlour.rbi
end
section(routes) click to toggle source
# File lib/sorbet-rails/routes_rbi_formatter.rb, line 16
def section(routes)
  draw_section(routes)
end
section_title(title) click to toggle source
# File lib/sorbet-rails/routes_rbi_formatter.rb, line 11
def section_title(title)
  nil
end

Private Instance Methods

draw_section(routes) click to toggle source
# File lib/sorbet-rails/routes_rbi_formatter.rb, line 61
def draw_section(routes)
  @parlour.root.create_module('GeneratedUrlHelpers') do |klass|
    routes.each do |r|
      next unless r[:name].present?

      klass.add_comment_to_next_child("Sigs for route #{r[:path]}")
      klass.create_method(
        "#{r[:name]}_path",
        parameters: [
          Parlour::RbiGenerator::Parameter.new("*args", type: "T.untyped"),
          Parlour::RbiGenerator::Parameter.new("**kwargs", type: "T.untyped")
        ],
        return_type: "String"
      )
      klass.create_method(
        "#{r[:name]}_url",
        parameters: [
          Parlour::RbiGenerator::Parameter.new("*args", type: "T.untyped"),
          Parlour::RbiGenerator::Parameter.new("**kwargs", type: "T.untyped")
        ],
        return_type: "String"
      )
    end
  end
end