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.
Files changed (107) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES.md +16 -0
  3. data/README.md +15 -0
  4. data/bin/railroader +1 -1
  5. data/lib/railroader/call_index.rb +11 -11
  6. data/lib/railroader/checks/base_check.rb +43 -43
  7. data/lib/railroader/checks/check_basic_auth.rb +3 -3
  8. data/lib/railroader/checks/check_content_tag.rb +9 -9
  9. data/lib/railroader/checks/check_create_with.rb +2 -2
  10. data/lib/railroader/checks/check_cross_site_scripting.rb +24 -24
  11. data/lib/railroader/checks/check_default_routes.rb +5 -5
  12. data/lib/railroader/checks/check_deserialize.rb +1 -1
  13. data/lib/railroader/checks/check_dynamic_finders.rb +1 -1
  14. data/lib/railroader/checks/check_escape_function.rb +3 -3
  15. data/lib/railroader/checks/check_evaluation.rb +4 -4
  16. data/lib/railroader/checks/check_execute.rb +8 -8
  17. data/lib/railroader/checks/check_file_access.rb +2 -2
  18. data/lib/railroader/checks/check_filter_skipping.rb +2 -2
  19. data/lib/railroader/checks/check_forgery_setting.rb +3 -3
  20. data/lib/railroader/checks/check_jruby_xml.rb +1 -1
  21. data/lib/railroader/checks/check_json_parsing.rb +2 -2
  22. data/lib/railroader/checks/check_link_to.rb +12 -12
  23. data/lib/railroader/checks/check_link_to_href.rb +9 -9
  24. data/lib/railroader/checks/check_mail_to.rb +4 -4
  25. data/lib/railroader/checks/check_mass_assignment.rb +5 -5
  26. data/lib/railroader/checks/check_model_attributes.rb +6 -6
  27. data/lib/railroader/checks/check_model_serialize.rb +2 -2
  28. data/lib/railroader/checks/check_nested_attributes.rb +2 -2
  29. data/lib/railroader/checks/check_nested_attributes_bypass.rb +1 -1
  30. data/lib/railroader/checks/check_quote_table_name.rb +3 -3
  31. data/lib/railroader/checks/check_redirect.rb +19 -19
  32. data/lib/railroader/checks/check_regex_dos.rb +3 -3
  33. data/lib/railroader/checks/check_render.rb +4 -4
  34. data/lib/railroader/checks/check_response_splitting.rb +2 -2
  35. data/lib/railroader/checks/check_safe_buffer_manipulation.rb +4 -4
  36. data/lib/railroader/checks/check_sanitize_methods.rb +2 -2
  37. data/lib/railroader/checks/check_select_tag.rb +4 -4
  38. data/lib/railroader/checks/check_select_vulnerability.rb +3 -3
  39. data/lib/railroader/checks/check_send.rb +1 -1
  40. data/lib/railroader/checks/check_send_file.rb +1 -1
  41. data/lib/railroader/checks/check_session_settings.rb +10 -10
  42. data/lib/railroader/checks/check_single_quotes.rb +8 -8
  43. data/lib/railroader/checks/check_skip_before_filter.rb +5 -5
  44. data/lib/railroader/checks/check_sql.rb +41 -41
  45. data/lib/railroader/checks/check_strip_tags.rb +6 -6
  46. data/lib/railroader/checks/check_symbol_dos_cve.rb +0 -1
  47. data/lib/railroader/checks/check_translate_bug.rb +4 -4
  48. data/lib/railroader/checks/check_unsafe_reflection.rb +1 -1
  49. data/lib/railroader/checks/check_validation_regex.rb +7 -7
  50. data/lib/railroader/checks/check_weak_hash.rb +1 -1
  51. data/lib/railroader/checks/check_without_protection.rb +9 -9
  52. data/lib/railroader/checks/check_yaml_parsing.rb +5 -5
  53. data/lib/railroader/checks.rb +18 -18
  54. data/lib/railroader/commandline.rb +1 -1
  55. data/lib/railroader/differ.rb +2 -2
  56. data/lib/railroader/options.rb +7 -7
  57. data/lib/railroader/parsers/rails2_erubis.rb +1 -1
  58. data/lib/railroader/parsers/rails2_xss_plugin_erubis.rb +4 -4
  59. data/lib/railroader/parsers/template_parser.rb +1 -1
  60. data/lib/railroader/processor.rb +17 -17
  61. data/lib/railroader/processors/alias_processor.rb +72 -72
  62. data/lib/railroader/processors/base_processor.rb +31 -31
  63. data/lib/railroader/processors/controller_alias_processor.rb +31 -31
  64. data/lib/railroader/processors/controller_processor.rb +29 -29
  65. data/lib/railroader/processors/erb_template_processor.rb +8 -8
  66. data/lib/railroader/processors/erubis_template_processor.rb +6 -6
  67. data/lib/railroader/processors/gem_processor.rb +1 -1
  68. data/lib/railroader/processors/haml_template_processor.rb +14 -14
  69. data/lib/railroader/processors/lib/call_conversion_helper.rb +1 -1
  70. data/lib/railroader/processors/lib/find_all_calls.rb +15 -15
  71. data/lib/railroader/processors/lib/find_call.rb +26 -26
  72. data/lib/railroader/processors/lib/find_return_value.rb +11 -11
  73. data/lib/railroader/processors/lib/module_helper.rb +1 -1
  74. data/lib/railroader/processors/lib/processor_helper.rb +4 -4
  75. data/lib/railroader/processors/lib/rails2_config_processor.rb +20 -20
  76. data/lib/railroader/processors/lib/rails2_route_processor.rb +38 -38
  77. data/lib/railroader/processors/lib/rails3_config_processor.rb +14 -14
  78. data/lib/railroader/processors/lib/rails3_route_processor.rb +16 -16
  79. data/lib/railroader/processors/lib/render_helper.rb +32 -32
  80. data/lib/railroader/processors/lib/route_helper.rb +12 -12
  81. data/lib/railroader/processors/library_processor.rb +1 -1
  82. data/lib/railroader/processors/model_processor.rb +9 -9
  83. data/lib/railroader/processors/output_processor.rb +3 -3
  84. data/lib/railroader/processors/slim_template_processor.rb +4 -4
  85. data/lib/railroader/processors/template_alias_processor.rb +10 -10
  86. data/lib/railroader/processors/template_processor.rb +7 -7
  87. data/lib/railroader/report/renderer.rb +1 -1
  88. data/lib/railroader/report/report_base.rb +12 -12
  89. data/lib/railroader/report/report_csv.rb +2 -2
  90. data/lib/railroader/report/report_html.rb +5 -5
  91. data/lib/railroader/report/report_markdown.rb +2 -2
  92. data/lib/railroader/report/report_table.rb +3 -3
  93. data/lib/railroader/report/report_tabs.rb +2 -2
  94. data/lib/railroader/report/report_text.rb +3 -4
  95. data/lib/railroader/report.rb +3 -3
  96. data/lib/railroader/rescanner.rb +36 -36
  97. data/lib/railroader/scanner.rb +23 -23
  98. data/lib/railroader/tracker/config.rb +3 -3
  99. data/lib/railroader/tracker/controller.rb +2 -2
  100. data/lib/railroader/tracker.rb +42 -42
  101. data/lib/railroader/util.rb +47 -47
  102. data/lib/railroader/version.rb +1 -1
  103. data/lib/railroader/warning.rb +9 -10
  104. data/lib/railroader.rb +32 -32
  105. data/lib/ruby_parser/bm_sexp.rb +63 -63
  106. data/lib/ruby_parser/bm_sexp_processor.rb +3 -3
  107. metadata +4 -4
