Sha256: e7941b244551c7f830f26460e5a08dde57c7ad52bfe28724d8b5c26a26ad796b

Contents?: true

Size: 1.49 KB

Versions: 1

Compression:

Stored size: 1.49 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, filter=nil)
    puts routes
    @buffer <<
      if routes.none?
        <<~MESSAGE
          # You do not have any routes defined!
          # Please add some routes in config/routes.rb.
        MESSAGE
      elsif filter && filter.key?(:controller)
        "# No routes were found for this controller."
      elsif filter && filter.key?(:grep)
        "# No routes were found for this grep pattern."
      end

    @buffer << "# For more information about routes, see the Rails guide: https://guides.rubyonrails.org/routing.html."
  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

1 entries across 1 versions & 1 rubygems

Version Path
sorbet-rails-0.2.0 lib/sorbet-rails/routes_rbi_formatter.rb