railroader 4.3.5 → 4.3.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGES.md +16 -0
- data/README.md +15 -0
- data/bin/railroader +1 -1
- data/lib/railroader/call_index.rb +11 -11
- data/lib/railroader/checks/base_check.rb +43 -43
- data/lib/railroader/checks/check_basic_auth.rb +3 -3
- data/lib/railroader/checks/check_content_tag.rb +9 -9
- data/lib/railroader/checks/check_create_with.rb +2 -2
- data/lib/railroader/checks/check_cross_site_scripting.rb +24 -24
- data/lib/railroader/checks/check_default_routes.rb +5 -5
- data/lib/railroader/checks/check_deserialize.rb +1 -1
- data/lib/railroader/checks/check_dynamic_finders.rb +1 -1
- data/lib/railroader/checks/check_escape_function.rb +3 -3
- data/lib/railroader/checks/check_evaluation.rb +4 -4
- data/lib/railroader/checks/check_execute.rb +8 -8
- data/lib/railroader/checks/check_file_access.rb +2 -2
- data/lib/railroader/checks/check_filter_skipping.rb +2 -2
- data/lib/railroader/checks/check_forgery_setting.rb +3 -3
- data/lib/railroader/checks/check_jruby_xml.rb +1 -1
- data/lib/railroader/checks/check_json_parsing.rb +2 -2
- data/lib/railroader/checks/check_link_to.rb +12 -12
- data/lib/railroader/checks/check_link_to_href.rb +9 -9
- data/lib/railroader/checks/check_mail_to.rb +4 -4
- data/lib/railroader/checks/check_mass_assignment.rb +5 -5
- data/lib/railroader/checks/check_model_attributes.rb +6 -6
- data/lib/railroader/checks/check_model_serialize.rb +2 -2
- data/lib/railroader/checks/check_nested_attributes.rb +2 -2
- data/lib/railroader/checks/check_nested_attributes_bypass.rb +1 -1
- data/lib/railroader/checks/check_quote_table_name.rb +3 -3
- data/lib/railroader/checks/check_redirect.rb +19 -19
- data/lib/railroader/checks/check_regex_dos.rb +3 -3
- data/lib/railroader/checks/check_render.rb +4 -4
- data/lib/railroader/checks/check_response_splitting.rb +2 -2
- data/lib/railroader/checks/check_safe_buffer_manipulation.rb +4 -4
- data/lib/railroader/checks/check_sanitize_methods.rb +2 -2
- data/lib/railroader/checks/check_select_tag.rb +4 -4
- data/lib/railroader/checks/check_select_vulnerability.rb +3 -3
- data/lib/railroader/checks/check_send.rb +1 -1
- data/lib/railroader/checks/check_send_file.rb +1 -1
- data/lib/railroader/checks/check_session_settings.rb +10 -10
- data/lib/railroader/checks/check_single_quotes.rb +8 -8
- data/lib/railroader/checks/check_skip_before_filter.rb +5 -5
- data/lib/railroader/checks/check_sql.rb +41 -41
- data/lib/railroader/checks/check_strip_tags.rb +6 -6
- data/lib/railroader/checks/check_symbol_dos_cve.rb +0 -1
- data/lib/railroader/checks/check_translate_bug.rb +4 -4
- data/lib/railroader/checks/check_unsafe_reflection.rb +1 -1
- data/lib/railroader/checks/check_validation_regex.rb +7 -7
- data/lib/railroader/checks/check_weak_hash.rb +1 -1
- data/lib/railroader/checks/check_without_protection.rb +9 -9
- data/lib/railroader/checks/check_yaml_parsing.rb +5 -5
- data/lib/railroader/checks.rb +18 -18
- data/lib/railroader/commandline.rb +1 -1
- data/lib/railroader/differ.rb +2 -2
- data/lib/railroader/options.rb +7 -7
- data/lib/railroader/parsers/rails2_erubis.rb +1 -1
- data/lib/railroader/parsers/rails2_xss_plugin_erubis.rb +4 -4
- data/lib/railroader/parsers/template_parser.rb +1 -1
- data/lib/railroader/processor.rb +17 -17
- data/lib/railroader/processors/alias_processor.rb +72 -72
- data/lib/railroader/processors/base_processor.rb +31 -31
- data/lib/railroader/processors/controller_alias_processor.rb +31 -31
- data/lib/railroader/processors/controller_processor.rb +29 -29
- data/lib/railroader/processors/erb_template_processor.rb +8 -8
- data/lib/railroader/processors/erubis_template_processor.rb +6 -6
- data/lib/railroader/processors/gem_processor.rb +1 -1
- data/lib/railroader/processors/haml_template_processor.rb +14 -14
- data/lib/railroader/processors/lib/call_conversion_helper.rb +1 -1
- data/lib/railroader/processors/lib/find_all_calls.rb +15 -15
- data/lib/railroader/processors/lib/find_call.rb +26 -26
- data/lib/railroader/processors/lib/find_return_value.rb +11 -11
- data/lib/railroader/processors/lib/module_helper.rb +1 -1
- data/lib/railroader/processors/lib/processor_helper.rb +4 -4
- data/lib/railroader/processors/lib/rails2_config_processor.rb +20 -20
- data/lib/railroader/processors/lib/rails2_route_processor.rb +38 -38
- data/lib/railroader/processors/lib/rails3_config_processor.rb +14 -14
- data/lib/railroader/processors/lib/rails3_route_processor.rb +16 -16
- data/lib/railroader/processors/lib/render_helper.rb +32 -32
- data/lib/railroader/processors/lib/route_helper.rb +12 -12
- data/lib/railroader/processors/library_processor.rb +1 -1
- data/lib/railroader/processors/model_processor.rb +9 -9
- data/lib/railroader/processors/output_processor.rb +3 -3
- data/lib/railroader/processors/slim_template_processor.rb +4 -4
- data/lib/railroader/processors/template_alias_processor.rb +10 -10
- data/lib/railroader/processors/template_processor.rb +7 -7
- data/lib/railroader/report/renderer.rb +1 -1
- data/lib/railroader/report/report_base.rb +12 -12
- data/lib/railroader/report/report_csv.rb +2 -2
- data/lib/railroader/report/report_html.rb +5 -5
- data/lib/railroader/report/report_markdown.rb +2 -2
- data/lib/railroader/report/report_table.rb +3 -3
- data/lib/railroader/report/report_tabs.rb +2 -2
- data/lib/railroader/report/report_text.rb +3 -4
- data/lib/railroader/report.rb +3 -3
- data/lib/railroader/rescanner.rb +36 -36
- data/lib/railroader/scanner.rb +23 -23
- data/lib/railroader/tracker/config.rb +3 -3
- data/lib/railroader/tracker/controller.rb +2 -2
- data/lib/railroader/tracker.rb +42 -42
- data/lib/railroader/util.rb +47 -47
- data/lib/railroader/version.rb +1 -1
- data/lib/railroader/warning.rb +9 -10
- data/lib/railroader.rb +32 -32
- data/lib/ruby_parser/bm_sexp.rb +63 -63
- data/lib/ruby_parser/bm_sexp_processor.rb +3 -3
- metadata +4 -4
@@ -8,7 +8,7 @@ class Railroader::Report::HTML < Railroader::Report::Base
|
|
8
8
|
def initialize *args
|
9
9
|
super
|
10
10
|
|
11
|
-
@element_id = 0 #Used for HTML ids
|
11
|
+
@element_id = 0 # Used for HTML ids
|
12
12
|
end
|
13
13
|
|
14
14
|
def generate_report
|
@@ -42,7 +42,7 @@ class Railroader::Report::HTML < Railroader::Report::Base
|
|
42
42
|
Railroader::Report::Renderer.new('overview', :locals => locals).render
|
43
43
|
end
|
44
44
|
|
45
|
-
#Generate listings of templates and their output
|
45
|
+
# Generate listings of templates and their output
|
46
46
|
def generate_templates
|
47
47
|
out_processor = Railroader::OutputProcessor.new
|
48
48
|
template_rows = {}
|
@@ -92,7 +92,7 @@ class Railroader::Report::HTML < Railroader::Report::Base
|
|
92
92
|
warning
|
93
93
|
end
|
94
94
|
|
95
|
-
#Return header for HTML output. Uses CSS from tracker.options[:html_style]
|
95
|
+
# Return header for HTML output. Uses CSS from tracker.options[:html_style]
|
96
96
|
def html_header
|
97
97
|
if File.exist? tracker.options[:html_style]
|
98
98
|
css = File.read tracker.options[:html_style]
|
@@ -111,7 +111,7 @@ class Railroader::Report::HTML < Railroader::Report::Base
|
|
111
111
|
Railroader::Report::Renderer.new('header', :locals => locals).render
|
112
112
|
end
|
113
113
|
|
114
|
-
#Generate HTML for warnings, including context show/hidden via Javascript
|
114
|
+
# Generate HTML for warnings, including context show/hidden via Javascript
|
115
115
|
def with_context warning, message
|
116
116
|
context = context_for(@app_tree, warning)
|
117
117
|
full_message = nil
|
@@ -197,7 +197,7 @@ class Railroader::Report::HTML < Railroader::Report::Base
|
|
197
197
|
output << "</tbody></table></div>"
|
198
198
|
end
|
199
199
|
|
200
|
-
#Escape warning message and highlight user input in HTML output
|
200
|
+
# Escape warning message and highlight user input in HTML output
|
201
201
|
def html_message warning, message
|
202
202
|
message = CGI.escapeHTML(message)
|
203
203
|
|
@@ -34,7 +34,7 @@ class Railroader::Report::Markdown < Railroader::Report::Table
|
|
34
34
|
generate_overview.to_s << "\n\n" <<
|
35
35
|
generate_warning_overview.to_s << "\n\n"
|
36
36
|
|
37
|
-
#Return output early if only summarizing
|
37
|
+
# Return output early if only summarizing
|
38
38
|
return out if tracker.options[:summary_only]
|
39
39
|
|
40
40
|
if tracker.options[:report_routes] or tracker.options[:debug]
|
@@ -98,7 +98,7 @@ class Railroader::Report::Markdown < Railroader::Report::Table
|
|
98
98
|
end
|
99
99
|
if warning.code
|
100
100
|
code = warning.format_code
|
101
|
-
message.gsub(code, "`#{code.gsub('`','``').gsub(/\A``|``\z/, '` `')}`")
|
101
|
+
message.gsub(code, "`#{code.gsub('`', '``').gsub(/\A``|``\z/, '` `')}`")
|
102
102
|
else
|
103
103
|
message
|
104
104
|
end
|
@@ -17,7 +17,7 @@ class Railroader::Report::Table < Railroader::Report::Base
|
|
17
17
|
truncate_table(generate_warning_overview.to_s) << "\n"
|
18
18
|
end
|
19
19
|
|
20
|
-
#Return output early if only summarizing
|
20
|
+
# Return output early if only summarizing
|
21
21
|
if summary_option == :summary_only or summary_option == true
|
22
22
|
return out
|
23
23
|
end
|
@@ -62,7 +62,7 @@ class Railroader::Report::Table < Railroader::Report::Base
|
|
62
62
|
end
|
63
63
|
end
|
64
64
|
|
65
|
-
#Generate listings of templates and their output
|
65
|
+
# Generate listings of templates and their output
|
66
66
|
def generate_templates
|
67
67
|
out_processor = Railroader::OutputProcessor.new
|
68
68
|
template_rows = {}
|
@@ -100,7 +100,7 @@ class Railroader::Report::Table < Railroader::Report::Base
|
|
100
100
|
end
|
101
101
|
end
|
102
102
|
|
103
|
-
#Generate header for text output
|
103
|
+
# Generate header for text output
|
104
104
|
def text_header
|
105
105
|
<<-HEADER
|
106
106
|
|
@@ -1,5 +1,5 @@
|
|
1
|
-
#Generated tab-separated output suitable for the Jenkins Railroader Plugin:
|
2
|
-
#https://github.com/presidentbeef/railroader-jenkins-plugin
|
1
|
+
# Generated tab-separated output suitable for the Jenkins Railroader Plugin:
|
2
|
+
# https://github.com/presidentbeef/railroader-jenkins-plugin
|
3
3
|
class Railroader::Report::Tabs < Railroader::Report::Base
|
4
4
|
def generate_report
|
5
5
|
[[:generic_warnings, "General"], [:controller_warnings, "Controller"],
|
@@ -19,7 +19,7 @@ class Railroader::Report::Text < Railroader::Report::Base
|
|
19
19
|
add_chunk generate_controllers if tracker.options[:debug] or tracker.options[:report_routes]
|
20
20
|
add_chunk generate_templates if tracker.options[:debug]
|
21
21
|
add_chunk generate_obsolete
|
22
|
-
add_chunk generate_errors
|
22
|
+
add_chunk generate_errors
|
23
23
|
add_chunk generate_warnings
|
24
24
|
end
|
25
25
|
|
@@ -35,7 +35,7 @@ class Railroader::Report::Text < Railroader::Report::Base
|
|
35
35
|
|
36
36
|
def generate_header
|
37
37
|
[
|
38
|
-
header("Railroader Report"),
|
38
|
+
header("Railroader Report"),
|
39
39
|
label("Application Path", tracker.app_path),
|
40
40
|
label("Rails Version", rails_version),
|
41
41
|
label("Railroader Version", Railroader::Version),
|
@@ -92,7 +92,7 @@ class Railroader::Report::Text < Railroader::Report::Base
|
|
92
92
|
errors = tracker.errors.map do |e|
|
93
93
|
trace = if full_trace
|
94
94
|
e[:backtrace].join("\n")
|
95
|
-
|
95
|
+
else
|
96
96
|
e[:backtrace][0]
|
97
97
|
end
|
98
98
|
|
@@ -195,4 +195,3 @@ class Railroader::Report::Text < Railroader::Report::Base
|
|
195
195
|
double_space "Controller Overview", controllers
|
196
196
|
end
|
197
197
|
end
|
198
|
-
|
data/lib/railroader/report.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
require 'railroader/report/report_base'
|
2
2
|
|
3
|
-
#Generates a report based on the Tracker and the results of
|
4
|
-
#Tracker#run_checks. Be sure to +run_checks+ before generating
|
5
|
-
#a report.
|
3
|
+
# Generates a report based on the Tracker and the results of
|
4
|
+
# Tracker#run_checks. Be sure to +run_checks+ before generating
|
5
|
+
# a report.
|
6
6
|
class Railroader::Report
|
7
7
|
attr_reader :tracker
|
8
8
|
|
data/lib/railroader/rescanner.rb
CHANGED
@@ -2,25 +2,25 @@ require 'railroader/scanner'
|
|
2
2
|
require 'railroader/util'
|
3
3
|
require 'railroader/differ'
|
4
4
|
|
5
|
-
#Class for rescanning changed files after an initial scan
|
5
|
+
# Class for rescanning changed files after an initial scan
|
6
6
|
class Railroader::Rescanner < Railroader::Scanner
|
7
7
|
include Railroader::Util
|
8
8
|
KNOWN_TEMPLATE_EXTENSIONS = Railroader::TemplateParser::KNOWN_TEMPLATE_EXTENSIONS
|
9
9
|
SCAN_ORDER = [:config, :gemfile, :initializer, :lib, :routes, :template,
|
10
10
|
:model, :controller]
|
11
11
|
|
12
|
-
#Create new Rescanner to scan changed files
|
12
|
+
# Create new Rescanner to scan changed files
|
13
13
|
def initialize options, processor, changed_files
|
14
14
|
super(options, processor)
|
15
15
|
|
16
16
|
@paths = changed_files.map {|f| @app_tree.expand_path(f) }
|
17
|
-
@old_results = tracker.filtered_warnings #Old warnings from previous scan
|
18
|
-
@changes = nil #True if files had to be rescanned
|
17
|
+
@old_results = tracker.filtered_warnings # Old warnings from previous scan
|
18
|
+
@changes = nil # True if files had to be rescanned
|
19
19
|
@reindex = Set.new
|
20
20
|
end
|
21
21
|
|
22
|
-
#Runs checks.
|
23
|
-
#Will rescan files if they have not already been scanned
|
22
|
+
# Runs checks.
|
23
|
+
# Will rescan files if they have not already been scanned
|
24
24
|
def recheck
|
25
25
|
rescan if @changes.nil?
|
26
26
|
|
@@ -29,7 +29,7 @@ class Railroader::Rescanner < Railroader::Scanner
|
|
29
29
|
Railroader::RescanReport.new @old_results, tracker
|
30
30
|
end
|
31
31
|
|
32
|
-
#Rescans changed files
|
32
|
+
# Rescans changed files
|
33
33
|
def rescan
|
34
34
|
tracker.template_cache.clear
|
35
35
|
|
@@ -63,7 +63,7 @@ class Railroader::Rescanner < Railroader::Scanner
|
|
63
63
|
self
|
64
64
|
end
|
65
65
|
|
66
|
-
#Rescans a single file
|
66
|
+
# Rescans a single file
|
67
67
|
def rescan_file path, type = nil
|
68
68
|
type ||= file_type path
|
69
69
|
|
@@ -93,7 +93,7 @@ class Railroader::Rescanner < Railroader::Scanner
|
|
93
93
|
|
94
94
|
process_gems
|
95
95
|
else
|
96
|
-
return false #Nothing to do, file hopefully does not need to be rescanned
|
96
|
+
return false # Nothing to do, file hopefully does not need to be rescanned
|
97
97
|
end
|
98
98
|
|
99
99
|
true
|
@@ -106,8 +106,8 @@ class Railroader::Rescanner < Railroader::Scanner
|
|
106
106
|
process_controller astfile
|
107
107
|
end
|
108
108
|
|
109
|
-
#Process data flow and template rendering
|
110
|
-
#from the controller
|
109
|
+
# Process data flow and template rendering
|
110
|
+
# from the controller
|
111
111
|
tracker.controllers.each do |name, controller|
|
112
112
|
if controller.files.include?(path)
|
113
113
|
tracker.templates.each do |template_name, template|
|
@@ -141,8 +141,8 @@ class Railroader::Rescanner < Railroader::Scanner
|
|
141
141
|
|
142
142
|
rescan = Set.new
|
143
143
|
|
144
|
-
#Search for processed template and process it.
|
145
|
-
#Search for rendered versions of template and re-render (if necessary)
|
144
|
+
# Search for processed template and process it.
|
145
|
+
# Search for rendered versions of template and re-render (if necessary)
|
146
146
|
tracker.templates.each do |_name, template|
|
147
147
|
if template.file == path or template.file.nil?
|
148
148
|
next unless template.render_path and template.name.to_sym == template_name.to_sym
|
@@ -185,7 +185,7 @@ class Railroader::Rescanner < Railroader::Scanner
|
|
185
185
|
process_model astfile.path, astfile.ast
|
186
186
|
end
|
187
187
|
|
188
|
-
#Only need to rescan other things if a model is added or removed
|
188
|
+
# Only need to rescan other things if a model is added or removed
|
189
189
|
if num_models != tracker.models.length
|
190
190
|
process_template_data_flows
|
191
191
|
process_controller_data_flows
|
@@ -231,7 +231,7 @@ class Railroader::Rescanner < Railroader::Scanner
|
|
231
231
|
end
|
232
232
|
end
|
233
233
|
|
234
|
-
#Handle rescanning when a file is deleted
|
234
|
+
# Handle rescanning when a file is deleted
|
235
235
|
def rescan_deleted_file path, type
|
236
236
|
case type
|
237
237
|
when :controller
|
@@ -260,13 +260,13 @@ class Railroader::Rescanner < Railroader::Scanner
|
|
260
260
|
|
261
261
|
template_name = template_path_to_name(path)
|
262
262
|
|
263
|
-
#Remove template
|
263
|
+
# Remove template
|
264
264
|
tracker.reset_template template_name
|
265
265
|
|
266
266
|
rendered_from_controller = /^#{template_name}\.(.+Controller)#(.+)/
|
267
267
|
rendered_from_view = /^#{template_name}\.Template:(.+)/
|
268
268
|
|
269
|
-
#Remove any rendered versions, or partials rendered from it
|
269
|
+
# Remove any rendered versions, or partials rendered from it
|
270
270
|
tracker.templates.delete_if do |_name, template|
|
271
271
|
template.file == path or template.name.to_sym == template_name.to_sym
|
272
272
|
end
|
@@ -289,8 +289,8 @@ class Railroader::Rescanner < Railroader::Scanner
|
|
289
289
|
tracker.initializers.delete Pathname.new(path).basename.to_s
|
290
290
|
end
|
291
291
|
|
292
|
-
#Check controllers, templates, models and libs for data from file
|
293
|
-
#and delete it.
|
292
|
+
# Check controllers, templates, models and libs for data from file
|
293
|
+
# and delete it.
|
294
294
|
def remove_deleted_file path
|
295
295
|
deleted = false
|
296
296
|
|
@@ -313,7 +313,7 @@ class Railroader::Rescanner < Railroader::Scanner
|
|
313
313
|
deleted
|
314
314
|
end
|
315
315
|
|
316
|
-
#Guess at what kind of file the path contains
|
316
|
+
# Guess at what kind of file the path contains
|
317
317
|
def file_type path
|
318
318
|
case path
|
319
319
|
when /\/app\/controllers/
|
@@ -346,7 +346,7 @@ class Railroader::Rescanner < Railroader::Scanner
|
|
346
346
|
|
347
347
|
to_rescan = []
|
348
348
|
|
349
|
-
#Rescan controllers that mixed in library
|
349
|
+
# Rescan controllers that mixed in library
|
350
350
|
tracker.controllers.each do |_name, controller|
|
351
351
|
if controller.includes.include? lib.name
|
352
352
|
controller.files.each do |path|
|
@@ -364,9 +364,9 @@ class Railroader::Rescanner < Railroader::Scanner
|
|
364
364
|
|
365
365
|
to_rescan = []
|
366
366
|
|
367
|
-
#Check if a method from this mixin was used to render a template.
|
368
|
-
#This is not precise, because a different controller might have the
|
369
|
-
#same method...
|
367
|
+
# Check if a method from this mixin was used to render a template.
|
368
|
+
# This is not precise, because a different controller might have the
|
369
|
+
# same method...
|
370
370
|
tracker.templates.each do |name, template|
|
371
371
|
next unless template.render_path
|
372
372
|
|
@@ -395,7 +395,7 @@ class Railroader::Rescanner < Railroader::Scanner
|
|
395
395
|
end
|
396
396
|
end
|
397
397
|
|
398
|
-
#Class to make reporting of rescan results simpler to deal with
|
398
|
+
# Class to make reporting of rescan results simpler to deal with
|
399
399
|
class Railroader::RescanReport
|
400
400
|
include Railroader::Util
|
401
401
|
attr_reader :old_results, :new_results
|
@@ -407,46 +407,46 @@ class Railroader::RescanReport
|
|
407
407
|
@diff = nil
|
408
408
|
end
|
409
409
|
|
410
|
-
#Returns true if any warnings were found (new or old)
|
410
|
+
# Returns true if any warnings were found (new or old)
|
411
411
|
def any_warnings?
|
412
412
|
not all_warnings.empty?
|
413
413
|
end
|
414
414
|
|
415
|
-
#Returns an array of all warnings found
|
415
|
+
# Returns an array of all warnings found
|
416
416
|
def all_warnings
|
417
417
|
@all_warnings ||= @tracker.filtered_warnings
|
418
418
|
end
|
419
419
|
|
420
|
-
#Returns an array of warnings which were in the old report but are not in the
|
421
|
-
#new report after rescanning
|
420
|
+
# Returns an array of warnings which were in the old report but are not in the
|
421
|
+
# new report after rescanning
|
422
422
|
def fixed_warnings
|
423
423
|
diff[:fixed]
|
424
424
|
end
|
425
425
|
|
426
|
-
#Returns an array of warnings which were in the new report but were not in
|
427
|
-
#the old report
|
426
|
+
# Returns an array of warnings which were in the new report but were not in
|
427
|
+
# the old report
|
428
428
|
def new_warnings
|
429
429
|
diff[:new]
|
430
430
|
end
|
431
431
|
|
432
|
-
#Returns true if there are any new or fixed warnings
|
432
|
+
# Returns true if there are any new or fixed warnings
|
433
433
|
def warnings_changed?
|
434
434
|
not (diff[:new].empty? and diff[:fixed].empty?)
|
435
435
|
end
|
436
436
|
|
437
|
-
#Returns a hash of arrays for :new and :fixed warnings
|
437
|
+
# Returns a hash of arrays for :new and :fixed warnings
|
438
438
|
def diff
|
439
439
|
@diff ||= Railroader::Differ.new(all_warnings, @old_results).diff
|
440
440
|
end
|
441
441
|
|
442
|
-
#Returns an array of warnings which were in the old report and the new report
|
442
|
+
# Returns an array of warnings which were in the old report and the new report
|
443
443
|
def existing_warnings
|
444
444
|
@old ||= all_warnings.select do |w|
|
445
445
|
not new_warnings.include? w
|
446
446
|
end
|
447
447
|
end
|
448
448
|
|
449
|
-
#Output total, fixed, and new warnings
|
449
|
+
# Output total, fixed, and new warnings
|
450
450
|
def to_s(verbose = false)
|
451
451
|
Railroader.load_railroader_dependency 'terminal-table'
|
452
452
|
|
@@ -457,7 +457,7 @@ Fixed warnings: #{fixed_warnings.length}
|
|
457
457
|
New warnings: #{new_warnings.length}
|
458
458
|
OUTPUT
|
459
459
|
else
|
460
|
-
#Eventually move this to different method, or make default to_s
|
460
|
+
# Eventually move this to different method, or make default to_s
|
461
461
|
out = ""
|
462
462
|
|
463
463
|
{:fixed => fixed_warnings, :new => new_warnings, :existing => existing_warnings}.each do |warning_type, warnings|
|
data/lib/railroader/scanner.rb
CHANGED
@@ -12,12 +12,12 @@ rescue LoadError => e
|
|
12
12
|
exit(-1)
|
13
13
|
end
|
14
14
|
|
15
|
-
#Scans the Rails application.
|
15
|
+
# Scans the Rails application.
|
16
16
|
class Railroader::Scanner
|
17
17
|
attr_reader :options
|
18
18
|
RUBY_1_9 = RUBY_VERSION >= "1.9.0"
|
19
19
|
|
20
|
-
#Pass in path to the root of the Rails application
|
20
|
+
# Pass in path to the root of the Rails application
|
21
21
|
def initialize options, processor = nil
|
22
22
|
@options = options
|
23
23
|
@app_tree = Railroader::AppTree.from_options(options)
|
@@ -29,12 +29,12 @@ class Railroader::Scanner
|
|
29
29
|
@processor = processor || Railroader::Processor.new(@app_tree, options)
|
30
30
|
end
|
31
31
|
|
32
|
-
#Returns the Tracker generated from the scan
|
32
|
+
# Returns the Tracker generated from the scan
|
33
33
|
def tracker
|
34
34
|
@processor.tracked_events
|
35
35
|
end
|
36
36
|
|
37
|
-
#Process everything in the Rails application
|
37
|
+
# Process everything in the Rails application
|
38
38
|
def process
|
39
39
|
Railroader.notify "Processing gems..."
|
40
40
|
process_gems
|
@@ -90,9 +90,9 @@ class Railroader::Scanner
|
|
90
90
|
@file_list = fp.file_list
|
91
91
|
end
|
92
92
|
|
93
|
-
#Process config/environment.rb and config/gems.rb
|
93
|
+
# Process config/environment.rb and config/gems.rb
|
94
94
|
#
|
95
|
-
#Stores parsed information in tracker.config
|
95
|
+
# Stores parsed information in tracker.config
|
96
96
|
def process_config
|
97
97
|
if options[:rails3] or options[:rails4] or options[:rails5]
|
98
98
|
process_config_file "application.rb"
|
@@ -128,7 +128,7 @@ class Railroader::Scanner
|
|
128
128
|
|
129
129
|
private :process_config_file
|
130
130
|
|
131
|
-
#Process Gemfile
|
131
|
+
# Process Gemfile
|
132
132
|
def process_gems
|
133
133
|
gem_files = {}
|
134
134
|
if @app_tree.exists? "Gemfile"
|
@@ -151,7 +151,7 @@ class Railroader::Scanner
|
|
151
151
|
tracker.error e.exception(e.message + "\nWhile processing Gemfile"), e.backtrace
|
152
152
|
end
|
153
153
|
|
154
|
-
#Set :rails3/:rails4 option if version was not determined from Gemfile
|
154
|
+
# Set :rails3/:rails4 option if version was not determined from Gemfile
|
155
155
|
def guess_rails_version
|
156
156
|
unless tracker.options[:rails3] or tracker.options[:rails4]
|
157
157
|
if @app_tree.exists?("script/rails")
|
@@ -170,9 +170,9 @@ class Railroader::Scanner
|
|
170
170
|
end
|
171
171
|
end
|
172
172
|
|
173
|
-
#Process all the .rb files in config/initializers/
|
173
|
+
# Process all the .rb files in config/initializers/
|
174
174
|
#
|
175
|
-
#Adds parsed information to tracker.initializers
|
175
|
+
# Adds parsed information to tracker.initializers
|
176
176
|
def process_initializers
|
177
177
|
track_progress @file_list[:initializers] do |init|
|
178
178
|
Railroader.debug "Processing #{init[:path]}"
|
@@ -180,14 +180,14 @@ class Railroader::Scanner
|
|
180
180
|
end
|
181
181
|
end
|
182
182
|
|
183
|
-
#Process an initializer
|
183
|
+
# Process an initializer
|
184
184
|
def process_initializer init
|
185
185
|
@processor.process_initializer(init.path, init.ast)
|
186
186
|
end
|
187
187
|
|
188
|
-
#Process all .rb in lib/
|
188
|
+
# Process all .rb in lib/
|
189
189
|
#
|
190
|
-
#Adds parsed information to tracker.libs.
|
190
|
+
# Adds parsed information to tracker.libs.
|
191
191
|
def process_libs
|
192
192
|
if options[:skip_libs]
|
193
193
|
Railroader.notify '[Skipping]'
|
@@ -200,14 +200,14 @@ class Railroader::Scanner
|
|
200
200
|
end
|
201
201
|
end
|
202
202
|
|
203
|
-
#Process a library
|
203
|
+
# Process a library
|
204
204
|
def process_lib lib
|
205
205
|
@processor.process_lib lib.ast, lib.path
|
206
206
|
end
|
207
207
|
|
208
|
-
#Process config/routes.rb
|
208
|
+
# Process config/routes.rb
|
209
209
|
#
|
210
|
-
#Adds parsed information to tracker.routes
|
210
|
+
# Adds parsed information to tracker.routes
|
211
211
|
def process_routes
|
212
212
|
if @app_tree.exists?("config/routes.rb")
|
213
213
|
begin
|
@@ -222,9 +222,9 @@ class Railroader::Scanner
|
|
222
222
|
end
|
223
223
|
end
|
224
224
|
|
225
|
-
#Process all .rb files in controllers/
|
225
|
+
# Process all .rb files in controllers/
|
226
226
|
#
|
227
|
-
#Adds processed controllers to tracker.controllers
|
227
|
+
# Adds processed controllers to tracker.controllers
|
228
228
|
def process_controllers
|
229
229
|
track_progress @file_list[:controllers] do |controller|
|
230
230
|
Railroader.debug "Processing #{controller.path}"
|
@@ -242,7 +242,7 @@ class Railroader::Scanner
|
|
242
242
|
end
|
243
243
|
end
|
244
244
|
|
245
|
-
#No longer need these processed filter methods
|
245
|
+
# No longer need these processed filter methods
|
246
246
|
tracker.filter_cache.clear
|
247
247
|
end
|
248
248
|
|
@@ -254,9 +254,9 @@ class Railroader::Scanner
|
|
254
254
|
end
|
255
255
|
end
|
256
256
|
|
257
|
-
#Process all views and partials in views/
|
257
|
+
# Process all views and partials in views/
|
258
258
|
#
|
259
|
-
#Adds processed views to tracker.views
|
259
|
+
# Adds processed views to tracker.views
|
260
260
|
def process_templates
|
261
261
|
templates = @file_list[:templates].sort_by { |t| t[:path] }
|
262
262
|
|
@@ -279,9 +279,9 @@ class Railroader::Scanner
|
|
279
279
|
end
|
280
280
|
end
|
281
281
|
|
282
|
-
#Process all the .rb files in models/
|
282
|
+
# Process all the .rb files in models/
|
283
283
|
#
|
284
|
-
#Adds the processed models to tracker.models
|
284
|
+
# Adds the processed models to tracker.models
|
285
285
|
def process_models
|
286
286
|
track_progress @file_list[:models] do |model|
|
287
287
|
Railroader.debug "Processing #{model[:path]}"
|
@@ -47,7 +47,7 @@ module Railroader
|
|
47
47
|
end
|
48
48
|
|
49
49
|
def escape_html_entities_in_json?
|
50
|
-
#TODO add version-specific information here
|
50
|
+
# TODO add version-specific information here
|
51
51
|
@rails[:active_support] and
|
52
52
|
true? @rails[:active_support][:escape_html_entities_in_json]
|
53
53
|
end
|
@@ -115,9 +115,9 @@ module Railroader
|
|
115
115
|
end
|
116
116
|
end
|
117
117
|
|
118
|
-
#Returns true if low_version <= RAILS_VERSION <= high_version
|
118
|
+
# Returns true if low_version <= RAILS_VERSION <= high_version
|
119
119
|
#
|
120
|
-
#If the Rails version is unknown, returns false.
|
120
|
+
# If the Rails version is unknown, returns false.
|
121
121
|
def version_between? low_version, high_version, current_version = nil
|
122
122
|
current_version ||= rails_version
|
123
123
|
return false unless current_version
|
@@ -106,8 +106,8 @@ module Railroader
|
|
106
106
|
def before_filter_to_hash processor, args
|
107
107
|
filter = {}
|
108
108
|
|
109
|
-
#Process args for the uncommon but possible situation
|
110
|
-
#in which some variables are used in the filter.
|
109
|
+
# Process args for the uncommon but possible situation
|
110
|
+
# in which some variables are used in the filter.
|
111
111
|
args.each do |a|
|
112
112
|
if sexp? a
|
113
113
|
a = processor.process_default a
|