@@ -4,9 +4,9 @@ require 'railroader/processors/lib/processor_helper'
4
4
  require 'railroader/processors/lib/safe_call_helper'
5
5
  require 'railroader/processors/lib/call_conversion_helper'
6
6
 
7
- #Returns an s-expression with aliases replaced with their value.
8
- #This does not preserve semantics (due to side effects, etc.), but it makes
9
- #processing easier when searching for various things.
7
+ # Returns an s-expression with aliases replaced with their value.
8
+ # This does not preserve semantics (due to side effects, etc.), but it makes
9
+ # processing easier when searching for various things.
10
10
  class Railroader::AliasProcessor < Railroader::SexpProcessor
11
11
  include Railroader::ProcessorHelper
12
12
  include Railroader::SafeCallHelper
@@ -15,9 +15,9 @@ class Railroader::AliasProcessor < Railroader::SexpProcessor
15
15
 
16
16
  attr_reader :result, :tracker
17
17
 
18
- #Returns a new AliasProcessor with an empty environment.
18
+ # Returns a new AliasProcessor with an empty environment.
19
19
  #
20
- #The recommended usage is:
20
+ # The recommended usage is:
21
21
  #
22
22
  # AliasProcessor.new.process_safely src
23
23
  def initialize tracker = nil, file_name = nil
@@ -27,23 +27,23 @@ class Railroader::AliasProcessor < Railroader::SexpProcessor
27
27
  @ignore_ifs = nil
28
28
  @exp_context = []
29
29
  @current_module = nil
