Sha256: aa1137ee7a3374c8c5308f5964e5d7050973bd07dc39de1242d0ad21140cd00f

Contents?: true

Size: 1.24 KB

Versions: 2

Compression:

Stored size: 1.24 KB

Contents

# typed: true
class RoutesRbiFormatter
  def initialize
    @buffer = []
  end

  def section_title(title)
    @buffer << "\n# Section #{title}"
  end

  def section(routes)
    @buffer << draw_section(routes)
  end

  def header(routes)
  end

  def no_routes(routes=nil, filter=nil)
    @buffer <<
      <<~MESSAGE
        # 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.
      MESSAGE
  end

  def result
    <<~MESSAGE
      # This is an autogenerated file for routes helper methods

      # typed: strong
      class ActionController::Base
        extend T::Sig

      #{@buffer.join("\n").indent(2)}
      end
    MESSAGE
  end

  private
  def draw_section(routes)
    routes.map do |r|
      if r[:name].present?
        <<~MESSAGE
          # Sigs for route #{r[:path]}
          sig { params(args: T.untyped, kwargs: T.untyped).returns(String) }
          def #{r[:name]}_path(*args, **kwargs); end
          sig { params(args: T.untyped, kwargs: T.untyped).returns(String) }
          def #{r[:name]}_url(*args, **kwargs); end
        MESSAGE
      else
        nil
      end
    end.compact
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
sorbet-rails-0.4.0 lib/sorbet-rails/routes_rbi_formatter.rb
sorbet-rails-0.3.0 lib/sorbet-rails/routes_rbi_formatter.rb