mistiq 0.0.89 → 0.0.91
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +8 -8
- data/lib/mistiq/defaults.rb +1 -1
- data/lib/mistiq/init.rb +151 -42
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
ZmFhOTQ3NDUyZjBlYzBjMzBlMjNlZjNmOGUxYWUwMTA0ZGVlNTJiNQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
NDI0NjAyYTEyZjA1YjA3NGFiMGI1N2NmYWNkMTFlNDI4YjQzMDY0NQ==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
ZDc3ZWU0ZDQyZTkyMDdmNzFmZjk5NzM1YTgzYjI5MmVhY2NiYTAyM2E1OWM2
|
10
|
+
Njc5NjE5NDc3ZGE0MGZlZDY1NWYwZmE0OTEwMTlhNDJhNTI1M2UzNzE2ODVl
|
11
|
+
NjRjMWMxNmQ2MGNhOWFlZDY2NGQ4NWFiMTJlYjBhNTc1OGQ3MTM=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
NDVkMjk2MDc4MGY0OTU4YzVjOWQyYjkxZmMwZjJkNWMzZTU5Y2VlMjE3ZjEx
|
14
|
+
OTIxNDVjODcwMTc5Nzc5NzE4MjZiZmNiY2ZiYzZlYTYzNjhlYmJmODAxMmY0
|
15
|
+
N2Y1NzRkZTdiMmQ0ODVlZWJkYjM1NTk0ODEzMWEzNzQ3OWU2ZWQ=
|
data/lib/mistiq/defaults.rb
CHANGED
data/lib/mistiq/init.rb
CHANGED
@@ -5,64 +5,49 @@ module Mistiq
|
|
5
5
|
#to redact links in the views
|
6
6
|
Rails.application.config.after_initialize do
|
7
7
|
@LINK_REGEX_HASH = Hash.new
|
8
|
-
clashes = Hash.new
|
9
8
|
|
10
9
|
#pre-load routes
|
11
10
|
Rails.application.reload_routes!
|
12
11
|
|
13
12
|
#get routes
|
14
13
|
routes = Rails.application.routes.routes
|
14
|
+
inspector = RoutesInspector.new(routes)
|
15
|
+
routes = inspector.get_routes
|
15
16
|
|
16
17
|
routes.each {
|
17
18
|
|r|
|
18
|
-
controller = r.defaults[:controller]
|
19
|
-
action = r.defaults[:action]
|
20
|
-
|
21
|
-
route = r.path.spec.to_s
|
22
19
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
pattern = route
|
28
|
-
end
|
29
|
-
|
30
|
-
#if there are any parameters in
|
31
|
-
#the route use regex to ignore them
|
32
|
-
if pattern.match(/(:.*\/)/)
|
33
|
-
pattern.gsub!(/(:.*\/)/,".*/")
|
34
|
-
end
|
35
|
-
|
36
|
-
#if there is a parameter at the end
|
37
|
-
if pattern.match(/(:.*)/)
|
38
|
-
pattern.gsub!(/(:.*)/,"[^\/\"]*")
|
39
|
-
end
|
20
|
+
reqs = r[:reqs].split('#')
|
21
|
+
|
22
|
+
controller = reqs[0]
|
23
|
+
action = reqs[1]
|
40
24
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
25
|
+
route = r[:path]
|
26
|
+
verb = r[:verb]
|
27
|
+
|
28
|
+
#get regex-ed route
|
29
|
+
regex_len = r[:regexp].length
|
30
|
+
regex = r[:regexp].slice(1..regex_len-2)
|
31
|
+
|
32
|
+
#if action#controller's data method is not GET and not POST
|
33
|
+
if verb != "GET" && verb != "POST" && verb != ""
|
34
|
+
method_regex = "data-method=(\"|')#{verb.downcase}(\"|')";
|
35
|
+
pattern = "<a.*#{method_regex}.*href=(\"|')#{regex}(\"|').*>.*<\/a>"
|
36
|
+
|
37
|
+
#also check if method_regex occurs after the href attribute
|
38
|
+
pattern = pattern+"@@@<a.*href=(\"|')#{regex}(\"|').*#{method_regex}.*>.*<\/a>"
|
39
|
+
elsif verb == "GET"
|
40
|
+
#if action#controller's data method is GET
|
41
|
+
#pattern = "<a(.*href=(\"|')#{pattern}(\"|'))(?!.*data\-method)[^<]*<\/a>"
|
42
|
+
pattern = "<a(?!.*data\-method)(.*href=(\"|')#{regex}(\"|'))[^<]*<\/a>"
|
48
43
|
end
|
49
44
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
#check if the current route clashes with another one
|
54
|
-
if !clashes[route].nil?
|
55
|
-
puts "Route clash at #{controller}##{action} for route #{route} with route for #{clashes[route]}"
|
56
|
-
else
|
57
|
-
#add route to the clashes hash to detect
|
58
|
-
#any future route clashes
|
59
|
-
clashes[route] = "#{controller}##{action}"
|
45
|
+
if verb == "GET" || (verb != "POST" && verb != "")
|
46
|
+
@LINK_REGEX_HASH["#{controller}##{action}"] = pattern
|
60
47
|
end
|
61
|
-
|
62
|
-
@LINK_REGEX_HASH["#{controller}##{action}"] = pattern
|
63
48
|
}
|
64
49
|
|
65
|
-
puts "Link REGEX hash has been computed. #{
|
50
|
+
puts "Link REGEX hash has been computed. #{@LINK_REGEX_HASH.size} routes were hashed."
|
66
51
|
end
|
67
52
|
end
|
68
53
|
|
@@ -70,4 +55,128 @@ module Mistiq
|
|
70
55
|
@LINK_REGEX_HASH
|
71
56
|
end
|
72
57
|
end
|
58
|
+
|
59
|
+
class RouteWrapper < SimpleDelegator
|
60
|
+
def endpoint
|
61
|
+
rack_app ? rack_app.inspect : "#{controller}##{action}"
|
62
|
+
end
|
63
|
+
|
64
|
+
def constraints
|
65
|
+
requirements.except(:controller, :action)
|
66
|
+
end
|
67
|
+
|
68
|
+
def rack_app(app = self.app)
|
69
|
+
@rack_app ||= begin
|
70
|
+
class_name = app.class.name.to_s
|
71
|
+
if class_name == "ActionDispatch::Routing::Mapper::Constraints"
|
72
|
+
rack_app(app.app)
|
73
|
+
elsif ActionDispatch::Routing::Redirect === app || class_name !~ /^ActionDispatch::Routing/
|
74
|
+
app
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def verb
|
80
|
+
super.source.gsub(/[$^]/, '')
|
81
|
+
end
|
82
|
+
|
83
|
+
def path
|
84
|
+
super.spec.to_s
|
85
|
+
end
|
86
|
+
|
87
|
+
def name
|
88
|
+
super.to_s
|
89
|
+
end
|
90
|
+
|
91
|
+
def regexp
|
92
|
+
__getobj__.path.to_regexp
|
93
|
+
end
|
94
|
+
|
95
|
+
def json_regexp
|
96
|
+
str = regexp.inspect.
|
97
|
+
sub('\\A' , '^').
|
98
|
+
sub('\\Z' , '$').
|
99
|
+
sub('\\z' , '$').
|
100
|
+
sub(/^\// , '').
|
101
|
+
sub(/\/[a-z]*$/ , '').
|
102
|
+
gsub(/\(\?#.+\)/ , '').
|
103
|
+
gsub(/\(\?-\w+:/ , '(').
|
104
|
+
gsub(/\s/ , '')
|
105
|
+
Regexp.new(str).source
|
106
|
+
end
|
107
|
+
|
108
|
+
def reqs
|
109
|
+
@reqs ||= begin
|
110
|
+
reqs = endpoint
|
111
|
+
reqs += " #{constraints.to_s}" unless constraints.empty?
|
112
|
+
reqs
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
def controller
|
117
|
+
requirements[:controller] || ':controller'
|
118
|
+
end
|
119
|
+
|
120
|
+
def action
|
121
|
+
requirements[:action] || ':action'
|
122
|
+
end
|
123
|
+
|
124
|
+
def internal?
|
125
|
+
controller.to_s =~ %r{\Arails/(info|welcome)} || path =~ %r{\A#{Rails.application.config.assets.prefix}}
|
126
|
+
end
|
127
|
+
|
128
|
+
def engine?
|
129
|
+
rack_app && rack_app.respond_to?(:routes)
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
class RoutesInspector
|
134
|
+
def initialize(routes)
|
135
|
+
@engines = {}
|
136
|
+
@routes = routes
|
137
|
+
end
|
138
|
+
|
139
|
+
def get_routes
|
140
|
+
routes_to_display = filter_routes(nil)
|
141
|
+
routes = collect_routes(routes_to_display)
|
142
|
+
return routes
|
143
|
+
end
|
144
|
+
|
145
|
+
private
|
146
|
+
|
147
|
+
def filter_routes(filter)
|
148
|
+
if filter
|
149
|
+
@routes.select { |route| route.defaults[:controller] == filter }
|
150
|
+
else
|
151
|
+
@routes
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
def collect_routes(routes)
|
156
|
+
routes.collect do |route|
|
157
|
+
RouteWrapper.new(route)
|
158
|
+
end.reject do |route|
|
159
|
+
route.internal?
|
160
|
+
end.collect do |route|
|
161
|
+
collect_engine_routes(route)
|
162
|
+
|
163
|
+
{ name: route.name,
|
164
|
+
verb: route.verb,
|
165
|
+
path: route.path,
|
166
|
+
reqs: route.reqs,
|
167
|
+
regexp: route.json_regexp }
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
171
|
+
def collect_engine_routes(route)
|
172
|
+
name = route.endpoint
|
173
|
+
return unless route.engine?
|
174
|
+
return if @engines[name]
|
175
|
+
|
176
|
+
routes = route.rack_app.routes
|
177
|
+
if routes.is_a?(ActionDispatch::Routing::RouteSet)
|
178
|
+
@engines[name] = collect_routes(routes.routes)
|
179
|
+
end
|
180
|
+
end
|
181
|
+
end
|
73
182
|
end
|