Module: Magic::Rails::Engine
- Defined in:
- lib/formol/rails/engine.rb
Instance Method Summary collapse
-
#load_engine_routes(engine_symbol = nil) ⇒ Object
Automatically append all of the current engine’s routes to the main application’s route set.
Instance Method Details
#load_engine_routes(engine_symbol = nil) ⇒ Object
Automatically append all of the current engine’s routes to the main application’s route set. This needs to be done for ALL functional tests that use engine routes, since the mounted routes don’t work during tests.
15 16 17 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 |
# File 'lib/formol/rails/engine.rb', line 15 def load_engine_routes(engine_symbol = nil) if engine_symbol engine_name = engine_symbol.to_s.camelize #else # No engine provided, so presume the current engine is the one to load #engine_name = self.class.name.split("::").first.split("(").last end engine = ("#{engine_name}::Engine").constantize # Append the routes for this module to the existing routes ::Rails.application.routes.disable_clear_and_finalize = true ::Rails.application.routes.clear! ::Rails.application.routes_reloader.paths.each { |path| load(path) } ::Rails.application.routes.draw do resourced_routes = [] named_routes = engine.routes.named_routes.routes unnamed_routes = engine.routes.routes - named_routes.values engine.routes.routes.each do |route| # Call the method by hand based on the symbol path = "/#{engine_name.underscore}#{route.path}" verb = route.verb.to_s.downcase.to_sym requirements = route.requirements if path_helper = named_routes.key(route) requirements[:as] = path_helper elsif route.requirements[:controller].present? # Presume that all controllers referenced in routes should also be # resources and append that routing on the end so that *_path helpers # will still work resourced_routes << route.requirements[:controller].gsub("#{engine_name.downcase}/", "").to_sym end send(verb, path, requirements) if respond_to?(verb) end def namespace!(sp_r, &block) r = sp_r.shift if sp_r.empty? resources r.to_sym else namespace r.to_sym do namespace!(sp_r) end end end # Add each route, once, to the end under a scope to trick path helpers. # This will probably break as soon as there is route name overlap, but # we'll cross that bridge when we get to it. resourced_routes.uniq! scope engine_name.downcase do resourced_routes.each do |resource| namespace!(resource.to_s.split('/')) end end end # Finalize the routes ::Rails.application.routes.finalize! ::Rails.application.routes.disable_clear_and_finalize = false end |