30
- @tracker = tracker #set in subclass as necessary
30
+ @tracker = tracker # set in subclass as necessary
31
31
  @helper_method_cache = {}
32
32
  @helper_method_info = Hash.new({})
33
- @or_depth_limit = (tracker && tracker.options[:branch_limit]) || 5 #arbitrary default
33
+ @or_depth_limit = (tracker && tracker.options[:branch_limit]) || 5 # arbitrary default
34
34
  @meth_env = nil
35
35
  @file_name = file_name
36
36
  set_env_defaults
37
37
  end
38
38
 
39
- #This method processes the given Sexp, but copies it first so
40
- #the original argument will not be modified.
39
+ # This method processes the given Sexp, but copies it first so
40
+ # the original argument will not be modified.
41
41
  #
42
- #_set_env_ should be an instance of SexpProcessor::Environment. If provided,
43
- #it will be used as the starting environment.
42
+ # _set_env_ should be an instance of SexpProcessor::Environment. If provided,
43
+ # it will be used as the starting environment.
44
44
  #
45
- #This method returns a new Sexp with variables replaced with their values,
46
- #where possible.
45
+ # This method returns a new Sexp with variables replaced with their values,
46
+ # where possible.
47
47
  def process_safely src, set_env = nil, file_name = nil
48
48
  @file_name = file_name
49
49
  @env = set_env || SexpProcessor::Environment.new
@@ -52,8 +52,8 @@ class Railroader::AliasProcessor < Railroader::SexpProcessor
52
52
  @result
53
53
  end
54
54
 
55
- #Process a Sexp. If the Sexp has a value associated with it in the
56
- #environment, that value will be returned.
55
+ # Process a Sexp. If the Sexp has a value associated with it in the
56
+ # environment, that value will be returned.
57
57
  def process_default exp
58
58
  @exp_context.push exp
59
59
 
@@ -160,7 +160,7 @@ class Railroader::AliasProcessor < Railroader::SexpProcessor
160
160
  HASH_CONST = s(:const, :Hash)
161
161
  RAILS_TEST = s(:call, s(:call, s(:const, :Rails), :env), :test?)
162
162
 
163
- #Process a method call.
163
+ # Process a method call.
164
164
  def process_call exp
165
165
  return exp if process_call_defn? exp
166
166
  target_var = exp.target
@@ -175,7 +175,7 @@ class Railroader::AliasProcessor < Railroader::SexpProcessor
175
175
  exp = process_default exp
176
176
  end
177
177
 
178
- #In case it is replaced with something else
178
+ # In case it is replaced with something else
179
179
  unless call? exp
180
180
  return exp
181
181
  end
@@ -199,8 +199,8 @@ class Railroader::AliasProcessor < Railroader::SexpProcessor
199
199
  return Sexp.new(:false)
200
200
  end
201
201
 
202
- #See if it is possible to simplify some basic cases
203
- #of addition/concatenation.
202
+ # See if it is possible to simplify some basic cases
203
+ # of addition/concatenation.
204
204
  case method
205
205
  when :+
206
206
  if array? target and array? first_arg
@@ -351,7 +351,7 @@ class Railroader::AliasProcessor < Railroader::SexpProcessor
351
351
  env.current[local] = safe_literal(exp.line)
352
352
  else
353
353
  block_args.each do |e|
354
- #Force block arg(s) to be local
354
+ # Force block arg(s) to be local
355
355
  if node_type? e, :lasgn
356
356
  env.current[Sexp.new(:lvar, e.lhs)] = Sexp.new(:lvar, e.lhs)
357
357
  elsif node_type? e, :kwarg
@@ -382,7 +382,7 @@ class Railroader::AliasProcessor < Railroader::SexpProcessor
382
382
  exp
383
383
  end
384
384
 
385
- #Process a new scope.
385
+ # Process a new scope.
386
386
  def process_scope exp
387
387
  env.scope do
388
388
  process exp.block
@@ -390,14 +390,14 @@ class Railroader::AliasProcessor < Railroader::SexpProcessor
390
390
  exp
391
391
  end
392
392
 
393
- #Start new scope for block.
393
+ # Start new scope for block.
394
394
  def process_block exp
395
395
  env.scope do
396
396
  process_default exp
397
397
  end
398
398
  end
399
399
 
400
- #Process a method definition.
400
+ # Process a method definition.
401
401
  def process_defn exp
402
402
  meth_env do
403
403
  exp.body = process_all! exp.body
@@ -417,7 +417,7 @@ class Railroader::AliasProcessor < Railroader::SexpProcessor
417
417
  end
418
418
  end
419
419
 
420
- #Process a method definition on self.
420
+ # Process a method definition on self.
421
421
  def process_defs exp
