Module: Jets::Router::Helpers::NamedRoutes::Generated
- Extended by:
- Generated
- Included in:
- Generated
- Defined in:
- lib/jets/router/helpers/named_routes/generated.rb
Defined Under Namespace
Modules: MountedHelpers
Instance Method Summary collapse
- #create_helper_module(route_set) ⇒ Object
- #create_helper_module!(module_name, route_set) ⇒ Object
- #define_mounted_helper(mod, route_set) ⇒ Object
- #helper_module_name(route_set) ⇒ Object
-
#mounted_helpers ⇒ Object
Contains all the mounted helpers across different engines and the ‘main_app` helper for the application.
Instance Method Details
#create_helper_module(route_set) ⇒ Object
5 6 7 8 |
# File 'lib/jets/router/helpers/named_routes/generated.rb', line 5 def create_helper_module(route_set) module_name = helper_module_name(route_set) module_name.constantize rescue create_helper_module!(module_name, route_set) end |
#create_helper_module!(module_name, route_set) ⇒ Object
18 19 20 21 22 23 24 25 26 27 28 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 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
# File 'lib/jets/router/helpers/named_routes/generated.rb', line 18 def create_helper_module!(module_name, route_set) mod = Module.new do extend ActiveSupport::Concern # Needed for _url_for_modules to work since or UrlHelper ClassMethods not included mattr_accessor :path_helpers, default: Set.new mattr_accessor :url_helpers, default: Set.new include AddFullUrl # For compatibility with Rails url_helpers include ActionDispatch::Routing::UrlFor define_singleton_method(:_routes) { route_set } # needed for controller class context define_method(:_routes) { route_set } # needed for view context # Jets convenience method define_singleton_method(:route_set) { route_set } define_singleton_method(:_url_for_modules) { ActionView::RoutingUrlFor } define_method(:_url_for_modules) { ActionView::RoutingUrlFor } # Mimic Rails behavior # Precdence: # 1. config.action_mailer.default_url_options # 2. Jets.application.default_url_options def self.class..empty? ? Jets.application. : self.class. end def add_methods! route_set.routes.each do |route| next unless route.as next if route.engine? name = route.as path_name = "#{name}_path" url_name = "#{name}_url" engine_class = route_set.engine.class # Normally, self is <PostsController> or View context instance define_method(path_name) do |*args| NamedRouteMethod.new(route, args, self, engine_class).path end self.path_helpers.add(path_name) define_method(url_name) do |*args| path = send(path_name, *args) = args. add_full_url(.merge(path: path)) end self.url_helpers.add(url_name) end end def remove_methods! remove = Proc.new { |method| remove_method(method) } path_helpers.each(&:remove) url_helpers.each(&:remove) self.path_helpers.clear self.url_helpers.clear end # Wonder if extend self is may idea since it can allow context to be module itself # instead of the controller or view instance. However, it allows # Jets.application.routes.url_helpers.posts_path style calls in jets console extend self add_methods! end # Name it instead of using anonymous module to help debugging # IE: Jets::Router::Helpers::NamedRoutes::Generated::MainAppHelpers basename = module_name.split('::').last.to_sym Jets::Router::Helpers::NamedRoutes::Generated.const_set(basename, mod) define_mounted_helper(mod, route_set) mod end |
#define_mounted_helper(mod, route_set) ⇒ Object
95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
# File 'lib/jets/router/helpers/named_routes/generated.rb', line 95 def define_mounted_helper(mod, route_set) name = mod.name.split('::').last.sub('Helpers','').underscore.to_sym return if MountedHelpers.method_defined?(name) helpers_module = route_set.url_helpers MountedHelpers.class_eval do define_method "_#{name}" do Jets::Router::Helpers::NamedRoutes::Proxy.new(self, helpers_module) end end MountedHelpers.class_eval(<<-RUBY, __FILE__, __LINE__ + 1) def #{name} @_#{name} ||= _#{name} end RUBY end |
#helper_module_name(route_set) ⇒ Object
10 11 12 13 14 15 16 |
# File 'lib/jets/router/helpers/named_routes/generated.rb', line 10 def helper_module_name(route_set) engine_class = route_set.engine.class name = engine_class == Jets.app_class ? "main_app" : engine_class.engine_name name = name.gsub('::','') name = "#{name.camelize}Helpers" # MainAppHelpers or BlorghHelpers "Jets::Router::Helpers::NamedRoutes::Generated::#{name}" end |
#mounted_helpers ⇒ Object
Contains all the mounted helpers across different engines and the ‘main_app` helper for the application. You can include this in your classes if you want to access routes for other engines.
122 123 124 |
# File 'lib/jets/router/helpers/named_routes/generated.rb', line 122 def mounted_helpers MountedHelpers end |