brakeman 4.4.0 → 4.5.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of brakeman might be problematic. Click here for more details.

Files changed (362) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES.md +17 -0
  3. data/bundle/load.rb +7 -8
  4. data/bundle/ruby/2.5.0/gems/{ruby2ruby-2.4.1 → ruby2ruby-2.4.2}/History.rdoc +8 -0
  5. data/bundle/ruby/2.5.0/gems/{ruby2ruby-2.4.1 → ruby2ruby-2.4.2}/Manifest.txt +0 -0
  6. data/bundle/ruby/2.5.0/gems/{ruby2ruby-2.4.1 → ruby2ruby-2.4.2}/README.rdoc +0 -0
  7. data/bundle/ruby/2.5.0/gems/{ruby2ruby-2.4.1 → ruby2ruby-2.4.2}/lib/ruby2ruby.rb +34 -36
  8. data/bundle/ruby/2.5.0/gems/{ruby_parser-3.12.0 → ruby_parser-3.13.0}/History.rdoc +47 -0
  9. data/bundle/ruby/2.5.0/gems/{ruby_parser-3.12.0 → ruby_parser-3.13.0}/Manifest.txt +5 -4
  10. data/bundle/ruby/2.5.0/gems/{ruby_parser-3.12.0 → ruby_parser-3.13.0}/README.rdoc +0 -0
  11. data/bundle/ruby/2.5.0/gems/{ruby_parser-3.12.0 → ruby_parser-3.13.0}/compare/normalize.rb +29 -2
  12. data/bundle/ruby/2.5.0/gems/ruby_parser-3.13.0/debugging.md +18 -0
  13. data/bundle/ruby/2.5.0/gems/{ruby_parser-3.12.0 → ruby_parser-3.13.0}/lib/rp_extensions.rb +0 -7
  14. data/bundle/ruby/2.5.0/gems/{ruby_parser-3.12.0 → ruby_parser-3.13.0}/lib/rp_stringscanner.rb +0 -0
  15. data/bundle/ruby/2.5.0/gems/ruby_parser-3.13.0/lib/ruby20_parser.rb +6874 -0
  16. data/bundle/ruby/2.5.0/gems/{ruby_parser-3.12.0 → ruby_parser-3.13.0}/lib/ruby20_parser.y +284 -201
  17. data/bundle/ruby/2.5.0/gems/ruby_parser-3.13.0/lib/ruby21_parser.rb +6952 -0
  18. data/bundle/ruby/2.5.0/gems/{ruby_parser-3.12.0 → ruby_parser-3.13.0}/lib/ruby21_parser.y +281 -197
  19. data/bundle/ruby/2.5.0/gems/ruby_parser-3.13.0/lib/ruby22_parser.rb +6983 -0
  20. data/bundle/ruby/2.5.0/gems/{ruby_parser-3.12.0/lib/ruby_parser.yy → ruby_parser-3.13.0/lib/ruby22_parser.y} +280 -306
  21. data/bundle/ruby/2.5.0/gems/ruby_parser-3.13.0/lib/ruby23_parser.rb +6982 -0
  22. data/bundle/ruby/2.5.0/gems/{ruby_parser-3.12.0 → ruby_parser-3.13.0}/lib/ruby23_parser.y +282 -203
  23. data/bundle/ruby/2.5.0/gems/ruby_parser-3.13.0/lib/ruby24_parser.rb +6982 -0
  24. data/bundle/ruby/2.5.0/gems/{ruby_parser-3.12.0 → ruby_parser-3.13.0}/lib/ruby24_parser.y +282 -203
  25. data/bundle/ruby/2.5.0/gems/ruby_parser-3.13.0/lib/ruby25_parser.rb +6981 -0
  26. data/bundle/ruby/2.5.0/gems/{ruby_parser-3.12.0 → ruby_parser-3.13.0}/lib/ruby25_parser.y +282 -203
  27. data/bundle/ruby/2.5.0/gems/ruby_parser-3.13.0/lib/ruby26_parser.rb +6999 -0
  28. data/bundle/ruby/2.5.0/gems/ruby_parser-3.13.0/lib/ruby26_parser.y +2469 -0
  29. data/bundle/ruby/2.5.0/gems/{ruby_parser-3.12.0 → ruby_parser-3.13.0}/lib/ruby_lexer.rb +116 -118
  30. data/bundle/ruby/2.5.0/gems/{ruby_parser-3.12.0 → ruby_parser-3.13.0}/lib/ruby_lexer.rex +10 -8
  31. data/bundle/ruby/2.5.0/gems/{ruby_parser-3.12.0 → ruby_parser-3.13.0}/lib/ruby_lexer.rex.rb +8 -8
  32. data/bundle/ruby/2.5.0/gems/{ruby_parser-3.12.0 → ruby_parser-3.13.0}/lib/ruby_parser.rb +5 -7
  33. data/bundle/ruby/2.5.0/gems/ruby_parser-3.13.0/lib/ruby_parser.yy +2571 -0
  34. data/bundle/ruby/2.5.0/gems/ruby_parser-3.13.0/lib/ruby_parser_extras.rb +1360 -0
  35. data/bundle/ruby/2.5.0/gems/ruby_parser-3.13.0/tools/munge.rb +216 -0
  36. data/bundle/ruby/2.5.0/gems/ruby_parser-3.13.0/tools/ripper.rb +23 -0
  37. data/bundle/ruby/2.5.0/gems/ruby_parser-legacy-1.0.0/History.rdoc +6 -0
  38. data/bundle/ruby/2.5.0/gems/ruby_parser-legacy-1.0.0/Manifest.txt +19 -0
  39. data/bundle/ruby/2.5.0/gems/ruby_parser-legacy-1.0.0/README.rdoc +54 -0
  40. data/bundle/ruby/2.5.0/gems/ruby_parser-legacy-1.0.0/lib/ruby_parser/legacy.rb +5 -0
  41. data/bundle/ruby/2.5.0/gems/{ruby_parser-3.12.0/lib → ruby_parser-legacy-1.0.0/lib/ruby_parser/legacy}/ruby18_parser.rb +7 -6
  42. data/bundle/ruby/2.5.0/gems/{ruby_parser-3.12.0/lib → ruby_parser-legacy-1.0.0/lib/ruby_parser/legacy}/ruby18_parser.y +5 -4
  43. data/bundle/ruby/2.5.0/gems/{ruby_parser-3.12.0/lib → ruby_parser-legacy-1.0.0/lib/ruby_parser/legacy}/ruby19_parser.rb +7 -6
  44. data/bundle/ruby/2.5.0/gems/{ruby_parser-3.12.0/lib → ruby_parser-legacy-1.0.0/lib/ruby_parser/legacy}/ruby19_parser.y +5 -4
  45. data/bundle/ruby/2.5.0/gems/ruby_parser-legacy-1.0.0/lib/ruby_parser/legacy/ruby_lexer.rb +1412 -0
  46. data/bundle/ruby/2.5.0/gems/ruby_parser-legacy-1.0.0/lib/ruby_parser/legacy/ruby_lexer.rex +179 -0
  47. data/bundle/ruby/2.5.0/gems/ruby_parser-legacy-1.0.0/lib/ruby_parser/legacy/ruby_lexer.rex.rb +323 -0
  48. data/bundle/ruby/2.5.0/gems/ruby_parser-legacy-1.0.0/lib/ruby_parser/legacy/ruby_parser.rb +30 -0
  49. data/bundle/ruby/2.5.0/gems/{ruby_parser-3.12.0/lib → ruby_parser-legacy-1.0.0/lib/ruby_parser/legacy}/ruby_parser_extras.rb +43 -33
  50. data/bundle/ruby/2.5.0/gems/{safe_yaml-1.0.4 → safe_yaml-1.0.5}/CHANGES.md +5 -0
  51. data/bundle/ruby/2.5.0/gems/{safe_yaml-1.0.4 → safe_yaml-1.0.5}/Gemfile +0 -0
  52. data/bundle/ruby/2.5.0/gems/{safe_yaml-1.0.4 → safe_yaml-1.0.5}/LICENSE.txt +0 -0
  53. data/bundle/ruby/2.5.0/gems/{safe_yaml-1.0.4 → safe_yaml-1.0.5}/README.md +0 -0
  54. data/bundle/ruby/2.5.0/gems/{safe_yaml-1.0.4 → safe_yaml-1.0.5}/bundle_install_all_ruby_versions.sh +0 -0
  55. data/bundle/ruby/2.5.0/gems/{safe_yaml-1.0.4 → safe_yaml-1.0.5}/lib/safe_yaml.rb +0 -0
  56. data/bundle/ruby/2.5.0/gems/{safe_yaml-1.0.4 → safe_yaml-1.0.5}/lib/safe_yaml/deep.rb +0 -0
  57. data/bundle/ruby/2.5.0/gems/{safe_yaml-1.0.4 → safe_yaml-1.0.5}/lib/safe_yaml/libyaml_checker.rb +0 -0
  58. data/bundle/ruby/2.5.0/gems/{safe_yaml-1.0.4 → safe_yaml-1.0.5}/lib/safe_yaml/load.rb +0 -0
  59. data/bundle/ruby/2.5.0/gems/{safe_yaml-1.0.4 → safe_yaml-1.0.5}/lib/safe_yaml/parse/date.rb +2 -0
  60. data/bundle/ruby/2.5.0/gems/{safe_yaml-1.0.4 → safe_yaml-1.0.5}/lib/safe_yaml/parse/hexadecimal.rb +0 -0
  61. data/bundle/ruby/2.5.0/gems/{safe_yaml-1.0.4 → safe_yaml-1.0.5}/lib/safe_yaml/parse/sexagesimal.rb +0 -0
  62. data/bundle/ruby/2.5.0/gems/{safe_yaml-1.0.4 → safe_yaml-1.0.5}/lib/safe_yaml/psych_handler.rb +0 -0
  63. data/bundle/ruby/2.5.0/gems/{safe_yaml-1.0.4 → safe_yaml-1.0.5}/lib/safe_yaml/psych_resolver.rb +0 -0
  64. data/bundle/ruby/2.5.0/gems/{safe_yaml-1.0.4 → safe_yaml-1.0.5}/lib/safe_yaml/resolver.rb +0 -0
  65. data/bundle/ruby/2.5.0/gems/{safe_yaml-1.0.4 → safe_yaml-1.0.5}/lib/safe_yaml/safe_to_ruby_visitor.rb +0 -0
  66. data/bundle/ruby/2.5.0/gems/safe_yaml-1.0.5/lib/safe_yaml/store.rb +39 -0
  67. data/bundle/ruby/2.5.0/gems/{safe_yaml-1.0.4 → safe_yaml-1.0.5}/lib/safe_yaml/syck_hack.rb +0 -0
  68. data/bundle/ruby/2.5.0/gems/{safe_yaml-1.0.4 → safe_yaml-1.0.5}/lib/safe_yaml/syck_node_monkeypatch.rb +0 -0
  69. data/bundle/ruby/2.5.0/gems/{safe_yaml-1.0.4 → safe_yaml-1.0.5}/lib/safe_yaml/syck_resolver.rb +0 -0
  70. data/bundle/ruby/2.5.0/gems/{safe_yaml-1.0.4 → safe_yaml-1.0.5}/lib/safe_yaml/transform.rb +0 -0
  71. data/bundle/ruby/2.5.0/gems/{safe_yaml-1.0.4 → safe_yaml-1.0.5}/lib/safe_yaml/transform/to_boolean.rb +0 -0
  72. data/bundle/ruby/2.5.0/gems/{safe_yaml-1.0.4 → safe_yaml-1.0.5}/lib/safe_yaml/transform/to_date.rb +0 -0
  73. data/bundle/ruby/2.5.0/gems/{safe_yaml-1.0.4 → safe_yaml-1.0.5}/lib/safe_yaml/transform/to_float.rb +0 -0
  74. data/bundle/ruby/2.5.0/gems/{safe_yaml-1.0.4 → safe_yaml-1.0.5}/lib/safe_yaml/transform/to_integer.rb +0 -0
  75. data/bundle/ruby/2.5.0/gems/{safe_yaml-1.0.4 → safe_yaml-1.0.5}/lib/safe_yaml/transform/to_nil.rb +0 -0
  76. data/bundle/ruby/2.5.0/gems/{safe_yaml-1.0.4 → safe_yaml-1.0.5}/lib/safe_yaml/transform/to_symbol.rb +0 -0
  77. data/bundle/ruby/2.5.0/gems/{safe_yaml-1.0.4 → safe_yaml-1.0.5}/lib/safe_yaml/transform/transformation_map.rb +0 -0
  78. data/bundle/ruby/2.5.0/gems/{safe_yaml-1.0.4 → safe_yaml-1.0.5}/lib/safe_yaml/version.rb +1 -1
  79. data/bundle/ruby/2.5.0/gems/{safe_yaml-1.0.4 → safe_yaml-1.0.5}/run_specs_all_ruby_versions.sh +0 -0
  80. data/bundle/ruby/2.5.0/gems/{safe_yaml-1.0.4 → safe_yaml-1.0.5}/safe_yaml.gemspec +0 -0
  81. data/bundle/ruby/2.5.0/gems/{sexp_processor-4.11.0 → sexp_processor-4.12.0}/History.rdoc +8 -0
  82. data/bundle/ruby/2.5.0/gems/{sexp_processor-4.11.0 → sexp_processor-4.12.0}/Manifest.txt +0 -0
  83. data/bundle/ruby/2.5.0/gems/{sexp_processor-4.11.0 → sexp_processor-4.12.0}/README.rdoc +0 -0
  84. data/bundle/ruby/2.5.0/gems/{sexp_processor-4.11.0 → sexp_processor-4.12.0}/lib/composite_sexp_processor.rb +0 -0
  85. data/bundle/ruby/2.5.0/gems/{sexp_processor-4.11.0 → sexp_processor-4.12.0}/lib/pt_testcase.rb +2 -2
  86. data/bundle/ruby/2.5.0/gems/{sexp_processor-4.11.0 → sexp_processor-4.12.0}/lib/sexp.rb +4 -4
  87. data/bundle/ruby/2.5.0/gems/{sexp_processor-4.11.0 → sexp_processor-4.12.0}/lib/sexp_processor.rb +1 -1
  88. data/bundle/ruby/2.5.0/gems/{sexp_processor-4.11.0 → sexp_processor-4.12.0}/lib/strict_sexp.rb +3 -3
  89. data/bundle/ruby/2.5.0/gems/{sexp_processor-4.11.0 → sexp_processor-4.12.0}/lib/unique.rb +0 -0
  90. data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/CHANGES +6 -0
  91. data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/EXPRESSIONS.md +1 -1
  92. data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/Gemfile +0 -0
  93. data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/LICENSE +0 -0
  94. data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/README.md +1 -1
  95. data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple.rb +0 -0
  96. data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/engine.rb +0 -0
  97. data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/erb/engine.rb +0 -0
  98. data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/erb/parser.rb +0 -0
  99. data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/erb/template.rb +0 -0
  100. data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/erb/trimming.rb +0 -0
  101. data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/exceptions.rb +0 -0
  102. data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/filter.rb +0 -0
  103. data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/filters/code_merger.rb +0 -0
  104. data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/filters/control_flow.rb +0 -0
  105. data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/filters/dynamic_inliner.rb +0 -0
  106. data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/filters/encoding.rb +0 -0
  107. data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/filters/eraser.rb +0 -0
  108. data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/filters/escapable.rb +0 -0
  109. data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/filters/multi_flattener.rb +0 -0
  110. data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/filters/remove_bom.rb +0 -0
  111. data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/filters/static_analyzer.rb +0 -0
  112. data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/filters/static_merger.rb +0 -0
  113. data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/filters/string_splitter.rb +0 -0
  114. data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/filters/validator.rb +0 -0
  115. data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/generator.rb +0 -0
  116. data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/generators/array.rb +0 -0
  117. data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/generators/array_buffer.rb +0 -0
  118. data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/generators/erb.rb +0 -0
  119. data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/generators/rails_output_buffer.rb +0 -0
  120. data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/generators/string_buffer.rb +0 -0
  121. data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/grammar.rb +0 -0
  122. data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/html/attribute_merger.rb +0 -0
  123. data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/html/attribute_remover.rb +0 -0
  124. data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/html/attribute_sorter.rb +0 -0
  125. data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/html/dispatcher.rb +0 -0
  126. data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/html/fast.rb +0 -0
  127. data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/html/filter.rb +0 -0
  128. data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/html/pretty.rb +0 -0
  129. data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/html/safe.rb +0 -0
  130. data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/map.rb +0 -0
  131. data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/mixins/dispatcher.rb +2 -1
  132. data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/mixins/engine_dsl.rb +0 -0
  133. data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/mixins/grammar_dsl.rb +0 -0
  134. data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/mixins/options.rb +0 -0
  135. data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/mixins/template.rb +0 -0
  136. data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/parser.rb +0 -0
  137. data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/static_analyzer.rb +0 -0
  138. data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/templates.rb +0 -0
  139. data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/templates/rails.rb +2 -2
  140. data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/templates/tilt.rb +0 -0
  141. data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/utils.rb +0 -0
  142. data/bundle/ruby/2.5.0/gems/temple-0.8.1/lib/temple/version.rb +3 -0
  143. data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/temple.gemspec +0 -0
  144. data/bundle/ruby/2.5.0/gems/{unicode-display_width-1.4.1 → unicode-display_width-1.5.0}/CHANGELOG.md +4 -0
  145. data/bundle/ruby/2.5.0/gems/{unicode-display_width-1.4.1 → unicode-display_width-1.5.0}/MIT-LICENSE.txt +1 -1
  146. data/bundle/ruby/2.5.0/gems/{unicode-display_width-1.4.1 → unicode-display_width-1.5.0}/README.md +10 -10
  147. data/bundle/ruby/2.5.0/gems/unicode-display_width-1.5.0/data/display_width.marshal.gz +0 -0
  148. data/bundle/ruby/2.5.0/gems/{unicode-display_width-1.4.1 → unicode-display_width-1.5.0}/lib/unicode/display_width.rb +0 -0
  149. data/bundle/ruby/2.5.0/gems/{unicode-display_width-1.4.1 → unicode-display_width-1.5.0}/lib/unicode/display_width/constants.rb +2 -2
  150. data/bundle/ruby/2.5.0/gems/{unicode-display_width-1.4.1 → unicode-display_width-1.5.0}/lib/unicode/display_width/index.rb +0 -0
  151. data/bundle/ruby/2.5.0/gems/{unicode-display_width-1.4.1 → unicode-display_width-1.5.0}/lib/unicode/display_width/no_string_ext.rb +0 -0
  152. data/bundle/ruby/2.5.0/gems/{unicode-display_width-1.4.1 → unicode-display_width-1.5.0}/lib/unicode/display_width/string_ext.rb +0 -0
  153. data/lib/brakeman/checks/base_check.rb +16 -0
  154. data/lib/brakeman/checks/check_content_tag.rb +12 -0
  155. data/lib/brakeman/checks/check_cross_site_scripting.rb +6 -6
  156. data/lib/brakeman/checks/check_evaluation.rb +0 -1
  157. data/lib/brakeman/checks/check_execute.rb +18 -0
  158. data/lib/brakeman/checks/check_send.rb +0 -1
  159. data/lib/brakeman/checks/check_session_manipulation.rb +0 -1
  160. data/lib/brakeman/checks/check_sql.rb +12 -3
  161. data/lib/brakeman/file_parser.rb +8 -4
  162. data/lib/brakeman/parsers/haml_embedded.rb +44 -0
  163. data/lib/brakeman/parsers/slim_embedded.rb +44 -0
  164. data/lib/brakeman/parsers/template_parser.rb +2 -4
  165. data/lib/brakeman/processors/alias_processor.rb +23 -1
  166. data/lib/brakeman/processors/lib/call_conversion_helper.rb +4 -0
  167. data/lib/brakeman/processors/slim_template_processor.rb +16 -0
  168. data/lib/brakeman/processors/template_alias_processor.rb +2 -2
  169. data/lib/brakeman/scanner.rb +11 -10
  170. data/lib/brakeman/tracker.rb +5 -1
  171. data/lib/brakeman/tracker/config.rb +32 -7
  172. data/lib/brakeman/util.rb +17 -0
  173. data/lib/brakeman/version.rb +1 -1
  174. metadata +157 -320
  175. data/bundle/ruby/2.5.0/gems/ruby_parser-3.12.0/lib/ruby20_parser.rb +0 -6687
  176. data/bundle/ruby/2.5.0/gems/ruby_parser-3.12.0/lib/ruby21_parser.rb +0 -6767
  177. data/bundle/ruby/2.5.0/gems/ruby_parser-3.12.0/lib/ruby22_parser.rb +0 -6803
  178. data/bundle/ruby/2.5.0/gems/ruby_parser-3.12.0/lib/ruby22_parser.y +0 -2376
  179. data/bundle/ruby/2.5.0/gems/ruby_parser-3.12.0/lib/ruby23_parser.rb +0 -6818
  180. data/bundle/ruby/2.5.0/gems/ruby_parser-3.12.0/lib/ruby24_parser.rb +0 -6818
  181. data/bundle/ruby/2.5.0/gems/ruby_parser-3.12.0/lib/ruby25_parser.rb +0 -6818
  182. data/bundle/ruby/2.5.0/gems/sass-3.4.25/CODE_OF_CONDUCT.md +0 -10
  183. data/bundle/ruby/2.5.0/gems/sass-3.4.25/CONTRIBUTING.md +0 -148
  184. data/bundle/ruby/2.5.0/gems/sass-3.4.25/MIT-LICENSE +0 -20
  185. data/bundle/ruby/2.5.0/gems/sass-3.4.25/README.md +0 -227
  186. data/bundle/ruby/2.5.0/gems/sass-3.4.25/REVISION +0 -1
  187. data/bundle/ruby/2.5.0/gems/sass-3.4.25/VERSION +0 -1
  188. data/bundle/ruby/2.5.0/gems/sass-3.4.25/VERSION_DATE +0 -1
  189. data/bundle/ruby/2.5.0/gems/sass-3.4.25/VERSION_NAME +0 -1
  190. data/bundle/ruby/2.5.0/gems/sass-3.4.25/extra/sass-spec-ref.sh +0 -32
  191. data/bundle/ruby/2.5.0/gems/sass-3.4.25/extra/update_watch.rb +0 -13
  192. data/bundle/ruby/2.5.0/gems/sass-3.4.25/init.rb +0 -18
  193. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass.rb +0 -109
  194. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/cache_stores.rb +0 -15
  195. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/cache_stores/base.rb +0 -88
  196. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/cache_stores/chain.rb +0 -34
  197. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/cache_stores/filesystem.rb +0 -60
  198. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/cache_stores/memory.rb +0 -46
  199. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/cache_stores/null.rb +0 -25
  200. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/callbacks.rb +0 -67
  201. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/css.rb +0 -408
  202. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/deprecation.rb +0 -55
  203. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/engine.rb +0 -1226
  204. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/environment.rb +0 -215
  205. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/error.rb +0 -198
  206. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/exec.rb +0 -9
  207. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/exec/base.rb +0 -199
  208. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/exec/sass_convert.rb +0 -283
  209. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/exec/sass_scss.rb +0 -440
  210. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/features.rb +0 -47
  211. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/importers.rb +0 -23
  212. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/importers/base.rb +0 -182
  213. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/importers/deprecated_path.rb +0 -51
  214. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/importers/filesystem.rb +0 -219
  215. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/logger.rb +0 -17
  216. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/logger/base.rb +0 -36
  217. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/logger/delayed.rb +0 -50
  218. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/logger/log_level.rb +0 -45
  219. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/media.rb +0 -210
  220. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/plugin.rb +0 -134
  221. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/plugin/compiler.rb +0 -582
  222. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/plugin/configuration.rb +0 -134
  223. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/plugin/generic.rb +0 -15
  224. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/plugin/merb.rb +0 -48
  225. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/plugin/rack.rb +0 -60
  226. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/plugin/rails.rb +0 -47
  227. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/plugin/staleness_checker.rb +0 -199
  228. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/railtie.rb +0 -10
  229. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/repl.rb +0 -57
  230. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/root.rb +0 -7
  231. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/script.rb +0 -66
  232. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/script/css_lexer.rb +0 -33
  233. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/script/css_parser.rb +0 -33
  234. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/script/css_variable_warning.rb +0 -52
  235. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/script/functions.rb +0 -2693
  236. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/script/lexer.rb +0 -464
  237. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/script/parser.rb +0 -832
  238. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/script/tree.rb +0 -16
  239. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/script/tree/funcall.rb +0 -313
  240. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/script/tree/interpolation.rb +0 -223
  241. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/script/tree/list_literal.rb +0 -104
  242. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/script/tree/literal.rb +0 -49
  243. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/script/tree/map_literal.rb +0 -64
  244. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/script/tree/node.rb +0 -127
  245. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/script/tree/operation.rb +0 -156
  246. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/script/tree/selector.rb +0 -26
  247. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/script/tree/string_interpolation.rb +0 -125
  248. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/script/tree/unary_operation.rb +0 -69
  249. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/script/tree/variable.rb +0 -57
  250. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/script/value.rb +0 -11
  251. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/script/value/arg_list.rb +0 -36
  252. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/script/value/base.rb +0 -241
  253. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/script/value/bool.rb +0 -35
  254. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/script/value/color.rb +0 -698
  255. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/script/value/helpers.rb +0 -272
  256. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/script/value/list.rb +0 -113
  257. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/script/value/map.rb +0 -70
  258. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/script/value/null.rb +0 -44
  259. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/script/value/number.rb +0 -563
  260. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/script/value/string.rb +0 -138
  261. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/scss.rb +0 -14
  262. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/scss/css_parser.rb +0 -56
  263. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/scss/parser.rb +0 -1254
  264. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/scss/rx.rb +0 -140
  265. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/scss/static_parser.rb +0 -373
  266. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/selector.rb +0 -323
  267. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/selector/abstract_sequence.rb +0 -111
  268. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/selector/comma_sequence.rb +0 -191
  269. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/selector/pseudo.rb +0 -266
  270. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/selector/sequence.rb +0 -636
  271. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/selector/simple.rb +0 -117
  272. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/selector/simple_sequence.rb +0 -344
  273. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/shared.rb +0 -76
  274. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/source/map.rb +0 -213
  275. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/source/position.rb +0 -39
  276. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/source/range.rb +0 -41
  277. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/stack.rb +0 -120
  278. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/supports.rb +0 -225
  279. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/at_root_node.rb +0 -83
  280. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/charset_node.rb +0 -22
  281. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/comment_node.rb +0 -82
  282. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/content_node.rb +0 -9
  283. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/css_import_node.rb +0 -68
  284. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/debug_node.rb +0 -18
  285. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/directive_node.rb +0 -59
  286. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/each_node.rb +0 -24
  287. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/error_node.rb +0 -18
  288. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/extend_node.rb +0 -43
  289. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/for_node.rb +0 -36
  290. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/function_node.rb +0 -44
  291. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/if_node.rb +0 -52
  292. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/import_node.rb +0 -75
  293. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/keyframe_rule_node.rb +0 -15
  294. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/media_node.rb +0 -48
  295. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/mixin_def_node.rb +0 -38
  296. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/mixin_node.rb +0 -52
  297. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/node.rb +0 -240
  298. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/prop_node.rb +0 -170
  299. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/return_node.rb +0 -19
  300. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/root_node.rb +0 -44
  301. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/rule_node.rb +0 -155
  302. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/supports_node.rb +0 -38
  303. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/trace_node.rb +0 -33
  304. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/variable_node.rb +0 -36
  305. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/visitors/base.rb +0 -72
  306. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/visitors/check_nesting.rb +0 -173
  307. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/visitors/convert.rb +0 -351
  308. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/visitors/cssize.rb +0 -373
  309. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/visitors/deep_copy.rb +0 -107
  310. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/visitors/extend.rb +0 -70
  311. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/visitors/perform.rb +0 -564
  312. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/visitors/set_options.rb +0 -139
  313. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/visitors/to_css.rb +0 -409
  314. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/warn_node.rb +0 -18
  315. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/while_node.rb +0 -18
  316. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/util.rb +0 -1375
  317. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/util/cross_platform_random.rb +0 -19
  318. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/util/multibyte_string_scanner.rb +0 -155
  319. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/util/normalized_map.rb +0 -129
  320. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/util/ordered_hash.rb +0 -192
  321. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/util/subset_map.rb +0 -109
  322. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/util/test.rb +0 -9
  323. data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/version.rb +0 -124
  324. data/bundle/ruby/2.5.0/gems/sass-3.4.25/rails/init.rb +0 -1
  325. data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/CHANGELOG.md +0 -1
  326. data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/CONTRIBUTING.md +0 -38
  327. data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/Gemfile +0 -20
  328. data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/Guardfile +0 -8
  329. data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/LICENSE +0 -20
  330. data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/README.md +0 -349
  331. data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/Rakefile +0 -5
  332. data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/Vagrantfile +0 -96
  333. data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/lib/listen.rb +0 -54
  334. data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/lib/listen/adapter.rb +0 -327
  335. data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/lib/listen/adapters/bsd.rb +0 -75
  336. data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/lib/listen/adapters/darwin.rb +0 -48
  337. data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/lib/listen/adapters/linux.rb +0 -81
  338. data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/lib/listen/adapters/polling.rb +0 -58
  339. data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/lib/listen/adapters/windows.rb +0 -91
  340. data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/lib/listen/directory_record.rb +0 -406
  341. data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/lib/listen/listener.rb +0 -323
  342. data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/lib/listen/turnstile.rb +0 -32
  343. data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/lib/listen/version.rb +0 -3
  344. data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/listen.gemspec +0 -28
  345. data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/spec/listen/adapter_spec.rb +0 -149
  346. data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/spec/listen/adapters/bsd_spec.rb +0 -36
  347. data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/spec/listen/adapters/darwin_spec.rb +0 -37
  348. data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/spec/listen/adapters/linux_spec.rb +0 -47
  349. data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/spec/listen/adapters/polling_spec.rb +0 -68
  350. data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/spec/listen/adapters/windows_spec.rb +0 -30
  351. data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/spec/listen/directory_record_spec.rb +0 -1250
  352. data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/spec/listen/listener_spec.rb +0 -258
  353. data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/spec/listen/turnstile_spec.rb +0 -56
  354. data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/spec/listen_spec.rb +0 -67
  355. data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/spec/spec_helper.rb +0 -25
  356. data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/spec/support/adapter_helper.rb +0 -666
  357. data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/spec/support/directory_record_helper.rb +0 -57
  358. data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/spec/support/fixtures_helper.rb +0 -29
  359. data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/spec/support/listeners_helper.rb +0 -179
  360. data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/spec/support/platform_helper.rb +0 -15
  361. data/bundle/ruby/2.5.0/gems/temple-0.8.0/lib/temple/version.rb +0 -3
  362. data/bundle/ruby/2.5.0/gems/unicode-display_width-1.4.1/data/display_width.marshal.gz +0 -0