422
422
  env.scope do
423
423
  set_env_defaults
@@ -435,7 +435,7 @@ class Railroader::AliasProcessor < Railroader::SexpProcessor
435
435
  end
436
436
  end
437
437
 
438
- #Local assignment
438
+ # Local assignment
439
439
  # x = 1
440
440
  def process_lasgn exp
441
441
  self_assign = self_assign?(exp.lhs, exp.rhs)
@@ -454,7 +454,7 @@ class Railroader::AliasProcessor < Railroader::SexpProcessor
454
454
  exp
455
455
  end
456
456
 
457
- #Instance variable assignment
457
+ # Instance variable assignment
458
458
  # @x = 1
459
459
  def process_iasgn exp
460
460
  self_assign = self_assign?(exp.lhs, exp.rhs)
@@ -474,7 +474,7 @@ class Railroader::AliasProcessor < Railroader::SexpProcessor
474
474
  exp
475
475
  end
476
476
 
477
- #Global assignment
477
+ # Global assignment
478
478
  # $x = 1
479
479
  def process_gasgn exp
480
480
  match = Sexp.new(:gvar, exp.lhs)
@@ -490,7 +490,7 @@ class Railroader::AliasProcessor < Railroader::SexpProcessor
490
490
  exp
491
491
  end
492
492
 
493
- #Class variable assignment
493
+ # Class variable assignment
494
494
  # @@x = 1
495
495
  def process_cvdecl exp
496
496
  match = Sexp.new(:cvar, exp.lhs)
@@ -502,9 +502,9 @@ class Railroader::AliasProcessor < Railroader::SexpProcessor
502
502
  exp
503
503
  end
504
504
 
505
- #'Attribute' assignment
505
+ # 'Attribute' assignment
506
506
  # x.y = 1
507
- #or
507
+ # or
508
508
  # x[:y] = 1
509
509
  def process_attrasgn exp
510
510
  tar_variable = exp.target
@@ -527,10 +527,10 @@ class Railroader::AliasProcessor < Railroader::SexpProcessor
527
527
  unless node_type? target, :hash
528
528
  exp.target = target
529
529
  end
530
- elsif method.to_s[-1,1] == "="
530
+ elsif method.to_s[-1, 1] == "="
531
531
  exp.first_arg = process(index_arg)
532
532
  value = get_rhs(exp)
533
- #This is what we'll replace with the value
533
+ # This is what we'll replace with the value
534
534
  match = Sexp.new(:call, target, method.to_s[0..-2].to_sym)
535
535
 
536
536
  set_value match, value
@@ -585,7 +585,7 @@ class Railroader::AliasProcessor < Railroader::SexpProcessor
585
585
  exp
586
586
  end
587
587
 
588
- #Merge values into hash when processing
588
+ # Merge values into hash when processing
589
589
  #
590
590
  # h.merge! :something => "value"
591
591
  def process_hash_merge! hash, args
@@ -598,7 +598,7 @@ class Railroader::AliasProcessor < Railroader::SexpProcessor
598
598
  hash
599
599
  end
600
600
 
601
- #Return a new hash Sexp with the given values merged into it.
601
+ # Return a new hash Sexp with the given values merged into it.
602
602
  #
603
603
  #+args+ should be a hash Sexp as well.
604
604
  def process_hash_merge hash, args
@@ -609,7 +609,7 @@ class Railroader::AliasProcessor < Railroader::SexpProcessor
609
609
  hash
610
610
  end
611
611
 
612
- #Assignments like this
612
+ # Assignments like this
613
613
  # x[:y] ||= 1
614
614
  def process_op_asgn1 exp
615
615
  target_var = exp[1]
@@ -637,7 +637,7 @@ class Railroader::AliasProcessor < Railroader::SexpProcessor
637
637
  exp
638
638
  end
639
639
 
640
- #Assignments like this
640
+ # Assignments like this
641
641
  # x.y ||= 1
642
642
  def process_op_asgn2 exp
643
643
  return process_default(exp) if exp[3] != :"||"
@@ -655,13 +655,13 @@ class Railroader::AliasProcessor < Railroader::SexpProcessor
655
655
  exp
656
656
  end
657
657
 
658
- #This is the right hand side value of a multiple assignment,
659
- #like `x = y, z`
658
+ # This is the right hand side value of a multiple assignment,
659
+ # like `x = y, z`
660
660
  def process_svalue exp
661
661
  exp.value
662
662
  end
663
663
 
664
- #Constant assignments like
664
+ # Constant assignments like
665
665
  # BIG_CONSTANT = 234810983
666
666
  def process_cdecl exp
667
667
  if sexp? exp.rhs
