routes_coverage 0.3.3 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Appraisals +5 -0
- data/gemfiles/rails_3.gemfile +11 -0
- data/gemfiles/rails_3.gemfile.lock +117 -0
- data/gemfiles/rails_40.gemfile.lock +1 -1
- data/gemfiles/rails_40_rspec.gemfile.lock +1 -1
- data/gemfiles/rails_40_simplecov.gemfile.lock +1 -1
- data/gemfiles/rails_42.gemfile.lock +1 -1
- data/gemfiles/rails_5.gemfile.lock +1 -1
- data/gemfiles/rails_51.gemfile.lock +1 -1
- data/lib/routes_coverage/formatters/full_text.rb +49 -19
- data/lib/routes_coverage/result.rb +89 -34
- data/lib/routes_coverage/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 899581bd48d52230827553a1a8f94428f7c224cc
|
4
|
+
data.tar.gz: debceb6a0e49ef3d7b313c2733fc20ce3b08d428
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 452ab35f957e94c2122f89cb8c85599da67ea5ee8710c5090fe236d7b50a83d135221d42764fdb00d72309ebf85ea29b3e6047e30e1ef1b02dd4bc7e7ffd46f6
|
7
|
+
data.tar.gz: d0288d1afe2888e8118d09f2758acf8847cab1567b88dad93d59cfd5a84423095f2a6a6af4f4dd2206dbbc33f50d1556b40667611e93c491d3f8313fe5e2c924
|
data/Appraisals
CHANGED
@@ -0,0 +1,117 @@
|
|
1
|
+
PATH
|
2
|
+
remote: ..
|
3
|
+
specs:
|
4
|
+
routes_coverage (0.4.0)
|
5
|
+
|
6
|
+
GEM
|
7
|
+
remote: https://rubygems.org/
|
8
|
+
specs:
|
9
|
+
actionmailer (3.2.22.5)
|
10
|
+
actionpack (= 3.2.22.5)
|
11
|
+
mail (~> 2.5.4)
|
12
|
+
actionpack (3.2.22.5)
|
13
|
+
activemodel (= 3.2.22.5)
|
14
|
+
activesupport (= 3.2.22.5)
|
15
|
+
builder (~> 3.0.0)
|
16
|
+
erubis (~> 2.7.0)
|
17
|
+
journey (~> 1.0.4)
|
18
|
+
rack (~> 1.4.5)
|
19
|
+
rack-cache (~> 1.2)
|
20
|
+
rack-test (~> 0.6.1)
|
21
|
+
sprockets (~> 2.2.1)
|
22
|
+
activemodel (3.2.22.5)
|
23
|
+
activesupport (= 3.2.22.5)
|
24
|
+
builder (~> 3.0.0)
|
25
|
+
activerecord (3.2.22.5)
|
26
|
+
activemodel (= 3.2.22.5)
|
27
|
+
activesupport (= 3.2.22.5)
|
28
|
+
arel (~> 3.0.2)
|
29
|
+
tzinfo (~> 0.3.29)
|
30
|
+
activeresource (3.2.22.5)
|
31
|
+
activemodel (= 3.2.22.5)
|
32
|
+
activesupport (= 3.2.22.5)
|
33
|
+
activesupport (3.2.22.5)
|
34
|
+
i18n (~> 0.6, >= 0.6.4)
|
35
|
+
multi_json (~> 1.0)
|
36
|
+
appraisal (2.2.0)
|
37
|
+
bundler
|
38
|
+
rake
|
39
|
+
thor (>= 0.14.0)
|
40
|
+
arel (3.0.3)
|
41
|
+
builder (3.0.4)
|
42
|
+
docile (1.1.5)
|
43
|
+
erubis (2.7.0)
|
44
|
+
hike (1.2.3)
|
45
|
+
i18n (0.8.4)
|
46
|
+
journey (1.0.4)
|
47
|
+
json (1.8.6)
|
48
|
+
mail (2.5.4)
|
49
|
+
mime-types (~> 1.16)
|
50
|
+
treetop (~> 1.4.8)
|
51
|
+
mime-types (1.25.1)
|
52
|
+
minitest (5.10.2)
|
53
|
+
multi_json (1.12.1)
|
54
|
+
polyglot (0.3.5)
|
55
|
+
power_assert (0.3.1)
|
56
|
+
rack (1.4.7)
|
57
|
+
rack-cache (1.6.1)
|
58
|
+
rack (>= 0.4)
|
59
|
+
rack-ssl (1.3.4)
|
60
|
+
rack
|
61
|
+
rack-test (0.6.3)
|
62
|
+
rack (>= 1.0)
|
63
|
+
rails (3.2.22.5)
|
64
|
+
actionmailer (= 3.2.22.5)
|
65
|
+
actionpack (= 3.2.22.5)
|
66
|
+
activerecord (= 3.2.22.5)
|
67
|
+
activeresource (= 3.2.22.5)
|
68
|
+
activesupport (= 3.2.22.5)
|
69
|
+
bundler (~> 1.0)
|
70
|
+
railties (= 3.2.22.5)
|
71
|
+
railties (3.2.22.5)
|
72
|
+
actionpack (= 3.2.22.5)
|
73
|
+
activesupport (= 3.2.22.5)
|
74
|
+
rack-ssl (~> 1.3.2)
|
75
|
+
rake (>= 0.8.7)
|
76
|
+
rdoc (~> 3.4)
|
77
|
+
thor (>= 0.14.6, < 2.0)
|
78
|
+
rake (10.5.0)
|
79
|
+
rdoc (3.12.2)
|
80
|
+
json (~> 1.4)
|
81
|
+
sass (3.4.24)
|
82
|
+
simplecov (0.14.1)
|
83
|
+
docile (~> 1.1.0)
|
84
|
+
json (>= 1.8, < 3)
|
85
|
+
simplecov-html (~> 0.10.0)
|
86
|
+
simplecov-html (0.10.1)
|
87
|
+
sprockets (2.2.3)
|
88
|
+
hike (~> 1.2)
|
89
|
+
multi_json (~> 1.0)
|
90
|
+
rack (~> 1.0)
|
91
|
+
tilt (~> 1.1, != 1.3.0)
|
92
|
+
test-unit (3.2.2)
|
93
|
+
power_assert
|
94
|
+
thor (0.19.4)
|
95
|
+
tilt (1.4.1)
|
96
|
+
treetop (1.4.15)
|
97
|
+
polyglot
|
98
|
+
polyglot (>= 0.3.1)
|
99
|
+
tzinfo (0.3.53)
|
100
|
+
|
101
|
+
PLATFORMS
|
102
|
+
ruby
|
103
|
+
|
104
|
+
DEPENDENCIES
|
105
|
+
appraisal
|
106
|
+
bundler (~> 1.14)
|
107
|
+
minitest
|
108
|
+
rails (~> 3.2.22)
|
109
|
+
rake (~> 10.0)
|
110
|
+
routes_coverage!
|
111
|
+
sass
|
112
|
+
simplecov
|
113
|
+
sprockets
|
114
|
+
test-unit
|
115
|
+
|
116
|
+
BUNDLED WITH
|
117
|
+
1.15.1
|
@@ -2,14 +2,30 @@ module RoutesCoverage
|
|
2
2
|
module Formatters
|
3
3
|
class FullText < SummaryText
|
4
4
|
|
5
|
-
|
6
|
-
|
5
|
+
class RouteFormatter
|
6
|
+
attr_reader :buffer
|
7
7
|
|
8
8
|
def initialize result=nil, _settings=nil, output_hits=false
|
9
|
+
@buffer = []
|
9
10
|
@result = result
|
10
11
|
@output_hits = output_hits
|
11
12
|
@output_prefix = false
|
12
|
-
|
13
|
+
end
|
14
|
+
|
15
|
+
def result
|
16
|
+
@buffer.join("\n")
|
17
|
+
end
|
18
|
+
|
19
|
+
def section_title(title)
|
20
|
+
@buffer << "\n#{title}:"
|
21
|
+
end
|
22
|
+
|
23
|
+
def section(routes)
|
24
|
+
@buffer << draw_section(routes)
|
25
|
+
end
|
26
|
+
|
27
|
+
def header(routes)
|
28
|
+
@buffer << draw_header(routes)
|
13
29
|
end
|
14
30
|
|
15
31
|
def no_routes _routes_from_rails5=nil
|
@@ -27,7 +43,11 @@ module RoutesCoverage
|
|
27
43
|
# puts "route is #{r.inspect}"
|
28
44
|
if @output_hits
|
29
45
|
# hits = " ?"
|
30
|
-
|
46
|
+
if r[:original].respond_to?(:__getobj__)
|
47
|
+
original_route = r[:original].__getobj__ # SimpleDelegator
|
48
|
+
else
|
49
|
+
original_route = r[:original]
|
50
|
+
end
|
31
51
|
hits = " #{@result.route_hit_counts[original_route]}"
|
32
52
|
end
|
33
53
|
"#{r[:name].rjust(name_width) if @output_prefix} #{r[:verb].ljust(verb_width)} #{r[:path].ljust(path_width)} #{r[:reqs].ljust(reqs_width)}#{hits}"
|
@@ -49,24 +69,34 @@ module RoutesCoverage
|
|
49
69
|
end
|
50
70
|
end
|
51
71
|
|
72
|
+
|
73
|
+
def routes_section formatter, title, routes
|
74
|
+
formatter.buffer << title
|
75
|
+
|
76
|
+
if routes.none?
|
77
|
+
formatter.no_routes
|
78
|
+
else
|
79
|
+
formatter.header routes
|
80
|
+
formatter.section routes
|
81
|
+
end
|
82
|
+
|
83
|
+
formatter.result
|
84
|
+
end
|
85
|
+
|
52
86
|
def hit_routes
|
53
87
|
routes = result.hit_routes
|
88
|
+
# engine routes now are in the same list
|
89
|
+
if Result::Inspector::NEW_RAILS
|
90
|
+
hit_routes = Result::Inspector.new(result.hit_routes).collect_all_routes
|
91
|
+
pending_routes = Result::Inspector.new(result.pending_routes).collect_all_routes
|
92
|
+
else
|
93
|
+
#rails 3
|
94
|
+
hit_routes = Result::Inspector.new.collect_all_routes(result.hit_routes)
|
95
|
+
pending_routes = Result::Inspector.new.collect_all_routes(result.pending_routes)
|
96
|
+
end
|
54
97
|
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
[
|
59
|
-
"Covered routes:",
|
60
|
-
# "#{"Verb".ljust(verb_width)} #{"Path".ljust(path_width)} Reqs",
|
61
|
-
# routes.map do |r|
|
62
|
-
# "#{r.verb.ljust(verb_width)} #{r.path.ljust(path_width)} #{r.reqs}"
|
63
|
-
# end
|
64
|
-
#TODO: replace formatter
|
65
|
-
Result::Inspector.new(routes).format(RouteFormatter.new(result, settings, true)),
|
66
|
-
nil,
|
67
|
-
"Pending routes:",
|
68
|
-
Result::Inspector.new(result.pending_routes).format(RouteFormatter.new),
|
69
|
-
].flatten.join("\n")
|
98
|
+
return routes_section(RouteFormatter.new(result, settings, true), "Covered routes:", hit_routes) + "\n\n" +
|
99
|
+
routes_section(RouteFormatter.new(result, settings), "Pending routes:", pending_routes)
|
70
100
|
end
|
71
101
|
|
72
102
|
def format
|
@@ -1,8 +1,91 @@
|
|
1
1
|
require 'active_support/core_ext/string' # needed for rails5 version of inspector
|
2
|
-
require 'action_dispatch/routing/inspector'
|
3
2
|
|
4
3
|
module RoutesCoverage
|
5
4
|
class Result
|
5
|
+
|
6
|
+
begin
|
7
|
+
require 'action_dispatch/routing/inspector'
|
8
|
+
class Inspector < ActionDispatch::Routing::RoutesInspector
|
9
|
+
NEW_RAILS = true
|
10
|
+
def collect_all_routes
|
11
|
+
res = collect_routes(@routes)
|
12
|
+
#TODO: test with engines
|
13
|
+
@engines.each do |engine_name, engine_routes|
|
14
|
+
res += engine_routes.map{|er|
|
15
|
+
er.merge({ engine_name: engine_name })
|
16
|
+
}
|
17
|
+
end
|
18
|
+
res
|
19
|
+
end
|
20
|
+
|
21
|
+
def collect_routes(routes)
|
22
|
+
routes.collect do |route|
|
23
|
+
ActionDispatch::Routing::RouteWrapper.new(route)
|
24
|
+
end.reject do |route|
|
25
|
+
route.internal?
|
26
|
+
end.collect do |route|
|
27
|
+
collect_engine_routes(route)
|
28
|
+
|
29
|
+
{ name: route.name,
|
30
|
+
verb: route.verb,
|
31
|
+
path: route.path,
|
32
|
+
reqs: route.reqs,
|
33
|
+
# regexp: route.json_regexp, # removed, this is not present in rails5
|
34
|
+
# added:
|
35
|
+
original: route,
|
36
|
+
}
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
rescue LoadError
|
42
|
+
#rails 3
|
43
|
+
require 'rails/application/route_inspector'
|
44
|
+
class Inspector < Rails::Application::RouteInspector
|
45
|
+
NEW_RAILS = false
|
46
|
+
def collect_all_routes(routes)
|
47
|
+
res = collect_routes(routes)
|
48
|
+
@engines.each do |engine_name, engine_routes|
|
49
|
+
res += engine_routes.map{|er|
|
50
|
+
er.merge({ engine_name: engine_name })
|
51
|
+
}
|
52
|
+
end
|
53
|
+
res
|
54
|
+
end
|
55
|
+
|
56
|
+
def collect_routes(routes)
|
57
|
+
routes = routes.collect do |route|
|
58
|
+
route_reqs = route.requirements
|
59
|
+
|
60
|
+
rack_app = discover_rack_app(route.app)
|
61
|
+
|
62
|
+
controller = route_reqs[:controller] || ':controller'
|
63
|
+
action = route_reqs[:action] || ':action'
|
64
|
+
|
65
|
+
endpoint = rack_app ? rack_app.inspect : "#{controller}##{action}"
|
66
|
+
constraints = route_reqs.except(:controller, :action)
|
67
|
+
|
68
|
+
reqs = endpoint
|
69
|
+
reqs += " #{constraints.inspect}" unless constraints.empty?
|
70
|
+
|
71
|
+
collect_engine_routes(reqs, rack_app)
|
72
|
+
|
73
|
+
{ name: route.name.to_s,
|
74
|
+
verb: route.verb.source.gsub(/[$^]/, ''),
|
75
|
+
path: route.path.spec.to_s,
|
76
|
+
reqs: reqs,
|
77
|
+
# added:
|
78
|
+
original: route,
|
79
|
+
}
|
80
|
+
end
|
81
|
+
|
82
|
+
# Skip the route if it's internal info route
|
83
|
+
routes.reject { |r| r[:path] =~ %r{/rails/info/properties|^#{Rails.application.config.assets.prefix}} }
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
end
|
88
|
+
|
6
89
|
def initialize all_routes, hit_routes, settings
|
7
90
|
@all_routes = all_routes
|
8
91
|
@route_hit_counts = hit_routes
|
@@ -75,44 +158,16 @@ module RoutesCoverage
|
|
75
158
|
end
|
76
159
|
|
77
160
|
def all_routes_with_hits
|
78
|
-
|
161
|
+
if Inspector::NEW_RAILS
|
162
|
+
res = Inspector.new(all_routes).collect_all_routes
|
163
|
+
else
|
164
|
+
res = Inspector.new.collect_all_routes(all_routes)
|
165
|
+
end
|
79
166
|
res.each{|val|
|
80
167
|
val[:hits] = @route_hit_counts[val[:original]] || 0
|
81
168
|
}
|
82
169
|
res
|
83
170
|
end
|
84
171
|
|
85
|
-
class Inspector < ActionDispatch::Routing::RoutesInspector
|
86
|
-
def collect_all_routes
|
87
|
-
res = collect_routes(@routes)
|
88
|
-
#TODO: test with engines
|
89
|
-
@engines.each do |engine_name, engine_routes|
|
90
|
-
res += engine_routes.map{|er|
|
91
|
-
er.merge({ engine_name: engine_name })
|
92
|
-
}
|
93
|
-
end
|
94
|
-
res
|
95
|
-
end
|
96
|
-
|
97
|
-
def collect_routes(routes)
|
98
|
-
routes.collect do |route|
|
99
|
-
ActionDispatch::Routing::RouteWrapper.new(route)
|
100
|
-
end.reject do |route|
|
101
|
-
route.internal?
|
102
|
-
end.collect do |route|
|
103
|
-
collect_engine_routes(route)
|
104
|
-
|
105
|
-
{ name: route.name,
|
106
|
-
verb: route.verb,
|
107
|
-
path: route.path,
|
108
|
-
reqs: route.reqs,
|
109
|
-
# regexp: route.json_regexp, # removed, this is not present in rails5
|
110
|
-
# added:
|
111
|
-
original: route,
|
112
|
-
}
|
113
|
-
end
|
114
|
-
end
|
115
|
-
end
|
116
|
-
|
117
172
|
end
|
118
173
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: routes_coverage
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vasily Fedoseyev
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-06-
|
11
|
+
date: 2017-06-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -87,6 +87,8 @@ files:
|
|
87
87
|
- compiled_assets/routes.css
|
88
88
|
- compiled_assets/routes.js
|
89
89
|
- gemfiles/.bundle/config
|
90
|
+
- gemfiles/rails_3.gemfile
|
91
|
+
- gemfiles/rails_3.gemfile.lock
|
90
92
|
- gemfiles/rails_40.gemfile
|
91
93
|
- gemfiles/rails_40.gemfile.lock
|
92
94
|
- gemfiles/rails_40_rspec.gemfile
|