@@ -1,36 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Listen::Adapters::BSD do
4
- if bsd?
5
- if Listen::Adapters::BSD.usable?
6
- it "is usable on BSD" do
7
- described_class.should be_usable
8
- end
9
-
10
- it_should_behave_like 'a filesystem adapter'
11
- it_should_behave_like 'an adapter that call properly listener#on_change'
12
- else
13
- it "isn't usable on BSD with #{RbConfig::CONFIG['RUBY_INSTALL_NAME']}" do
14
- described_class.should_not be_usable
15
- end
16
- end
17
- end
18
-
19
- if linux?
20
- it "isn't usable on Linux" do
21
- described_class.should_not be_usable
22
- end
23
- end
24
-
25
- if mac?
26
- it "isn't usable on Mac OS X" do
27
- described_class.should_not be_usable
28
- end
29
- end
30
-
31
- if windows?
32
- it "isn't usable on Windows" do
33
- described_class.should_not be_usable
34
- end
35
- end
36
- end
@@ -1,37 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Listen::Adapters::Darwin do
4
- if mac?
5
- if Listen::Adapters::Darwin.usable?
6
- it "is usable on Mac OS X >= 10.6" do
7
- described_class.should be_usable
8
- end
9
-
10
- it_should_behave_like 'a filesystem adapter'
11
- it_should_behave_like 'an adapter that call properly listener#on_change'
12
- else
13
- it "isn't usable on Mac OS X with #{RbConfig::CONFIG['RUBY_INSTALL_NAME']}" do
14
- described_class.should_not be_usable
15
- end
16
- end
17
-
18
- end
19
-
20
- if windows?
21
- it "isn't usable on Windows" do
22
- described_class.should_not be_usable
23
- end
24
- end
25
-
26
- if linux?
27
- it "isn't usable on Linux" do
28
- described_class.should_not be_usable
29
- end
30
- end
31
-
32
- if bsd?
33
- it "isn't usable on BSD" do
34
- described_class.should_not be_usable
35
- end
36
- end
37
- end
@@ -1,47 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Listen::Adapters::Linux do
4
- if linux?
5
- if Listen::Adapters::Linux.usable?
6
- it "is usable on Linux" do
7
- described_class.should be_usable
8
- end
9
-
10
- it_should_behave_like 'a filesystem adapter'
11
- it_should_behave_like 'an adapter that call properly listener#on_change'
12
-
13
- describe '#initialize' do
14
- context 'when the inotify limit for watched files is not enough' do
15
- before { INotify::Notifier.any_instance.should_receive(:watch).and_raise(Errno::ENOSPC) }
16
-
17
- it 'fails gracefully' do
18
- described_class.any_instance.should_receive(:abort).with(described_class::INOTIFY_LIMIT_MESSAGE)
19
- described_class.new(File.dirname(__FILE__))
20
- end
21
- end
22
- end
23
- else
24
- it "isn't usable on Linux with #{RbConfig::CONFIG['RUBY_INSTALL_NAME']}" do
25
- described_class.should_not be_usable
26
- end
27
- end
28
- end
29
-
30
- if bsd?
31
- it "isn't usable on BSD" do
32
- described_class.should_not be_usable
33
- end
34
- end
35
-
36
- if mac?
37
- it "isn't usable on Mac OS X" do
38
- described_class.should_not be_usable
39
- end
40
- end
41
-
42
- if windows?
43
- it "isn't usable on Windows" do
44
- described_class.should_not be_usable
45
- end
46
- end
47
- end
@@ -1,68 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Listen::Adapters::Polling do
4
- subject { described_class.new('dir') }
5
-
6
- it_should_behave_like 'a filesystem adapter'
7
-
8
- describe '#initialize' do
9
- it 'sets the latency to the default polling one' do
10
- subject.latency.should eq Listen::Adapters::DEFAULT_POLLING_LATENCY
11
- end
12
- end
13
-
14
- describe '#poll' do
15
- let(:listener) { double(Listen::Listener) }
16
- let(:callback) { lambda { |changed_directories, options| @called = true; listener.on_change(changed_directories, options) } }
17
-
18
- after { subject.stop }
19
-
20
- context 'with one directory to watch' do
21
- subject { Listen::Adapters::Polling.new('dir', {}, &callback) }
22
-
23
- it 'calls listener.on_change' do
24
- listener.should_receive(:on_change).at_least(1).times.with(['dir'], :recursive => true)
25
- subject.start
26
- subject.wait_for_callback
27
- end
28
-
29
- it 'calls listener.on_change continuously' do
30
- subject.latency = 0.001
31
- listener.should_receive(:on_change).at_least(10).times.with(['dir'], :recursive => true)
32
- subject.start
33
- 10.times { subject.wait_for_callback }
34
- end
35
-
36
- it "doesn't call listener.on_change if paused" do
37
- subject.paused = true
38
- subject.start
39
- subject.wait_for_callback
40
- @called.should be_nil
41
- end
42
- end
43
-
44
- context 'with multiple directories to watch' do
45
- subject { Listen::Adapters::Polling.new(%w{dir1 dir2}, {}, &callback) }
46
-
47
- it 'calls listener.on_change' do
48
- listener.should_receive(:on_change).at_least(1).times.with(%w{dir1 dir2}, :recursive => true)
49
- subject.start
50
- subject.wait_for_callback
51
- end
52
-
53
- it 'calls listener.on_change continuously' do
54
- subject.latency = 0.001
55
- listener.should_receive(:on_change).at_least(10).times.with(%w{dir1 dir2}, :recursive => true)
56
- subject.start
57
- 10.times { subject.wait_for_callback }
58
- end
59
-
60
- it "doesn't call listener.on_change if paused" do
61
- subject.paused = true
62
- subject.start
63
- subject.wait_for_callback
64
- @called.should be_nil
65
- end
66
- end
67
- end
68
- end
@@ -1,30 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Listen::Adapters::Windows do
4
- if windows? && Listen::Adapters::Windows.usable?
5
- it "is usable on Windows" do
6
- described_class.should be_usable
7
- end
8
-
9
- it_should_behave_like 'a filesystem adapter'
10
- it_should_behave_like 'an adapter that call properly listener#on_change'
11
- end
12
-
13
- if mac?
14
- it "isn't usable on Mac OS X" do
15
- described_class.should_not be_usable
16
- end
17
- end
18
-
19
- if bsd?
20
- it "isn't usable on BSD" do
21
- described_class.should_not be_usable
22
- end
23
- end
24
-
25
- if linux?
26
- it "isn't usable on Linux" do
27
- described_class.should_not be_usable
28
- end
29
- end
30
- end
@@ -1,1250 +0,0 @@
1
- # encoding: UTF-8
2
- require 'spec_helper'
3
-
4
- describe Listen::DirectoryRecord do
5
- let(:base_directory) { File.dirname(__FILE__) }
6
-
7
- subject { described_class.new(base_directory) }
8
-
9
- describe '.generate_default_ignoring_patterns' do
10
- it 'creates regexp patterns from the default ignored directories and extensions' do
11
- described_class.generate_default_ignoring_patterns.should include(
12
- %r{^(?:\.rbx|\.bundle|\.git|\.svn|bundle|log|tmp|vendor)/},
13
- %r{(?:\.DS_Store)$}
14
- )
15
- end
16
-
17
- it 'memoizes the generated results' do
18
- described_class.generate_default_ignoring_patterns.should equal described_class.generate_default_ignoring_patterns
19
- end
20
- end
21
-
22
- describe '#initialize' do
23
- it 'sets the base directory' do
24
- subject.directory.should eq base_directory
25
- end
26
-
27
- it 'sets the base directory expanded' do
28
- cd File.dirname(base_directory)
29
- subject = described_class.new(File.basename(base_directory))
30
- subject.directory.should eq base_directory
31
- end
32
-
33
- it 'sets the default ignoring patterns' do
34
- subject.ignoring_patterns.should =~ described_class.generate_default_ignoring_patterns
35
- end
36
-
37
- it 'sets the default filtering patterns' do
38
- subject.filtering_patterns.should eq []
39
- end
40
-
41
- it 'raises an error when the passed path does not exist' do
42
- expect { described_class.new('no way I exist') }.to raise_error(ArgumentError)
43
- end
44
-
45
- it 'raises an error when the passed path is not a directory' do
46
- expect { described_class.new(__FILE__) }.to raise_error(ArgumentError)
47
- end
48
- end
49
-
50
- describe '#ignore' do
51
- it 'adds the passed paths to the list of ignored paths in the record' do
52
- subject.ignore(%r{^\.old/}, %r{\.pid$}, nil)
53
- subject.ignoring_patterns.should include(%r{^\.old/}, %r{\.pid$})
54
- subject.ignoring_patterns.should_not include(nil)
55
- end
56
- end
57
-
58
- describe '#ignore!' do
59
- it 'replace the ignored paths in the record' do
60
- subject.ignore!(%r{^\.old/}, %r{\.pid$}, nil)
61
- subject.ignoring_patterns.should eq [%r{^\.old/}, %r{\.pid$}]
62
- end
63
- end
64
-
65
- describe '#filter' do
66
- it 'adds the passed regexps to the list of filters that determine the stored paths' do
67
- subject.filter(%r{\.(?:jpe?g|gif|png)}, %r{\.(?:mp3|ogg|a3c)}, nil)
68
- subject.filtering_patterns.should include(%r{\.(?:jpe?g|gif|png)}, %r{\.(?:mp3|ogg|a3c)})
69
- subject.filtering_patterns.should_not include(nil)
70
- end
71
- end
72
-
73
- describe '#filter!' do
74
- it 'replaces the passed regexps in the list of filters that determine the stored paths' do
75
- subject.filter!(%r{\.(?:jpe?g|gif|png)}, %r{\.(?:mp3|ogg|a3c)})
76
- subject.filtering_patterns.should have(2).regexps
77
- subject.filtering_patterns.should =~ [%r{\.(?:mp3|ogg|a3c)}, %r{\.(?:jpe?g|gif|png)}]
78
- end
79
- end
80
-
81
- describe '#ignored?' do
82
- before { subject.stub(:relative_to_base) { |path| path } }
83
-
84
- it 'tests paths relative to the base directory' do
85
- subject.should_receive(:relative_to_base).with('file.txt')
86
- subject.ignored?('file.txt')
87
- end
88
-
89
- it 'returns true when the passed path is a default ignored path' do
90
- subject.ignored?('tmp/some_process.pid').should be_true
91
- subject.ignored?('dir/.DS_Store').should be_true
92
- subject.ignored?('.git/config').should be_true
93
- end
94
-
95
- it 'returns false when the passed path is not a default ignored path' do
96
- subject.ignored?('nested/tmp/some_process.pid').should be_false
97
- subject.ignored?('nested/.git').should be_false
98
- subject.ignored?('dir/.DS_Store/file').should be_false
99
- subject.ignored?('file.git').should be_false
100
- end
101
-
102
- it 'returns true when the passed path is ignored' do
103
- subject.ignore(%r{\.pid$})
104
- subject.ignored?('dir/some_process.pid').should be_true
105
- end
106
-
107
- it 'returns false when the passed path is not ignored' do
108
- subject.ignore(%r{\.pid$})
109
- subject.ignored?('dir/some_file.txt').should be_false
110
- end
111
- end
112
-
113
- describe '#filtered?' do
114
- before { subject.stub(:relative_to_base) { |path| path } }
115
-
116
- context 'when no filtering patterns are set' do
117
- it 'returns true for any path' do
118
- subject.filtered?('file.txt').should be_true
119
- end
120
- end
121
-
122
- context 'when filtering patterns are set' do
123
- before { subject.filter(%r{\.(?:jpe?g|gif|png)}) }
124
-
125
- it 'tests paths relative to the base directory' do
126
- subject.should_receive(:relative_to_base).with('file.txt')
127
- subject.filtered?('file.txt')
128
- end
129
-
130
- it 'returns true when the passed path is filtered' do
131
- subject.filter(%r{\.(?:jpe?g|gif|png)})
132
- subject.filtered?('dir/picture.jpeg').should be_true
133
- end
134
-
135
- it 'returns false when the passed path is not filtered' do
136
- subject.filter(%r{\.(?:jpe?g|gif|png)})
137
- subject.filtered?('dir/song.mp3').should be_false
138
- end
139
- end
140
- end
141
-
142
- describe '#build' do
143
- it 'stores all files' do
144
- fixtures do |path|
145
- touch 'file.rb'
146
- mkdir 'a_directory'
147
- touch 'a_directory/file.txt'
148
-
149
- record = described_class.new(path)
150
- record.build
151
-
152
- record.paths[path]['file.rb'].type.should eq 'File'
153
- record.paths[path]['a_directory'].type.should eq 'Dir'
154
- record.paths["#{path}/a_directory"]['file.txt'].type.should eq 'File'
155
- end
156
- end
157
-
158
- context 'with ignored path set' do
159
- it 'does not store ignored directory or its childs' do
160
- fixtures do |path|
161
- mkdir 'ignored_directory'
162
- mkdir 'ignored_directory/child_directory'
163
- touch 'ignored_directory/file.txt'
164
-
165
- record = described_class.new(path)
166
- record.ignore %r{^ignored_directory/}
167
- record.build
168
-
169
- record.paths[path]['/a_ignored_directory'].should be_nil
170
- record.paths["#{path}/a_ignored_directory"]['child_directory'].should be_nil
171
- record.paths["#{path}/a_ignored_directory"]['file.txt'].should be_nil
172
- end
173
- end
174
-
175
- it 'does not store ignored files' do
176
- fixtures do |path|
177
- touch 'ignored_file.rb'
178
-
179
- record = described_class.new(path)
180
- record.ignore %r{^ignored_file.rb$}
181
- record.build
182
-
183
- record.paths[path]['ignored_file.rb'].should be_nil
184
- end
185
- end
186
- end
187
-
188
- context 'with filters set' do
189
- it 'only stores filterd files' do
190
- fixtures do |path|
191
- touch 'file.rb'
192
- touch 'file.zip'
193
- mkdir 'a_directory'
194
- touch 'a_directory/file.txt'
195
- touch 'a_directory/file.rb'
196
-
197
- record = described_class.new(path)
198
- record.filter(/\.txt$/, /.*\.zip/)
199
- record.build
200
-
201
- record.paths[path]['file.rb'].should be_nil
202
- record.paths[path]['file.zip'].type.should eq 'File'
203
- record.paths[path]['a_directory'].type.should eq 'Dir'
204
- record.paths["#{path}/a_directory"]['file.txt'].type.should eq 'File'
205
- record.paths["#{path}/a_directory"]['file.rb'].should be_nil
206
- end
207
- end
208
- end
209
- end
210
-
211
- describe '#relative_to_base' do
212
- it 'removes the path of the base-directory from the passed path' do
213
- path = 'dir/to/app/file.rb'
214
- subject.relative_to_base(File.join(base_directory, path)).should eq path
215
- end
216
-
217
- it 'returns nil when the passed path is not inside the base-directory' do
218
- subject.relative_to_base('/tmp/some_random_path').should be_nil
219
- end
220
-
221
- it 'works with non UTF-8 paths' do
222
- path = "tmp/\xE4\xE4"
223
- subject.relative_to_base(File.join(base_directory, path))
224
- end
225
-
226
- context 'when there are utf-8 chars in base directory' do
227
- before do
228
- fixtures do |path|
229
- mkdir '目录'
230
- @dir = described_class.new(path + '/目录')
231
- @dir.build
232
- end
233
- end
234
-
235
- it 'works' do
236
- path = File.join @dir.directory, 'tmp/file.rb'
237
- @dir.relative_to_base path
238
- end
239
- end
240
-
241
- context 'when containing regexp characters in the base directory' do
242
- before do
243
- fixtures do |path|
244
- mkdir 'a_directory$'
245
- @dir = described_class.new(path + '/a_directory$')
246
- @dir.build
247
- end
248
- end
249
-
250
- it 'removes the path of the base-directory from the passed path' do
251
- path = 'dir/to/app/file.rb'
252
- @dir.relative_to_base(File.join(@dir.directory, path)).should eq path
253
- end
254
-
255
- it 'returns nil when the passed path is not inside the base-directory' do
256
- @dir.relative_to_base('/tmp/some_random_path').should be_nil
257
- end
258
- end
259
- end
260
-
261
- describe '#fetch_changes' do
262
- context 'with single file changes' do
263
- context 'when a file is created' do
264
- it 'detects the added file' do
265
- fixtures do |path|
266
- modified, added, removed = changes(path) do
267
- touch 'new_file.rb'
268
- end
269
-
270
- added.should =~ %w(new_file.rb)
271
- modified.should be_empty
272
- removed.should be_empty
273
- end
274
- end
275
-
276
- it 'stores the added file in the record' do
277
- fixtures do |path|
278
- changes(path) do
279
- @record.paths.should be_empty
280
-
281
- touch 'new_file.rb'
282
- end
283
-
284
- @record.paths[path]['new_file.rb'].should_not be_nil
285
- end
286
- end
287
-
288
- context 'given a new created directory' do
289
- it 'detects the added file' do
290
- fixtures do |path|
291
- modified, added, removed = changes(path) do
292
- mkdir 'a_directory'
293
- touch 'a_directory/new_file.rb'
294
- end
295
-
296
- added.should =~ %w(a_directory/new_file.rb)
297
- modified.should be_empty
298
- removed.should be_empty
299
- end
300
- end
301
-
302
- it 'stores the added directory and file in the record' do
303
- fixtures do |path|
304
- changes(path) do
305
- @record.paths.should be_empty
306
-
307
- mkdir 'a_directory'
308
- touch 'a_directory/new_file.rb'
309
- end
310
-
311
- @record.paths[path]['a_directory'].should_not be_nil
312
- @record.paths["#{path}/a_directory"]['new_file.rb'].should_not be_nil
313
- end
314
- end
315
- end
316
-
317
- context 'given an existing directory' do
318
- context 'with recursive option set to true' do
319
- it 'detects the added file' do
320
- fixtures do |path|
321
- mkdir 'a_directory'
322
-
323
- modified, added, removed = changes(path, :recursive => true) do
324
- touch 'a_directory/new_file.rb'
325
- end
326
-
327
- added.should =~ %w(a_directory/new_file.rb)
328
- modified.should be_empty
329
- removed.should be_empty
330
- end
331
- end
332
-
333
- context 'with an ignored directory' do
334
- it "doesn't detect the added file" do
335
- fixtures do |path|
336
- mkdir 'ignored_directory'
337
-
338
- modified, added, removed = changes(path, :ignore => %r{^ignored_directory/}, :recursive => true) do
339
- touch 'ignored_directory/new_file.rb'
340
- end
341
-
342
- added.should be_empty
343
- modified.should be_empty
344
- removed.should be_empty
345
- end
346
- end
347
-
348
- it "doesn't detect the added file when it's asked to fetch the changes of the ignored directory"do
349
- fixtures do |path|
350
- mkdir 'ignored_directory'
351
-
352
- modified, added, removed = changes(path, :paths => ["#{path}/ignored_directory"], :ignore => %r{^ignored_directory/}, :recursive => true) do
353
- touch 'ignored_directory/new_file.rb'
354
- end
355
-
356
- added.should be_empty
357
- modified.should be_empty
358
- removed.should be_empty
359
- end
360
- end
361
- end
362
- end
363
-
364
- context 'with recursive option set to false' do
365
- it "doesn't detect deeply-nested added files" do
366
- fixtures do |path|
367
- mkdir 'a_directory'
368
-
369
- modified, added, removed = changes(path, :recursive => false) do
370
- touch 'a_directory/new_file.rb'
371
- end
372
-
373
- added.should be_empty
374
- modified.should be_empty
375
- removed.should be_empty
376
- end
377
- end
378
- end
379
- end
380
-
381
- context 'given a directory with subdirectories' do
382
- it 'detects the added file' do
383
- fixtures do |path|
384
- mkdir_p 'a_directory/subdirectory'
385
-
386
- modified, added, removed = changes(path, :recursive => true) do
387
- touch 'a_directory/subdirectory/new_file.rb'
388
- end
389
-
390
- added.should =~ %w(a_directory/subdirectory/new_file.rb)
391
- modified.should be_empty
392
- removed.should be_empty
393
- end
394
- end
395
-
396
- context 'with an ignored directory' do
397
- it "doesn't detect added files in neither the directory nor the subdirectory" do
398
- fixtures do |path|
399
- mkdir_p 'ignored_directory/subdirectory'
400
-
401
- modified, added, removed = changes(path, :ignore => %r{^ignored_directory/}, :recursive => true) do
402
- touch 'ignored_directory/new_file.rb'
403
- touch 'ignored_directory/subdirectory/new_file.rb'
404
- end
405
-
406
- added.should be_empty
407
- modified.should be_empty
408
- removed.should be_empty
409
- end
410
- end
411
- end
412
- end
413
- end
414
-
415
- context 'when a file is modified' do
416
- it 'detects the modified file' do
417
- fixtures do |path|
418
- touch 'existing_file.txt'
419
-
420
- modified, added, removed = changes(path) do
421
- small_time_difference
422
- touch 'existing_file.txt'
423
- end
424
-
425
- added.should be_empty
426
- modified.should =~ %w(existing_file.txt)
427
- removed.should be_empty
428
- end
429
- end
430
-
431
- context 'during the same second at which we are checking for changes' do
432
- before { ensure_same_second }
433
-
434
- # The following test can only be run on systems that report
435
- # modification times in milliseconds.
436
- it 'always detects the modified file the first time', :if => described_class::HIGH_PRECISION_SUPPORTED do
437
- fixtures do |path|
438
- touch 'existing_file.txt'
439
-
440
- modified, added, removed = changes(path) do
441
- small_time_difference
442
- touch 'existing_file.txt'
443
- end
444
-
445
- added.should be_empty
446
- modified.should =~ %w(existing_file.txt)
447
- removed.should be_empty
448
- end
449
- end
450
-
451
- context 'when a file is created and then checked for modifications at the same second - #27' do
452
- # This issue was the result of checking a file for content changes when
453
- # the mtime and the checking time are the same. In this case there
454
- # is no checksum saved, so the file was reported as being changed.
455
- it 'does not report any changes' do
456
- fixtures do |path|
457
- touch 'a_file.rb'
458
-
459
- modified, added, removed = changes(path)
460
-
461
- added.should be_empty
462
- modified.should be_empty
463
- removed.should be_empty
464
- end
465
- end
466
- end
467
-
468
- it 'detects the modified file the second time if the content have changed' do
469
- fixtures do |path|
470
- touch 'existing_file.txt'
471
-
472
- # Set sha1 path checksum
473
- changes(path) do
474
- touch 'existing_file.txt'
475
- end
476
-
477
- changes(path) do
478
- small_time_difference
479
- touch 'existing_file.txt'
480
- end
481
-
482
- modified, added, removed = changes(path, :use_last_record => true) do
483
- open('existing_file.txt', 'w') { |f| f.write('foo') }
484
- end
485
-
486
- added.should be_empty
487
- modified.should =~ %w(existing_file.txt)
488
- removed.should be_empty
489
- end
490
- end
491
-
492
- it "doesn't checksum the contents of local sockets (#85)", :unless => windows? do
493
- require 'socket'
494
- fixtures do |path|
495
- Digest::SHA1.should_not_receive(:file)
496
- socket_path = File.join(path, "unix_domain_socket")
497
- server = UNIXServer.new(socket_path)
498
- modified, added, removed = changes(path) do
499
- t = Thread.new do
500
- client = UNIXSocket.new(socket_path)
501
- client.write("foo")
502
- end
503
- t.join
504
- end
505
- added.should be_empty
506
- modified.should be_empty
507
- removed.should be_empty
508
- end
509
- end
510
-
511
- it "doesn't detects the modified file the second time if just touched - #62", :unless => described_class::HIGH_PRECISION_SUPPORTED do
512
- fixtures do |path|
513
- touch 'existing_file.txt'
514
-
515
- # Set sha1 path checksum
516
- changes(path) do
517
- touch 'existing_file.txt'
518
- end
519
-
520
- changes(path, :use_last_record => true) do
521
- small_time_difference
522
- open('existing_file.txt', 'w') { |f| f.write('foo') }
523
- end
524
-
525
- modified, added, removed = changes(path, :use_last_record => true) do
526
- touch 'existing_file.txt'
527
- end
528
-
529
- added.should be_empty
530
- modified.should be_empty
531
- removed.should be_empty
532
- end
533
- end
534
-
535
- it "adds the path in the paths checksums if just touched - #62" do
536
- fixtures do |path|
537
- touch 'existing_file.txt'
538
-
539
- changes(path) do
540
- small_time_difference
541
- touch 'existing_file.txt'
542
- end
543
-
544
- @record.sha1_checksums["#{path}/existing_file.txt"].should_not be_nil
545
- end
546
- end
547
-
548
- it "deletes the path from the paths checksums" do
549
- fixtures do |path|
550
- touch 'unnecessary.txt'
551
-
552
- changes(path) do
553
- @record.sha1_checksums["#{path}/unnecessary.txt"] = 'foo'
554
-
555
- rm 'unnecessary.txt'
556
- end
557
-
558
- @record.sha1_checksums["#{path}/unnecessary.txt"].should be_nil
559
- end
560
- end
561
- end
562
-
563
- context 'given a hidden file' do
564
- it 'detects the modified file' do
565
- fixtures do |path|
566
- touch '.hidden'
567
-
568
- modified, added, removed = changes(path) do
569
- small_time_difference
570
- touch '.hidden'
571
- end
572
-
573
- added.should be_empty
574
- modified.should =~ %w(.hidden)
575
- removed.should be_empty
576
- end
577
- end
578
- end
579
-
580
- context 'given a file mode change' do
581
- it 'does not detect the mode change' do
582
- fixtures do |path|
583
- touch 'run.rb'
584
-
585
- modified, added, removed = changes(path) do
586
- small_time_difference
587
- chmod 0777, 'run.rb'
588
- end
589
-
590
- added.should be_empty
591
- modified.should be_empty
592
- removed.should be_empty
593
- end
594
- end
595
- end
596
-
597
- context 'given an existing directory' do
598
- context 'with recursive option set to true' do
599
- it 'detects the modified file' do
600
- fixtures do |path|
601
- mkdir 'a_directory'
602
- touch 'a_directory/existing_file.txt'
603
-
604
- modified, added, removed = changes(path, :recursive => true) do
605
- small_time_difference
606
- touch 'a_directory/existing_file.txt'
607
- end
608
-
609
- added.should be_empty
610
- modified.should =~ %w(a_directory/existing_file.txt)
611
- removed.should be_empty
612
- end
613
- end
614
- end
615
-
616
- context 'with recursive option set to false' do
617
- it "doesn't detects the modified file" do
618
- fixtures do |path|
619
- mkdir 'a_directory'
620
- touch 'a_directory/existing_file.txt'
621
-
622
- modified, added, removed = changes(path, :recursive => false) do
623
- small_time_difference
624
- touch 'a_directory/existing_file.txt'
625
- end
626
-
627
- added.should be_empty
628
- modified.should be_empty
629
- removed.should be_empty
630
- end
631
- end
632
- end
633
- end
634
-
635
- context 'given a directory with subdirectories' do
636
- it 'detects the modified file' do
637
- fixtures do |path|
638
- mkdir_p 'a_directory/subdirectory'
639
- touch 'a_directory/subdirectory/existing_file.txt'
640
-
641
- modified, added, removed = changes(path, :recursive => true) do
642
- small_time_difference
643
- touch 'a_directory/subdirectory/existing_file.txt'
644
- end
645
-
646
- added.should be_empty
647
- modified.should =~ %w(a_directory/subdirectory/existing_file.txt)
648
- removed.should be_empty
649
- end
650
- end
651
-
652
- context 'with an ignored subdirectory' do
653
- it "doesn't detect the modified files in neither the directory nor the subdirectory" do
654
- fixtures do |path|
655
- mkdir_p 'ignored_directory/subdirectory'
656
- touch 'ignored_directory/existing_file.txt'
657
- touch 'ignored_directory/subdirectory/existing_file.txt'
658
-
659
- modified, added, removed = changes(path, :ignore => %r{^ignored_directory/}, :recursive => true) do
660
- touch 'ignored_directory/existing_file.txt'
661
- touch 'ignored_directory/subdirectory/existing_file.txt'
662
- end
663
-
664
- added.should be_empty
665
- modified.should be_empty
666
- removed.should be_empty
667
- end
668
- end
669
- end
670
- end
671
- end
672
-
673
- context 'when a file is moved' do
674
- it 'detects the file movement' do
675
- fixtures do |path|
676
- touch 'move_me.txt'
677
-
678
- modified, added, removed = changes(path) do
679
- mv 'move_me.txt', 'new_name.txt'
680
- end
681
-
682
- added.should =~ %w(new_name.txt)
683
- modified.should be_empty
684
- removed.should =~ %w(move_me.txt)
685
- end
686
- end
687
-
688
- context 'given an existing directory' do
689
- context 'with recursive option set to true' do
690
- it 'detects the file movement into the directory' do
691
- fixtures do |path|
692
- mkdir 'a_directory'
693
- touch 'move_me.txt'
694
-
695
- modified, added, removed = changes(path, :recursive => true) do
696
- mv 'move_me.txt', 'a_directory/move_me.txt'
697
- end
698
-
699
- added.should =~ %w(a_directory/move_me.txt)
700
- modified.should be_empty
701
- removed.should =~ %w(move_me.txt)
702
- end
703
- end
704
-
705
- it 'detects a file movement out of the directory' do
706
- fixtures do |path|
707
- mkdir 'a_directory'
708
- touch 'a_directory/move_me.txt'
709
-
710
- modified, added, removed = changes(path, :recursive => true) do
711
- mv 'a_directory/move_me.txt', 'i_am_here.txt'
712
- end
713
-
714
- added.should =~ %w(i_am_here.txt)
715
- modified.should be_empty
716
- removed.should =~ %w(a_directory/move_me.txt)
717
- end
718
- end
719
-
720
- it 'detects a file movement between two directories' do
721
- fixtures do |path|
722
- mkdir 'from_directory'
723
- touch 'from_directory/move_me.txt'
724
- mkdir 'to_directory'
725
-
726
- modified, added, removed = changes(path, :recursive => true) do
727
- mv 'from_directory/move_me.txt', 'to_directory/move_me.txt'
728
- end
729
-
730
- added.should =~ %w(to_directory/move_me.txt)
731
- modified.should be_empty
732
- removed.should =~ %w(from_directory/move_me.txt)
733
- end
734
- end
735
- end
736
-
737
- context 'with recursive option set to false' do
738
- it "doesn't detect the file movement into the directory" do
739
- fixtures do |path|
740
- mkdir 'a_directory'
741
- touch 'move_me.txt'
742
-
743
- modified, added, removed = changes(path, :recursive => false) do
744
- mv 'move_me.txt', 'a_directory/move_me.txt'
745
- end
746
-
747
- added.should be_empty
748
- modified.should be_empty
749
- removed.should =~ %w(move_me.txt)
750
- end
751
- end
752
-
753
- it "doesn't detect a file movement out of the directory" do
754
- fixtures do |path|
755
- mkdir 'a_directory'
756
- touch 'a_directory/move_me.txt'
757
-
758
- modified, added, removed = changes(path, :recursive => false) do
759
- mv 'a_directory/move_me.txt', 'i_am_here.txt'
760
- end
761
-
762
- added.should =~ %w(i_am_here.txt)
763
- modified.should be_empty
764
- removed.should be_empty
765
- end
766
- end
767
-
768
- it "doesn't detect a file movement between two directories" do
769
- fixtures do |path|
770
- mkdir 'from_directory'
771
- touch 'from_directory/move_me.txt'
772
- mkdir 'to_directory'
773
-
774
- modified, added, removed = changes(path, :recursive => false) do
775
- mv 'from_directory/move_me.txt', 'to_directory/move_me.txt'
776
- end
777
-
778
- added.should be_empty
779
- modified.should be_empty
780
- removed.should be_empty
781
- end
782
- end
783
-
784
- context 'given a directory with subdirectories' do
785
- it 'detects a file movement between two subdirectories' do
786
- fixtures do |path|
787
- mkdir_p 'a_directory/subdirectory'
788
- mkdir_p 'b_directory/subdirectory'
789
- touch 'a_directory/subdirectory/move_me.txt'
790
-
791
- modified, added, removed = changes(path, :recursive => true) do
792
- mv 'a_directory/subdirectory/move_me.txt', 'b_directory/subdirectory'
793
- end
794
-
795
- added.should =~ %w(b_directory/subdirectory/move_me.txt)
796
- modified.should be_empty
797
- removed.should =~ %w(a_directory/subdirectory/move_me.txt)
798
- end
799
- end
800
-
801
- context 'with an ignored subdirectory' do
802
- it "doesn't detect the file movement between subdirectories" do
803
- fixtures do |path|
804
- mkdir_p 'a_ignored_directory/subdirectory'
805
- mkdir_p 'b_ignored_directory/subdirectory'
806
- touch 'a_ignored_directory/subdirectory/move_me.txt'
807
-
808
- modified, added, removed = changes(path, :ignore => %r{^(?:a|b)_ignored_directory/}, :recursive => true) do
809
- mv 'a_ignored_directory/subdirectory/move_me.txt', 'b_ignored_directory/subdirectory'
810
- end
811
-
812
- added.should be_empty
813
- modified.should be_empty
814
- removed.should be_empty
815
- end
816
- end
817
- end
818
- end
819
-
820
- context 'with all paths passed as params' do
821
- it 'detects the file movement into the directory' do
822
- fixtures do |path|
823
- mkdir 'a_directory'
824
- touch 'move_me.txt'
825
-
826
- modified, added, removed = changes(path, :recursive => false, :paths => [path, "#{path}/a_directory"]) do
827
- mv 'move_me.txt', 'a_directory/move_me.txt'
828
- end
829
-
830
- added.should =~ %w(a_directory/move_me.txt)
831
- modified.should be_empty
832
- removed.should =~ %w(move_me.txt)
833
- end
834
- end
835
-
836
- it 'detects a file moved outside of a directory' do
837
- fixtures do |path|
838
- mkdir 'a_directory'
839
- touch 'a_directory/move_me.txt'
840
-
841
- modified, added, removed = changes(path, :recursive => false, :paths => [path, "#{path}/a_directory"]) do
842
- mv 'a_directory/move_me.txt', 'i_am_here.txt'
843
- end
844
-
845
- added.should =~ %w(i_am_here.txt)
846
- modified.should be_empty
847
- removed.should =~ %w(a_directory/move_me.txt)
848
- end
849
- end
850
-
851
- it 'detects a file movement between two directories' do
852
- fixtures do |path|
853
- mkdir 'from_directory'
854
- touch 'from_directory/move_me.txt'
855
- mkdir 'to_directory'
856
-
857
- modified, added, removed = changes(path, :recursive => false, :paths => [path, "#{path}/from_directory", "#{path}/to_directory"]) do
858
- mv 'from_directory/move_me.txt', 'to_directory/move_me.txt'
859
- end
860
-
861
- added.should =~ %w(to_directory/move_me.txt)
862
- modified.should be_empty
863
- removed.should =~ %w(from_directory/move_me.txt)
864
- end
865
- end
866
- end
867
- end
868
- end
869
- end
870
-
871
- context 'when a file is deleted' do
872
- it 'detects the file removal' do
873
- fixtures do |path|
874
- touch 'unnecessary.txt'
875
-
876
- modified, added, removed = changes(path) do
877
- rm 'unnecessary.txt'
878
- end
879
-
880
- added.should be_empty
881
- modified.should be_empty
882
- removed.should =~ %w(unnecessary.txt)
883
- end
884
- end
885
-
886
- it "deletes the file from the record" do
887
- fixtures do |path|
888
- touch 'unnecessary.txt'
889
-
890
- changes(path) do
891
- @record.paths[path]['unnecessary.txt'].should_not be_nil
892
-
893
- rm 'unnecessary.txt'
894
- end
895
-
896
- @record.paths[path]['unnecessary.txt'].should be_nil
897
- end
898
- end
899
-
900
- it "deletes the path from the paths checksums" do
901
- fixtures do |path|
902
- touch 'unnecessary.txt'
903
-
904
- changes(path) do
905
- @record.sha1_checksums["#{path}/unnecessary.txt"] = 'foo'
906
-
907
- rm 'unnecessary.txt'
908
- end
909
-
910
- @record.sha1_checksums["#{path}/unnecessary.txt"].should be_nil
911
- end
912
- end
913
-
914
- context 'given an existing directory' do
915
- context 'with recursive option set to true' do
916
- it 'detects the file removal' do
917
- fixtures do |path|
918
- mkdir 'a_directory'
919
- touch 'a_directory/do_not_use.rb'
920
-
921
- modified, added, removed = changes(path, :recursive => true) do
922
- rm 'a_directory/do_not_use.rb'
923
- end
924
-
925
- added.should be_empty
926
- modified.should be_empty
927
- removed.should =~ %w(a_directory/do_not_use.rb)
928
- end
929
- end
930
- end
931
-
932
- context 'with recursive option set to false' do
933
- it "doesn't detect the file removal" do
934
- fixtures do |path|
935
- mkdir 'a_directory'
936
- touch 'a_directory/do_not_use.rb'
937
-
938
- modified, added, removed = changes(path, :recursive => false) do
939
- rm 'a_directory/do_not_use.rb'
940
- end
941
-
942
- added.should be_empty
943
- modified.should be_empty
944
- removed.should be_empty
945
- end
946
- end
947
- end
948
- end
949
-
950
- context 'given a directory with subdirectories' do
951
- it 'detects the file removal in subdirectories' do
952
- fixtures do |path|
953
- mkdir_p 'a_directory/subdirectory'
954
- touch 'a_directory/subdirectory/do_not_use.rb'
955
-
956
- modified, added, removed = changes(path, :recursive => true) do
957
- rm 'a_directory/subdirectory/do_not_use.rb'
958
- end
959
-
960
- added.should be_empty
961
- modified.should be_empty
962
- removed.should =~ %w(a_directory/subdirectory/do_not_use.rb)
963
- end
964
- end
965
-
966
- context 'with an ignored subdirectory' do
967
- it "doesn't detect files removals in neither the directory nor its subdirectories" do
968
- fixtures do |path|
969
- mkdir_p 'ignored_directory/subdirectory'
970
- touch 'ignored_directory/do_not_use.rb'
971
- touch 'ignored_directory/subdirectory/do_not_use.rb'
972
-
973
- modified, added, removed = changes(path, :ignore => %r{^ignored_directory/}, :recursive => true) do
974
- rm 'ignored_directory/do_not_use.rb'
975
- rm 'ignored_directory/subdirectory/do_not_use.rb'
976
- end
977
-
978
- added.should be_empty
979
- modified.should be_empty
980
- removed.should be_empty
981
- end
982
- end
983
- end
984
- end
985
- end
986
- end
987
-
988
- context 'multiple file operations' do
989
- it 'detects the added files' do
990
- fixtures do |path|
991
- modified, added, removed = changes(path) do
992
- touch 'a_file.rb'
993
- touch 'b_file.rb'
994
- mkdir 'a_directory'
995
- touch 'a_directory/a_file.rb'
996
- touch 'a_directory/b_file.rb'
997
- end
998
-
999
- added.should =~ %w(a_file.rb b_file.rb a_directory/a_file.rb a_directory/b_file.rb)
1000
- modified.should be_empty
1001
- removed.should be_empty
1002
- end
1003
- end
1004
-
1005
- it 'detects the modified files' do
1006
- fixtures do |path|
1007
- touch 'a_file.rb'
1008
- touch 'b_file.rb'
1009
- mkdir 'a_directory'
1010
- touch 'a_directory/a_file.rb'
1011
- touch 'a_directory/b_file.rb'
1012
-
1013
- modified, added, removed = changes(path) do
1014
- small_time_difference
1015
- touch 'b_file.rb'
1016
- touch 'a_directory/a_file.rb'
1017
- end
1018
-
1019
- added.should be_empty
1020
- modified.should =~ %w(b_file.rb a_directory/a_file.rb)
1021
- removed.should be_empty
1022
- end
1023
- end
1024
-
1025
- it 'detects the removed files' do
1026
- fixtures do |path|
1027
- touch 'a_file.rb'
1028
- touch 'b_file.rb'
1029
- mkdir 'a_directory'
1030
- touch 'a_directory/a_file.rb'
1031
- touch 'a_directory/b_file.rb'
1032
-
1033
- modified, added, removed = changes(path) do
1034
- rm 'b_file.rb'
1035
- rm 'a_directory/a_file.rb'
1036
- end
1037
-
1038
- added.should be_empty
1039
- modified.should be_empty
1040
- removed.should =~ %w(b_file.rb a_directory/a_file.rb)
1041
- end
1042
- end
1043
- end
1044
-
1045
- context 'single directory operations' do
1046
- it 'detects a moved directory' do
1047
- fixtures do |path|
1048
- mkdir 'a_directory'
1049
- mkdir 'a_directory/nested'
1050
- touch 'a_directory/a_file.rb'
1051
- touch 'a_directory/b_file.rb'
1052
- touch 'a_directory/nested/c_file.rb'
1053
-
1054
- modified, added, removed = changes(path) do
1055
- mv 'a_directory', 'renamed'
1056
- end
1057
-
1058
- added.should =~ %w(renamed/a_file.rb renamed/b_file.rb renamed/nested/c_file.rb)
1059
- modified.should be_empty
1060
- removed.should =~ %w(a_directory/a_file.rb a_directory/b_file.rb a_directory/nested/c_file.rb)
1061
- end
1062
- end
1063
-
1064
- it 'detects a removed directory' do
1065
- fixtures do |path|
1066
- mkdir 'a_directory'
1067
- touch 'a_directory/a_file.rb'
1068
- touch 'a_directory/b_file.rb'
1069
-
1070
- modified, added, removed = changes(path) do
1071
- rm_rf 'a_directory'
1072
- end
1073
-
1074
- added.should be_empty
1075
- modified.should be_empty
1076
- removed.should =~ %w(a_directory/a_file.rb a_directory/b_file.rb)
1077
- end
1078
- end
1079
-
1080
- it "deletes the directory from the record" do
1081
- fixtures do |path|
1082
- mkdir 'a_directory'
1083
- touch 'a_directory/file.rb'
1084
-
1085
- changes(path) do
1086
- @record.paths.should have(2).paths
1087
- @record.paths[path]['a_directory'].should_not be_nil
1088
- @record.paths["#{path}/a_directory"]['file.rb'].should_not be_nil
1089
-
1090
- rm_rf 'a_directory'
1091
- end
1092
-
1093
- @record.paths.should have(1).paths
1094
- @record.paths[path]['a_directory'].should be_nil
1095
- @record.paths["#{path}/a_directory"]['file.rb'].should be_nil
1096
- end
1097
- end
1098
-
1099
- context 'with nested paths' do
1100
- it 'detects removals without crashing - #18' do
1101
- fixtures do |path|
1102
- mkdir_p 'a_directory/subdirectory'
1103
- touch 'a_directory/subdirectory/do_not_use.rb'
1104
-
1105
- modified, added, removed = changes(path) do
1106
- rm_r 'a_directory'
1107
- end
1108
-
1109
- added.should be_empty
1110
- modified.should be_empty
1111
- removed.should =~ %w(a_directory/subdirectory/do_not_use.rb)
1112
- end
1113
- end
1114
- end
1115
- end
1116
-
1117
- context 'with a path outside the directory for which a record is made' do
1118
- it "skips that path and doesn't check for changes" do
1119
- fixtures do |path|
1120
- modified, added, removed = changes(path, :paths => ['some/where/outside']) do
1121
- @record.should_not_receive(:detect_additions)
1122
- @record.should_not_receive(:detect_modifications_and_removals)
1123
-
1124
- touch 'new_file.rb'
1125
- end
1126
-
1127
- added.should be_empty
1128
- modified.should be_empty
1129
- removed.should be_empty
1130
- end
1131
- end
1132
- end
1133
-
1134
- context 'with the relative_paths option set to false' do
1135
- it 'returns full paths in the changes hash' do
1136
- fixtures do |path|
1137
- touch 'a_file.rb'
1138
- touch 'b_file.rb'
1139
-
1140
- modified, added, removed = changes(path, :relative_paths => false) do
1141
- small_time_difference
1142
- rm 'a_file.rb'
1143
- touch 'b_file.rb'
1144
- touch 'c_file.rb'
1145
- mkdir 'a_directory'
1146
- touch 'a_directory/a_file.rb'
1147
- end
1148
-
1149
- added.should =~ ["#{path}/c_file.rb", "#{path}/a_directory/a_file.rb"]
1150
- modified.should =~ ["#{path}/b_file.rb"]
1151
- removed.should =~ ["#{path}/a_file.rb"]
1152
- end
1153
- end
1154
- end
1155
-
1156
- context 'within a directory containing unreadble paths - #32' do
1157
- it 'detects changes more than a second apart' do
1158
- fixtures do |path|
1159
- touch 'unreadable_file.txt'
1160
- chmod 000, 'unreadable_file.txt'
1161
-
1162
- modified, added, removed = changes(path) do
1163
- small_time_difference
1164
- touch 'unreadable_file.txt'
1165
- end
1166
-
1167
- added.should be_empty
1168
- modified.should =~ %w(unreadable_file.txt)
1169
- removed.should be_empty
1170
- end
1171
- end
1172
-
1173
- context 'with multiple changes within the same second' do
1174
- before { ensure_same_second }
1175
-
1176
- it 'does not detect changes even if content changes', :unless => described_class::HIGH_PRECISION_SUPPORTED do
1177
- fixtures do |path|
1178
- touch 'unreadable_file.txt'
1179
-
1180
- modified, added, removed = changes(path) do
1181
- open('unreadable_file.txt', 'w') { |f| f.write('foo') }
1182
- chmod 000, 'unreadable_file.txt'
1183
- end
1184
-
1185
- added.should be_empty
1186
- modified.should be_empty
1187
- removed.should be_empty
1188
- end
1189
- end
1190
- end
1191
- end
1192
-
1193
- context 'within a directory containing a removed file - #39' do
1194
- it 'does not raise an exception when hashing a removed file' do
1195
-
1196
- # simulate a race condition where the file is removed after the
1197
- # change event is tracked, but before the hash is calculated
1198
- Digest::SHA1.should_receive(:file).twice.and_raise(Errno::ENOENT)
1199
-
1200
- fixtures do |path|
1201
- lambda {
1202
- touch 'removed_file.txt'
1203
- changes(path) { touch 'removed_file.txt' }
1204
- }.should_not raise_error
1205
- end
1206
- end
1207
- end
1208
-
1209
- context 'within a directory containing a unix domain socket file', :unless => windows? do
1210
- it 'does not raise an exception when hashing a unix domain socket file' do
1211
- fixtures do |path|
1212
- require 'socket'
1213
- UNIXServer.new('unix_domain_socket.sock')
1214
- lambda { changes(path){} }.should_not raise_error
1215
- end
1216
- end
1217
- end
1218
-
1219
- context 'with symlinks', :unless => windows? do
1220
- it 'looks at symlinks not their targets' do
1221
- fixtures do |path|
1222
- touch 'target'
1223
- symlink 'target', 'symlink'
1224
-
1225
- record = described_class.new(path)
1226
- record.build
1227
-
1228
- sleep 1
1229
- touch 'target'
1230
-
1231
- record.fetch_changes([path], :relative_paths => true)[:modified].should == ['target']
1232
- end
1233
- end
1234
-
1235
- it 'handles broken symlinks' do
1236
- fixtures do |path|
1237
- symlink 'target', 'symlink'
1238
-
1239
- record = described_class.new(path)
1240
- record.build
1241
-
1242
- sleep 1
1243
- rm 'symlink'
1244
- symlink 'new-target', 'symlink'
1245
- record.fetch_changes([path], :relative_paths => true)
1246
- end
1247
- end
1248
- end
1249
- end
1250
- end