@@ -706,7 +706,7 @@ class Railroader::AliasProcessor < Railroader::SexpProcessor
706
706
  all_literals? exp.target
707
707
  end
708
708
 
709
- #Sets @inside_if = true
709
+ # Sets @inside_if = true
710
710
  def process_if exp
711
711
  if @ignore_ifs.nil?
712
712
  @ignore_ifs = @tracker && @tracker.options[:ignore_ifs]
@@ -714,7 +714,7 @@ class Railroader::AliasProcessor < Railroader::SexpProcessor
714
714
 
715
715
  condition = exp.condition = process exp.condition
716
716
 
717
- #Check if a branch is obviously going to be taken
717
+ # Check if a branch is obviously going to be taken
718
718
  if true? condition
719
719
  no_branch = true
720
720
  exps = [exp.then_clause, nil]
@@ -904,22 +904,22 @@ class Railroader::AliasProcessor < Railroader::SexpProcessor
904
904
  end
905
905
  end
906
906
 
907
- #Returns a new SexpProcessor::Environment containing only instance variables.
908
- #This is useful, for example, when processing views.
907
+ # Returns a new SexpProcessor::Environment containing only instance variables.
908
+ # This is useful, for example, when processing views.
909
909
  def only_ivars include_request_vars = false, lenv = nil
910
910
  lenv ||= env
911
911
  res = SexpProcessor::Environment.new
912
912
 
913
913
  if include_request_vars
914
914
  lenv.all.each do |k, v|
915
- #TODO Why would this have nil values?
915
+ # TODO Why would this have nil values?
916
916
  if (k.node_type == :ivar or request_value? k) and not v.nil?
917
917
  res[k] = v.dup
918
918
  end
919
919
  end
920
920
  else
921
921
  lenv.all.each do |k, v|
922
- #TODO Why would this have nil values?
922
+ # TODO Why would this have nil values?
923
923
  if k.node_type == :ivar and not v.nil?
924
924
  res[k] = v.dup
925
925
  end
@@ -944,7 +944,7 @@ class Railroader::AliasProcessor < Railroader::SexpProcessor
944
944
  def get_call_value call
945
945
  method_name = call.method
946
946
 
947
- #Look for helper methods and see if we can get a return value
947
+ # Look for helper methods and see if we can get a return value
948
948
  if found_method = find_method(method_name, @current_class)
949
949
  helper = found_method[:method]
950
950
 
@@ -966,24 +966,24 @@ class Railroader::AliasProcessor < Railroader::SexpProcessor
966
966
 
967
967
  info = @helper_method_info[method_name]
968
968
 
969
- #If method uses instance variables, then include those and request
970
- #variables (params, etc) in the method environment. Otherwise,
971
- #only include request variables.
969
+ # If method uses instance variables, then include those and request
970
+ # variables (params, etc) in the method environment. Otherwise,
971
+ # only include request variables.
972
972
  if info[:uses_ivars]
973
973
  meth_env = only_ivars(:include_request_vars)
974
974
  else
975
975
  meth_env = only_request_vars
976
976
  end
977
977
 
978
- #Add arguments to method environment
978
+ # Add arguments to method environment
979
979
  assign_args method_exp, args, meth_env
980
980
 
981
981
 
982
- #Find return values if method does not depend on environment/args
982
+ # Find return values if method does not depend on environment/args
983
983
  values = @helper_method_cache[method_name]
984
984
 
985
985
  unless values
986
- #Serialize environment for cache key
986
+ # Serialize environment for cache key
987
987
  meth_values = meth_env.instance_variable_get(:@env).to_a
988
988
  meth_values.sort!
989
989
  meth_values = meth_values.to_s
@@ -994,14 +994,14 @@ class Railroader::AliasProcessor < Railroader::SexpProcessor
994
994
  end
995
995
 
996
996
  if values
997
- #Use values from cache
997
+ # Use values from cache
998
998
  values[:ivar_values].each do |var, val|
999
999
  env[var] = val
1000
1000
  end
1001
1001
 
1002
1002
  values[:return_value]
1003
1003
  else
1004
- #Find return value for method
1004
+ # Find return value for method
1005
1005
  frv = Railroader::FindReturnValue.new
1006
1006
  value = frv.get_return_value(method_exp.body_list, meth_env)
1007
1007
 
@@ -1013,13 +1013,13 @@ class Railroader::AliasProcessor < Railroader::SexpProcessor
1013
1013
  end
1014
1014
 
1015
1015
  if not frv.uses_ivars? and args.length == 0
1016
- #Store return value without ivars and args if they are not used
1016
+ # Store return value without ivars and args if they are not used
1017
1017
  @helper_method_cache[method_exp.method_name] = { :return_value => value, :ivar_values => ivars }
