railroader 4.3.5 → 4.3.7
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 +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
|