rails-route-checker 0.2.1 → 0.2.6
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 +5 -5
- data/Gemfile +2 -0
- data/exe/rails-route-checker +2 -1
- data/lib/rails-route-checker.rb +2 -0
- data/lib/rails-route-checker/app_interface.rb +40 -14
- data/lib/rails-route-checker/config_file.rb +2 -0
- data/lib/rails-route-checker/loaded_app.rb +17 -5
- data/lib/rails-route-checker/parsers/erb_parser.rb +25 -17
- data/lib/rails-route-checker/parsers/haml_parser.rb +2 -0
- data/lib/rails-route-checker/parsers/haml_parser/document.rb +6 -5
- data/lib/rails-route-checker/parsers/haml_parser/ruby_extractor.rb +3 -0
- data/lib/rails-route-checker/parsers/haml_parser/tree/filter_node.rb +2 -0
- data/lib/rails-route-checker/parsers/haml_parser/tree/node.rb +3 -1
- data/lib/rails-route-checker/parsers/haml_parser/tree/root_node.rb +2 -0
- data/lib/rails-route-checker/parsers/haml_parser/tree/script_node.rb +2 -0
- data/lib/rails-route-checker/parsers/haml_parser/tree/silent_script_node.rb +2 -0
- data/lib/rails-route-checker/parsers/haml_parser/tree/tag_node.rb +3 -1
- data/lib/rails-route-checker/parsers/loader.rb +4 -0
- data/lib/rails-route-checker/parsers/ruby_parser.rb +42 -26
- data/lib/rails-route-checker/runner.rb +4 -2
- data/lib/rails-route-checker/version.rb +3 -1
- data/rails-route-checker.gemspec +5 -4
- metadata +9 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 91a3036bc852166e6e8d63efc1f3d319932bba5f3bbd361c5dbb08994e7878ad
|
4
|
+
data.tar.gz: 77345a3517d9812ad4a9d8357ed3cc170c129a0a1641925e5fda4fb9dda65ec5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '019c96a2f0cd7b618f5356f11a11f6eabce34cbc0735d91d500b31e8082a0749f5047fdb6f4e1394025b4a19d993a48e5e7f9846f51de10319ec428f88f54791'
|
7
|
+
data.tar.gz: bdd94456a37c71846c2d878238e226097273728c69ac74b198533d9fa232e5893badd844209b34940b28a0b7a4dc4586a437db78fc48ab36f341f2f49f2934bd
|
data/Gemfile
CHANGED
data/exe/rails-route-checker
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
2
3
|
|
3
4
|
require 'rails-route-checker'
|
4
5
|
require 'optparse'
|
@@ -24,6 +25,6 @@ end.parse!
|
|
24
25
|
|
25
26
|
options[:config_file] = '.rails-route-checker.yml' if File.exist?('.rails-route-checker.yml') && !options[:config_file]
|
26
27
|
|
27
|
-
rrc = RailsRouteChecker::Runner.new(options)
|
28
|
+
rrc = RailsRouteChecker::Runner.new(**options)
|
28
29
|
puts rrc.output
|
29
30
|
exit rrc.issues? ? 1 : 0
|
data/lib/rails-route-checker.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module RailsRouteChecker
|
2
4
|
class AppInterface
|
3
5
|
def initialize(**opts)
|
@@ -10,7 +12,7 @@ module RailsRouteChecker
|
|
10
12
|
action = r.requirements[:action]
|
11
13
|
|
12
14
|
next if options[:ignored_controllers].include?(controller)
|
13
|
-
next if
|
15
|
+
next if controller_has_action?(controller, action)
|
14
16
|
|
15
17
|
{
|
16
18
|
controller: controller,
|
@@ -37,22 +39,34 @@ module RailsRouteChecker
|
|
37
39
|
end
|
38
40
|
end
|
39
41
|
|
42
|
+
def controller_has_action?(controller, action)
|
43
|
+
return false unless controller_information.key?(controller)
|
44
|
+
|
45
|
+
info = controller_information[controller]
|
46
|
+
return true if info[:actions].include?(action)
|
47
|
+
return true if info[:lookup_context]&.template_exists?("#{controller}/#{action}")
|
48
|
+
|
49
|
+
false
|
50
|
+
end
|
51
|
+
|
40
52
|
def generate_undef_view_path_calls
|
41
53
|
generate_undef_view_path_calls_erb + generate_undef_view_path_calls_haml
|
42
54
|
end
|
43
55
|
|
44
56
|
def generate_undef_view_path_calls_erb
|
45
|
-
files =
|
57
|
+
files = Dir['app/**/*.erb']
|
46
58
|
return [] if files.none?
|
47
59
|
|
48
60
|
RailsRouteChecker::Parsers::Loader.load_parser(:erb)
|
49
61
|
|
50
62
|
files.map do |filename|
|
51
63
|
controller = controller_from_view_file(filename)
|
64
|
+
next unless controller # controller will be nil if it's an ignored controller
|
52
65
|
|
53
66
|
filter = lambda do |path_or_url|
|
54
67
|
return false if match_in_whitelist?(filename, path_or_url)
|
55
68
|
return false if match_defined_in_view?(controller, path_or_url)
|
69
|
+
|
56
70
|
true
|
57
71
|
end
|
58
72
|
|
@@ -61,7 +75,7 @@ module RailsRouteChecker
|
|
61
75
|
end
|
62
76
|
|
63
77
|
def generate_undef_view_path_calls_haml
|
64
|
-
files =
|
78
|
+
files = Dir['app/**/*.haml']
|
65
79
|
return [] if files.none?
|
66
80
|
|
67
81
|
unless RailsRouteChecker::Parsers::Loader.haml_available?
|
@@ -74,10 +88,12 @@ module RailsRouteChecker
|
|
74
88
|
|
75
89
|
files.map do |filename|
|
76
90
|
controller = controller_from_view_file(filename)
|
91
|
+
next unless controller # controller will be nil if it's an ignored controller
|
77
92
|
|
78
93
|
filter = lambda do |path_or_url|
|
79
94
|
return false if match_in_whitelist?(filename, path_or_url)
|
80
95
|
return false if match_defined_in_view?(controller, path_or_url)
|
96
|
+
|
81
97
|
true
|
82
98
|
end
|
83
99
|
|
@@ -86,7 +102,7 @@ module RailsRouteChecker
|
|
86
102
|
end
|
87
103
|
|
88
104
|
def generate_undef_controller_path_calls
|
89
|
-
files =
|
105
|
+
files = Dir['app/controllers/**/*.rb']
|
90
106
|
return [] if files.none?
|
91
107
|
|
92
108
|
RailsRouteChecker::Parsers::Loader.load_parser(:ruby)
|
@@ -98,6 +114,7 @@ module RailsRouteChecker
|
|
98
114
|
filter = lambda do |path_or_url|
|
99
115
|
return false if match_in_whitelist?(filename, path_or_url)
|
100
116
|
return false if match_defined_in_ruby?(controller, path_or_url)
|
117
|
+
|
101
118
|
return true
|
102
119
|
end
|
103
120
|
|
@@ -108,18 +125,21 @@ module RailsRouteChecker
|
|
108
125
|
def match_in_whitelist?(filename, path_or_url)
|
109
126
|
possible_route_name = path_or_url.sub(/_(?:url|path)$/, '')
|
110
127
|
return true if options[:ignored_paths].include?(possible_route_name)
|
128
|
+
|
111
129
|
(options[:ignored_path_whitelist][filename] || []).include?(path_or_url)
|
112
130
|
end
|
113
131
|
|
114
132
|
def match_defined_in_view?(controller, path_or_url)
|
115
133
|
possible_route_name = path_or_url.sub(/_(?:url|path)$/, '')
|
116
134
|
return true if loaded_app.all_route_names.include?(possible_route_name)
|
135
|
+
|
117
136
|
controller && controller[:helpers].include?(path_or_url)
|
118
137
|
end
|
119
138
|
|
120
139
|
def match_defined_in_ruby?(controller, path_or_url)
|
121
140
|
possible_route_name = path_or_url.sub(/_(?:url|path)$/, '')
|
122
141
|
return true if loaded_app.all_route_names.include?(possible_route_name)
|
142
|
+
|
123
143
|
controller && controller[:instance_methods].include?(path_or_url)
|
124
144
|
end
|
125
145
|
|
@@ -127,20 +147,26 @@ module RailsRouteChecker
|
|
127
147
|
split_path = filename.split('/')
|
128
148
|
possible_controller_path = split_path[(split_path.index('app') + 2)..-2]
|
129
149
|
|
130
|
-
|
131
|
-
|
132
|
-
if
|
133
|
-
|
134
|
-
|
135
|
-
possible_controller_path = possible_controller_path[0..-2]
|
136
|
-
end
|
150
|
+
while possible_controller_path.any?
|
151
|
+
controller_name = possible_controller_path.join('/')
|
152
|
+
return controller_information[controller_name] if controller_exists?(controller_name)
|
153
|
+
|
154
|
+
possible_controller_path = possible_controller_path[0..-2]
|
137
155
|
end
|
138
|
-
|
156
|
+
controller_information['application']
|
139
157
|
end
|
140
158
|
|
141
159
|
def controller_from_ruby_file(filename)
|
142
|
-
controller_name = (filename.match(%r{app/controllers/(.*)_controller.rb}) || [])[1]
|
143
|
-
controller_information[controller_name]
|
160
|
+
controller_name = (filename.match(%r{app/controllers/(.*)_controller.rb}) || [])[1]
|
161
|
+
return controller_information[controller_name] if controller_exists?(controller_name)
|
162
|
+
|
163
|
+
controller_information['application']
|
164
|
+
end
|
165
|
+
|
166
|
+
def controller_exists?(controller_name)
|
167
|
+
return false unless controller_name
|
168
|
+
|
169
|
+
File.exist?("app/controllers/#{controller_name}_controller.rb")
|
144
170
|
end
|
145
171
|
end
|
146
172
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module RailsRouteChecker
|
2
4
|
class LoadedApp
|
3
5
|
def initialize
|
@@ -40,14 +42,13 @@ module RailsRouteChecker
|
|
40
42
|
@controller_information ||= ActionController::Base.descendants.map do |controller|
|
41
43
|
next if controller.controller_path.start_with?('rails/')
|
42
44
|
|
43
|
-
instance_methods = (controller.instance_methods.map(&:to_s) + controller.private_instance_methods.map(&:to_s))
|
44
|
-
|
45
45
|
[
|
46
46
|
controller.controller_path,
|
47
47
|
{
|
48
48
|
helpers: controller.helpers.methods.map(&:to_s),
|
49
49
|
actions: controller.action_methods.to_a,
|
50
|
-
instance_methods: instance_methods
|
50
|
+
instance_methods: instance_methods(controller),
|
51
|
+
lookup_context: lookup_context(controller)
|
51
52
|
}
|
52
53
|
]
|
53
54
|
end.compact.to_h
|
@@ -57,6 +58,16 @@ module RailsRouteChecker
|
|
57
58
|
|
58
59
|
attr_reader :app
|
59
60
|
|
61
|
+
def lookup_context(controller)
|
62
|
+
return nil unless controller.instance_methods.include?(:default_render)
|
63
|
+
|
64
|
+
ActionView::LookupContext.new(controller._view_paths, {}, controller._prefixes)
|
65
|
+
end
|
66
|
+
|
67
|
+
def instance_methods(controller)
|
68
|
+
(controller.instance_methods.map(&:to_s) + controller.private_instance_methods.map(&:to_s)).compact.uniq
|
69
|
+
end
|
70
|
+
|
60
71
|
def suppress_output
|
61
72
|
begin
|
62
73
|
original_stderr = $stderr.clone
|
@@ -76,7 +87,7 @@ module RailsRouteChecker
|
|
76
87
|
end
|
77
88
|
|
78
89
|
def attempt_to_load_default_controllers
|
79
|
-
# rubocop:disable Lint/
|
90
|
+
# rubocop:disable Lint/SuppressedException
|
80
91
|
begin
|
81
92
|
::Rails::InfoController
|
82
93
|
rescue NameError # ignored
|
@@ -89,7 +100,7 @@ module RailsRouteChecker
|
|
89
100
|
::Rails::MailersController
|
90
101
|
rescue NameError # ignored
|
91
102
|
end
|
92
|
-
# rubocop:enable Lint/
|
103
|
+
# rubocop:enable Lint/SuppressedException
|
93
104
|
end
|
94
105
|
|
95
106
|
def reject_route?(route)
|
@@ -102,6 +113,7 @@ module RailsRouteChecker
|
|
102
113
|
action = route.requirements[:action]
|
103
114
|
return true unless controller && action
|
104
115
|
return true if controller.start_with?('rails/')
|
116
|
+
|
105
117
|
false
|
106
118
|
end
|
107
119
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module RailsRouteChecker
|
2
4
|
module Parsers
|
3
5
|
module ErbParser
|
@@ -5,23 +7,7 @@ module RailsRouteChecker
|
|
5
7
|
def run(filename, **opts)
|
6
8
|
file_source = opts[:source] || File.read(filename)
|
7
9
|
|
8
|
-
|
9
|
-
ruby_source = ''
|
10
|
-
source_map = {}
|
11
|
-
|
12
|
-
file_source.split("\n").each_with_index do |line, line_num|
|
13
|
-
ruby_lines = process_line(line)
|
14
|
-
next unless ruby_lines.any?
|
15
|
-
|
16
|
-
ruby_source += ruby_lines.join("\n") + "\n"
|
17
|
-
ruby_lines.length.times do |i|
|
18
|
-
source_map[next_ruby_source_line_num + i] = line_num + 1
|
19
|
-
end
|
20
|
-
next_ruby_source_line_num += ruby_lines.length
|
21
|
-
end
|
22
|
-
|
23
|
-
opts[:source] = ruby_source
|
24
|
-
opts[:source_map] = source_map
|
10
|
+
opts.merge!(process_file(file_source))
|
25
11
|
|
26
12
|
RailsRouteChecker::Parsers::RubyParser.run(filename, **opts)
|
27
13
|
end
|
@@ -46,6 +32,28 @@ module RailsRouteChecker
|
|
46
32
|
end
|
47
33
|
ruby_lines
|
48
34
|
end
|
35
|
+
|
36
|
+
def process_file(source)
|
37
|
+
next_ruby_source_line_num = 1
|
38
|
+
ruby_source = ''
|
39
|
+
source_map = {}
|
40
|
+
|
41
|
+
source.split("\n").each_with_index do |line, line_num|
|
42
|
+
ruby_lines = process_line(line)
|
43
|
+
next unless ruby_lines.any?
|
44
|
+
|
45
|
+
ruby_source += ruby_lines.join("\n") + "\n"
|
46
|
+
ruby_lines.length.times do |i|
|
47
|
+
source_map[next_ruby_source_line_num + i] = line_num + 1
|
48
|
+
end
|
49
|
+
next_ruby_source_line_num += ruby_lines.length
|
50
|
+
end
|
51
|
+
|
52
|
+
{
|
53
|
+
source: ruby_source,
|
54
|
+
source_map: source_map
|
55
|
+
}
|
56
|
+
end
|
49
57
|
end
|
50
58
|
end
|
51
59
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module RailsRouteChecker
|
2
4
|
module Parsers
|
3
5
|
module HamlParser
|
@@ -9,9 +11,10 @@ module RailsRouteChecker
|
|
9
11
|
@source_lines = @source.split(/\r\n|\r|\n/)
|
10
12
|
|
11
13
|
version = Gem::Version.new(Haml::VERSION).approximate_recommendation
|
14
|
+
options = Haml::Options.new
|
12
15
|
original_tree = case version
|
13
|
-
when '~> 4.0', '~> 4.1' then Haml::Parser.new(@source,
|
14
|
-
when '~> 5.0' then Haml::Parser.new(options).call(@source)
|
16
|
+
when '~> 4.0', '~> 4.1' then Haml::Parser.new(@source, options).parse
|
17
|
+
when '~> 5.0', '~> 5.1' then Haml::Parser.new(options).call(@source)
|
15
18
|
else raise "Cannot handle Haml version: #{version}"
|
16
19
|
end
|
17
20
|
|
@@ -21,9 +24,7 @@ module RailsRouteChecker
|
|
21
24
|
private
|
22
25
|
|
23
26
|
def process_tree(original_tree)
|
24
|
-
if Gem::Requirement.new('~> 4.0.0').satisfied_by?(Gem.loaded_specs['haml'].version)
|
25
|
-
original_tree.children.pop
|
26
|
-
end
|
27
|
+
original_tree.children.pop if Gem::Requirement.new('~> 4.0.0').satisfied_by?(Gem.loaded_specs['haml'].version)
|
27
28
|
|
28
29
|
convert_tree(original_tree)
|
29
30
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module RailsRouteChecker
|
2
4
|
module Parsers
|
3
5
|
module HamlParser
|
@@ -68,7 +70,7 @@ module RailsRouteChecker
|
|
68
70
|
next_sibling = siblings.next(self)
|
69
71
|
return next_sibling if next_sibling
|
70
72
|
|
71
|
-
parent
|
73
|
+
parent&.successor
|
72
74
|
end
|
73
75
|
|
74
76
|
def next_node
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module RailsRouteChecker
|
2
4
|
module Parsers
|
3
5
|
module HamlParser
|
@@ -18,7 +20,7 @@ module RailsRouteChecker
|
|
18
20
|
end
|
19
21
|
|
20
22
|
def attributes_source
|
21
|
-
@attr_source ||=
|
23
|
+
@attr_source ||= # rubocop:disable Naming/MemoizedInstanceVariableName
|
22
24
|
begin
|
23
25
|
_explicit_tag, static_attrs, rest =
|
24
26
|
source_code.scan(/\A\s*(%[-:\w]+)?([-:\w\.\#]*)(.*)/m)[0]
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module RailsRouteChecker
|
2
4
|
module Parsers
|
3
5
|
module Loader
|
@@ -21,6 +23,7 @@ module RailsRouteChecker
|
|
21
23
|
|
22
24
|
def haml_available?
|
23
25
|
return @haml_available if defined?(@haml_available)
|
26
|
+
|
24
27
|
@haml_available = gem_installed?('haml')
|
25
28
|
end
|
26
29
|
|
@@ -46,6 +49,7 @@ module RailsRouteChecker
|
|
46
49
|
def if_unloaded(parser)
|
47
50
|
@loaded_parsers ||= {}
|
48
51
|
return false if @loaded_parsers[parser]
|
52
|
+
|
49
53
|
yield
|
50
54
|
@loaded_parsers[parser] = true
|
51
55
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'ripper'
|
2
4
|
|
3
5
|
module RailsRouteChecker
|
@@ -6,15 +8,16 @@ module RailsRouteChecker
|
|
6
8
|
class << self
|
7
9
|
def run(filename, **opts)
|
8
10
|
file_source = opts[:source] || File.read(filename)
|
11
|
+
process_file(filename, file_source, opts)
|
12
|
+
end
|
9
13
|
|
10
|
-
|
14
|
+
private
|
11
15
|
|
12
|
-
|
13
|
-
|
14
|
-
next unless %i[vcall fcall].include?(scope[-2])
|
15
|
-
next unless scope[-1] == :@ident
|
16
|
-
next unless item.end_with?('_path', '_url')
|
16
|
+
def process_file(filename, source, opts)
|
17
|
+
items = []
|
17
18
|
|
19
|
+
deep_iterator(Ripper.sexp(source)) do |item, extra_data|
|
20
|
+
next unless item_is_url_call?(item, extra_data)
|
18
21
|
next if opts[:filter].respond_to?(:call) && !opts[:filter].call(item)
|
19
22
|
|
20
23
|
line = extra_data[:position][0]
|
@@ -26,30 +29,43 @@ module RailsRouteChecker
|
|
26
29
|
items
|
27
30
|
end
|
28
31
|
|
29
|
-
|
32
|
+
def item_is_url_call?(item, extra_data)
|
33
|
+
scope = extra_data[:scope]
|
34
|
+
return false unless %i[vcall fcall].include?(scope[-2])
|
35
|
+
return false unless scope[-1] == :@ident
|
36
|
+
return false unless item.end_with?('_path', '_url')
|
37
|
+
|
38
|
+
true
|
39
|
+
end
|
30
40
|
|
31
41
|
def deep_iterator(list, current_scope = [], current_line_num = [], &block)
|
32
|
-
if list.is_a?(Array)
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
list[1..-1].each do |item|
|
42
|
-
deep_iterator(item, current_scope, current_line_num, &block)
|
43
|
-
end
|
44
|
-
current_scope.pop
|
45
|
-
else
|
46
|
-
list.each do |item|
|
47
|
-
deep_iterator(item, current_scope, current_line_num, &block)
|
48
|
-
end
|
42
|
+
return deep_iterate_array(list, current_scope, current_line_num, &block) if list.is_a?(Array)
|
43
|
+
|
44
|
+
yield(list, { scope: current_scope, position: current_line_num }) unless list.nil?
|
45
|
+
end
|
46
|
+
|
47
|
+
def deep_iterate_array(list, current_scope, current_line_num, &block)
|
48
|
+
unless list[0].is_a?(Symbol)
|
49
|
+
list.each do |item|
|
50
|
+
deep_iterator(item, current_scope, current_line_num, &block)
|
49
51
|
end
|
50
|
-
|
51
|
-
|
52
|
+
return
|
53
|
+
end
|
54
|
+
|
55
|
+
current_scope << list[0]
|
56
|
+
|
57
|
+
last_list_item = list[-1]
|
58
|
+
if last_list_item.is_a?(Array) &&
|
59
|
+
last_list_item.length == 2 &&
|
60
|
+
last_list_item.all? { |item| item.is_a?(Integer) }
|
61
|
+
current_line_num = last_list_item
|
62
|
+
list = list[0..-2]
|
63
|
+
end
|
64
|
+
|
65
|
+
list[1..-1].each do |item|
|
66
|
+
deep_iterator(item, current_scope, current_line_num, &block)
|
52
67
|
end
|
68
|
+
current_scope.pop
|
53
69
|
end
|
54
70
|
end
|
55
71
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module RailsRouteChecker
|
2
4
|
class Runner
|
3
5
|
def initialize(**opts)
|
@@ -14,7 +16,7 @@ module RailsRouteChecker
|
|
14
16
|
end
|
15
17
|
|
16
18
|
def issues?
|
17
|
-
issues.values.flatten(1).count
|
19
|
+
issues.values.flatten(1).count.positive?
|
18
20
|
end
|
19
21
|
|
20
22
|
def output
|
@@ -31,7 +33,7 @@ module RailsRouteChecker
|
|
31
33
|
private
|
32
34
|
|
33
35
|
def app_interface
|
34
|
-
@app_interface ||= RailsRouteChecker::AppInterface.new(
|
36
|
+
@app_interface ||= RailsRouteChecker::AppInterface.new(**@options)
|
35
37
|
end
|
36
38
|
|
37
39
|
def missing_actions_output
|
data/rails-route-checker.gemspec
CHANGED
@@ -1,5 +1,6 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
|
2
|
-
lib = File.expand_path('
|
3
|
+
lib = File.expand_path('lib', __dir__)
|
3
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
5
|
require 'rails-route-checker/version'
|
5
6
|
|
@@ -22,7 +23,7 @@ Gem::Specification.new do |spec|
|
|
22
23
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
23
24
|
spec.require_paths = ['lib']
|
24
25
|
|
25
|
-
spec.add_development_dependency 'bundler', '~> 1
|
26
|
-
spec.add_development_dependency 'rake', '~>
|
27
|
-
spec.add_development_dependency 'rubocop', '~> 0.
|
26
|
+
spec.add_development_dependency 'bundler', '~> 2.1'
|
27
|
+
spec.add_development_dependency 'rake', '~> 13.0'
|
28
|
+
spec.add_development_dependency 'rubocop', '~> 0.86'
|
28
29
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails-route-checker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dave Allie
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-07-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -16,42 +16,42 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '1
|
19
|
+
version: '2.1'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '1
|
26
|
+
version: '2.1'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '13.0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '13.0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rubocop
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '0.
|
47
|
+
version: '0.86'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '0.
|
54
|
+
version: '0.86'
|
55
55
|
description: A linting tool that helps you find any routes defined in your routes.rb
|
56
56
|
file that don't have a corresponding controller action, and find any _path or _url
|
57
57
|
calls that don't have a corresponding route in the routes.rb file.
|
@@ -102,8 +102,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
102
102
|
- !ruby/object:Gem::Version
|
103
103
|
version: '0'
|
104
104
|
requirements: []
|
105
|
-
|
106
|
-
rubygems_version: 2.6.12
|
105
|
+
rubygems_version: 3.1.2
|
107
106
|
signing_key:
|
108
107
|
specification_version: 4
|
109
108
|
summary: A linting tool for your Rails routes
|