1018
1018
  else
1019
1019
  @helper_method_cache[digest] = { :return_value => value, :ivar_values => ivars }
1020
1020
  end
1021
1021
 
1022
- #Store information about method, just ivar usage for now
1022
+ # Store information about method, just ivar usage for now
1023
1023
  @helper_method_info[method_name] = { :uses_ivars => frv.uses_ivars? }
1024
1024
 
1025
1025
  value
@@ -1040,7 +1040,7 @@ class Railroader::AliasProcessor < Railroader::SexpProcessor
1040
1040
  meth_env
1041
1041
  end
1042
1042
 
1043
- #Finds the inner most call target which is not the target of a call to <<
1043
+ # Finds the inner most call target which is not the target of a call to <<
1044
1044
  def find_push_target exp
1045
1045
  if call? exp and exp.method == :<<
1046
1046
  find_push_target exp.target
@@ -1061,8 +1061,8 @@ class Railroader::AliasProcessor < Railroader::SexpProcessor
1061
1061
  nil
1062
1062
  end
1063
1063
 
1064
- #Return true if lhs == rhs or lhs is an or expression and
1065
- #rhs is one of its values
1064
+ # Return true if lhs == rhs or lhs is an or expression and
1065
+ # rhs is one of its values
1066
1066
  def same_value? lhs, rhs
1067
1067
  if lhs == rhs
1068
1068
  true
@@ -1077,7 +1077,7 @@ class Railroader::AliasProcessor < Railroader::SexpProcessor
1077
1077
  self_assign_var?(var, value) or self_assign_target?(var, value)
1078
1078
  end
1079
1079
 
1080
- #Return true if for x += blah or @x += blah
1080
+ # Return true if for x += blah or @x += blah
1081
1081
  def self_assign_var? var, value
1082
1082
  call? value and
1083
1083
  value.method == :+ and
@@ -1085,7 +1085,7 @@ class Railroader::AliasProcessor < Railroader::SexpProcessor
1085
1085
  value.target.value == var
1086
1086
  end
1087
1087
 
1088
- #Return true for x = x.blah
1088
+ # Return true for x = x.blah
1089
1089
  def self_assign_target? var, value
1090
1090
  target = top_target(value)
1091
1091
 
@@ -1096,7 +1096,7 @@ class Railroader::AliasProcessor < Railroader::SexpProcessor
1096
1096
  var == target
1097
1097
  end
1098
1098
 
1099
- #Returns last non-nil target in a call chain
1099
+ # Returns last non-nil target in a call chain
1100
1100
  def top_target exp, last = nil
1101
1101
  if call? exp
1102
1102
  top_target exp.target, exp
@@ -1109,8 +1109,8 @@ class Railroader::AliasProcessor < Railroader::SexpProcessor
1109
1109
 
1110
1110
  def value_from_if exp
1111
1111
  if block? exp.else_clause or block? exp.then_clause
1112
- #If either clause is more than a single expression, just use entire
1113
- #if expression for now
1112
+ # If either clause is more than a single expression, just use entire
1113
+ # if expression for now
1114
1114
  exp
1115
1115
  elsif exp.else_clause.nil?
1116
1116
  exp.then_clause
@@ -1159,10 +1159,10 @@ class Railroader::AliasProcessor < Railroader::SexpProcessor
1159
1159
  call? exp and exp.method == :raise
1160
1160
  end
1161
1161
 
1162
- #Set variable to given value.
1163
- #Creates "branched" versions of values when appropriate.
1164
- #Avoids creating multiple branched versions inside same
1165
- #if branch.
1162
+ # Set variable to given value.
1163
+ # Creates "branched" versions of values when appropriate.
1164
+ # Avoids creating multiple branched versions inside same
1165
+ # if branch.
1166
1166
  def set_value var, value
1167
1167
  if node_type? value, :if
1168
1168
  value = value_from_if(value)
@@ -1187,16 +1187,16 @@ class Railroader::AliasProcessor < Railroader::SexpProcessor
1187
1187
  end
1188
1188
  end
1189
1189
 
1190
- #If possible, distribute operation over both sides of an or.
1191
- #For example,
1190
+ # If possible, distribute operation over both sides of an or.
1191
+ # For example,
1192
1192
  #
1193
1193
  # (1 or 2) * 5
1194
1194
  #
1195
- #Becomes
1195
+ # Becomes
1196
1196
  #
1197
1197
  # (5 or 10)
1198
1198
  #
1199
- #Only works for strings and numbers right now.
1199
+ # Only works for strings and numbers right now.
1200
1200
  def process_or_simple_operation exp
