lib/tapioca/compilers/dsl/url_helpers.rb in tapioca-0.4.4 vs lib/tapioca/compilers/dsl/url_helpers.rb in tapioca-0.4.5
- old
+ new
@@ -12,9 +12,77 @@
end
module Tapioca
module Compilers
module Dsl
+ # `Tapioca::Compilers::Dsl::UrlHelpers` generates RBI files for classes that include or extend
+ # `Rails.application.routes.url_helpers`
+ # (see https://api.rubyonrails.org/v5.1.7/classes/ActionDispatch/Routing/UrlFor.html#module-ActionDispatch::Routing::UrlFor-label-URL+generation+for+named+routes).
+ #
+ # For example, with the following setup:
+ #
+ # ~~~rb
+ # # config/application.rb
+ # class Application < Rails::Application
+ # routes.draw do
+ # resource :index
+ # end
+ # end
+ # ~~~
+ #
+ # ~~~rb
+ # app/models/post.rb
+ # class Post
+ # include Rails.application.routes.url_helpers
+ # end
+ # ~~~
+ #
+ # this generator will produce the following RBI files:
+ #
+ # ~~~rbi
+ # # generated_path_helpers_module.rbi
+ # # typed: true
+ # module GeneratedPathHelpersModule
+ # include ActionDispatch::Routing::PolymorphicRoutes
+ # include ActionDispatch::Routing::UrlFor
+ #
+ # sig { params(args: T.untyped).returns(String) }
+ # def edit_index_path(*args); end
+ #
+ # sig { params(args: T.untyped).returns(String) }
+ # def index_path(*args); end
+ #
+ # sig { params(args: T.untyped).returns(String) }
+ # def new_index_path(*args); end
+ # end
+ # ~~~
+ #
+ # ~~~rbi
+ # # generated_url_helpers_module.rbi
+ # # typed: true
+ # module GeneratedUrlHelpersModule
+ # include ActionDispatch::Routing::PolymorphicRoutes
+ # include ActionDispatch::Routing::UrlFor
+ #
+ # sig { params(args: T.untyped).returns(String) }
+ # def edit_index_url(*args); end
+ #
+ # sig { params(args: T.untyped).returns(String) }
+ # def index_url(*args); end
+ #
+ # sig { params(args: T.untyped).returns(String) }
+ # def new_index_url(*args); end
+ # end
+ # ~~~
+ #
+ # ~~~rbi
+ # # post.rbi
+ # # typed: true
+ # class Post
+ # include GeneratedPathHelpersModule
+ # include GeneratedUrlHelpersModule
+ # end
+ # ~~~
class UrlHelpers < Base
extend T::Sig
sig { override.params(root: Parlour::RbiGenerator::Namespace, constant: T.class_of(Module)).void }
def decorate(root, constant)