This repository has been archived by the owner on Oct 5, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 102
/
inject_engine_routes_into_application.rb
74 lines (66 loc) · 3.11 KB
/
inject_engine_routes_into_application.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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
# see http://www.builtfromsource.com/2011/09/21/testing-routes-with-rails-3-1-engines/
module Devise
module Oauth2Providable
module EngineHacks
##
# 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.
#
# @param [Symbol] engine_symbol Optional; if provided, uses this symbol to
# locate the engine class by name, otherwise uses the module of the calling
# test case as the presumed name of the engine.
#
# @author Jason Hamilton (jhamilton@greatherorift.com)
# @author Matthew Ratzloff (matt@urbaninfluence.com)
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
engine_name = 'oauth2'
engine = Devise::Oauth2Providable::Engine
named_routes = engine.routes.named_routes.routes
resourced_routes = []
# 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
# 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}"
requirements = route.requirements
if path_helper = named_routes[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
verb = (route.verb.blank? ? "GET" : route.verb).downcase.to_sym
send(verb, path, requirements) if respond_to?(verb)
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|
# resources resource
# end
# end
end
# Finalize the routes
::Rails.application.routes.finalize!
::Rails.application.routes.disable_clear_and_finalize = false
end
end
end
end
# Rails::Engine.send(:include, Devise::Oauth2Providable::EngineHacks)