1201
1201
  arg = exp.first_arg
1202
1202
  return nil unless string? arg or number? arg
@@ -2,7 +2,7 @@ require 'railroader/processors/lib/processor_helper'
2
2
  require 'railroader/processors/lib/safe_call_helper'
3
3
  require 'railroader/util'
4
4
 
5
- #Base processor for most processors.
5
+ # Base processor for most processors.
6
6
  class Railroader::BaseProcessor < Railroader::SexpProcessor
7
7
  include Railroader::ProcessorHelper
8
8
  include Railroader::SafeCallHelper
@@ -10,7 +10,7 @@ class Railroader::BaseProcessor < Railroader::SexpProcessor
10
10
 
11
11
  IGNORE = Sexp.new :ignore
12
12
 
13
- #Return a new Processor.
13
+ # Return a new Processor.
14
14
  def initialize tracker
15
15
  super()
16
16
  @last = nil
@@ -27,12 +27,12 @@ class Railroader::BaseProcessor < Railroader::SexpProcessor
27
27
  IGNORE
28
28
  end
29
29
 
30
- #Process a new scope. Removes expressions that are set to nil.
30
+ # Process a new scope. Removes expressions that are set to nil.
31
31
  def process_scope exp
32
- #NOPE?
32
+ # NOPE?
33
33
  end
34
34
 
35
- #Default processing.
35
+ # Default processing.
36
36
  def process_default exp
37
37
  exp = exp.dup
38
38
 
@@ -43,7 +43,7 @@ class Railroader::BaseProcessor < Railroader::SexpProcessor
43
43
  exp
44
44
  end
45
45
 
46
- #Process an if statement.
46
+ # Process an if statement.
47
47
  def process_if exp
48
48
  exp = exp.dup
49
49
  condition = exp[1] = process exp.condition
@@ -62,13 +62,13 @@ class Railroader::BaseProcessor < Railroader::SexpProcessor
62
62
  exp
63
63
  end
64
64
 
65
- #Processes calls with blocks.
65
+ # Processes calls with blocks.
66
66
  #
67
- #s(:iter, CALL, {:lasgn|:masgn}, BLOCK)
67
+ # s(:iter, CALL, {:lasgn|:masgn}, BLOCK)
68
68
  def process_iter exp
69
69
  exp = exp.dup
70
70
  call = process exp.block_call
71
- #deal with assignments somehow
71
+ # deal with assignments somehow
72
72
  if exp.block
73
73
  block = process exp.block
74
74
  block = nil if block.empty?
@@ -81,7 +81,7 @@ class Railroader::BaseProcessor < Railroader::SexpProcessor
81
81
  call
82
82
  end
83
83
 
84
- #String with interpolation.
84
+ # String with interpolation.
85
85
  def process_dstr exp
86
86
  exp = exp.dup
87
87
  exp.shift
@@ -101,7 +101,7 @@ class Railroader::BaseProcessor < Railroader::SexpProcessor
101
101
  exp.unshift :dstr
102
102
  end
103
103
 
104
- #Processes a block. Changes Sexp node type to :rlist
104
+ # Processes a block. Changes Sexp node type to :rlist
105
105
  def process_block exp
106
106
  exp = exp.dup
107
107
  exp.shift
@@ -113,7 +113,7 @@ class Railroader::BaseProcessor < Railroader::SexpProcessor
113
113
  exp.unshift :rlist
114
114
  end
115
115
 
116
- #Processes the inside of an interpolated String.
116
+ # Processes the inside of an interpolated String.
117
117
  def process_evstr exp
118
118
  exp = exp.dup
119
119
  if exp[1]
@@ -123,7 +123,7 @@ class Railroader::BaseProcessor < Railroader::SexpProcessor
123
123
  exp
124
124
  end
125
125
 
126
- #Processes a hash
126
+ # Processes a hash
127
127
  def process_hash exp
128
128
  exp = exp.dup
129
129
  exp.shift
@@ -138,7 +138,7 @@ class Railroader::BaseProcessor < Railroader::SexpProcessor
138
138
  exp.unshift :hash
139
139
  end
140
140
 
141
- #Processes the values in an argument list
141
+ # Processes the values in an argument list
142
142
  def process_arglist exp
143
143
  exp = exp.dup
144
144
  exp.shift
@@ -149,7 +149,7 @@ class Railroader::BaseProcessor < Railroader::SexpProcessor
149
149
  exp.unshift :arglist
150
150
  end
151
151
 
152
- #Processes a local assignment
152
+ # Processes a local assignment
153
153
  def process_lasgn exp
154
154
  exp = exp.dup
155
155
  exp.rhs = process exp.rhs
@@ -158,14 +158,14 @@ class Railroader::BaseProcessor < Railroader::SexpProcessor
158
158
 
159
159
  alias :process_iasgn :process_lasgn
160
160
 
161
- #Processes an instance variable assignment
161
+ # Processes an instance variable assignment
162
162
  def process_iasgn exp
163
163
  exp = exp.dup
164
164
  exp.rhs = process exp.rhs
165
165
  exp
166
166
  end
167
167
 
168
- #Processes an attribute assignment, which can be either x.y = 1 or x[:y] = 1
168
+ # Processes an attribute assignment, which can be either x.y = 1 or x[:y] = 1
169
169
  def process_attrasgn exp
170
170
  exp = exp.dup
171
171
  exp.target = process exp.target
@@ -173,7 +173,7 @@ class Railroader::BaseProcessor < Railroader::SexpProcessor
173
173
  exp
174
174
  end
175
175
 
176
- #Ignore ignore Sexps
176
+ # Ignore ignore Sexps
177
177
  def process_ignore exp
178
178
  exp
179
179
  end
@@ -191,13 +191,13 @@ class Railroader::BaseProcessor < Railroader::SexpProcessor
191
191
  exp
192
192
  end
193
193
 
194
- #Convenience method for `make_render exp, true`
194
+ # Convenience method for `make_render exp, true`
195
195
  def make_render_in_view exp
196
196
  make_render exp, true
197
197
  end
198
198
 
199
- #Generates :render node from call to render.
200
- def make_render exp, in_view = false
199
+ # Generates :render node from call to render.
200
+ def make_render exp, in_view = false
201
201
  render_type, value, rest = find_render_type exp, in_view
202
202
  rest = process rest
203
203
  result = Sexp.new(:render, render_type, value, rest)
@@ -205,13 +205,13 @@ class Railroader::BaseProcessor < Railroader::SexpProcessor
205
205
  result
206
206
  end
207
207
 
208
- #Determines the type of a call to render.
208
+ # Determines the type of a call to render.
209
209
  #
210
- #Possible types are:
210
+ # Possible types are:
211
211
  #:action, :default, :file, :inline, :js, :json, :nothing, :partial,
212
212
  #:template, :text, :update, :xml
213
213
  #
214
- #And also :layout for inside templates
214
+ # And also :layout for inside templates
215
215
  def find_render_type call, in_view = false
216
216
  rest = Sexp.new(:hash)
217
217
  type = nil
@@ -219,10 +219,10 @@ class Railroader::BaseProcessor < Railroader::SexpProcessor
219
219
  first_arg = call.first_arg
220
220
 
221
221
  if call.second_arg.nil? and first_arg == Sexp.new(:lit, :update)
222
- return :update, nil, Sexp.new(:arglist, *call.args[0..-2]) #TODO HUH?
222
+ return :update, nil, Sexp.new(:arglist, *call.args[0..-2]) # TODO HUH?
223
223
  end
224
224
 
225
- #Look for render :action, ... or render "action", ...
225
+ # Look for render :action, ... or render "action", ...
226
226
  if string? first_arg or symbol? first_arg
227
227
  if @current_template and @tracker.options[:rails3]
228
228
  type = :partial
@@ -234,7 +234,7 @@ class Railroader::BaseProcessor < Railroader::SexpProcessor
234
234
  elsif first_arg.is_a? Symbol or first_arg.is_a? String
235
235
  type = :action
236
236
  value = Sexp.new(:lit, first_arg.to_sym)
237
- elsif first_arg.nil?
237
+ elsif first_arg.nil?
238
238
  type = :default
239
239
  elsif not hash? first_arg
240
240
  type = :action
@@ -243,21 +243,21 @@ class Railroader::BaseProcessor < Railroader::SexpProcessor
243
243
 
244
244
  types_in_hash = Set[:action, :file, :inline, :js, :json, :nothing, :partial, :template, :text, :update, :xml]
245
245
 
246
- #render :layout => "blah" means something else when in a template
246
+ # render :layout => "blah" means something else when in a template
247
247
  if in_view
248
248
  types_in_hash << :layout
249
249
  end
250
250
 
251
251
  last_arg = call.last_arg
252
252
 
253
- #Look for "type" of render in options hash
254
- #For example, render :file => "blah"
253
+ # Look for "type" of render in options hash
254
+ # For example, render :file => "blah"
255
255
  if hash? last_arg
256
256
  hash_iterate(last_arg) do |key, val|
257
257
  if symbol? key and types_in_hash.include? key.value
258
258
  type = key.value
259
259
  value = val
260
- else
260
+ else
261
261
  rest << key << val
262
262
  end
263
263
  end