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.
- checksums.yaml +4 -4
- data/CHANGES.md +17 -0
- data/bundle/load.rb +7 -8
- data/bundle/ruby/2.5.0/gems/{ruby2ruby-2.4.1 → ruby2ruby-2.4.2}/History.rdoc +8 -0
- data/bundle/ruby/2.5.0/gems/{ruby2ruby-2.4.1 → ruby2ruby-2.4.2}/Manifest.txt +0 -0
- data/bundle/ruby/2.5.0/gems/{ruby2ruby-2.4.1 → ruby2ruby-2.4.2}/README.rdoc +0 -0
- data/bundle/ruby/2.5.0/gems/{ruby2ruby-2.4.1 → ruby2ruby-2.4.2}/lib/ruby2ruby.rb +34 -36
- data/bundle/ruby/2.5.0/gems/{ruby_parser-3.12.0 → ruby_parser-3.13.0}/History.rdoc +47 -0
- data/bundle/ruby/2.5.0/gems/{ruby_parser-3.12.0 → ruby_parser-3.13.0}/Manifest.txt +5 -4
- data/bundle/ruby/2.5.0/gems/{ruby_parser-3.12.0 → ruby_parser-3.13.0}/README.rdoc +0 -0
- data/bundle/ruby/2.5.0/gems/{ruby_parser-3.12.0 → ruby_parser-3.13.0}/compare/normalize.rb +29 -2
- data/bundle/ruby/2.5.0/gems/ruby_parser-3.13.0/debugging.md +18 -0
- data/bundle/ruby/2.5.0/gems/{ruby_parser-3.12.0 → ruby_parser-3.13.0}/lib/rp_extensions.rb +0 -7
- data/bundle/ruby/2.5.0/gems/{ruby_parser-3.12.0 → ruby_parser-3.13.0}/lib/rp_stringscanner.rb +0 -0
- data/bundle/ruby/2.5.0/gems/ruby_parser-3.13.0/lib/ruby20_parser.rb +6874 -0
- data/bundle/ruby/2.5.0/gems/{ruby_parser-3.12.0 → ruby_parser-3.13.0}/lib/ruby20_parser.y +284 -201
- data/bundle/ruby/2.5.0/gems/ruby_parser-3.13.0/lib/ruby21_parser.rb +6952 -0
- data/bundle/ruby/2.5.0/gems/{ruby_parser-3.12.0 → ruby_parser-3.13.0}/lib/ruby21_parser.y +281 -197
- data/bundle/ruby/2.5.0/gems/ruby_parser-3.13.0/lib/ruby22_parser.rb +6983 -0
- 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
- data/bundle/ruby/2.5.0/gems/ruby_parser-3.13.0/lib/ruby23_parser.rb +6982 -0
- data/bundle/ruby/2.5.0/gems/{ruby_parser-3.12.0 → ruby_parser-3.13.0}/lib/ruby23_parser.y +282 -203
- data/bundle/ruby/2.5.0/gems/ruby_parser-3.13.0/lib/ruby24_parser.rb +6982 -0
- data/bundle/ruby/2.5.0/gems/{ruby_parser-3.12.0 → ruby_parser-3.13.0}/lib/ruby24_parser.y +282 -203
- data/bundle/ruby/2.5.0/gems/ruby_parser-3.13.0/lib/ruby25_parser.rb +6981 -0
- data/bundle/ruby/2.5.0/gems/{ruby_parser-3.12.0 → ruby_parser-3.13.0}/lib/ruby25_parser.y +282 -203
- data/bundle/ruby/2.5.0/gems/ruby_parser-3.13.0/lib/ruby26_parser.rb +6999 -0
- data/bundle/ruby/2.5.0/gems/ruby_parser-3.13.0/lib/ruby26_parser.y +2469 -0
- data/bundle/ruby/2.5.0/gems/{ruby_parser-3.12.0 → ruby_parser-3.13.0}/lib/ruby_lexer.rb +116 -118
- data/bundle/ruby/2.5.0/gems/{ruby_parser-3.12.0 → ruby_parser-3.13.0}/lib/ruby_lexer.rex +10 -8
- data/bundle/ruby/2.5.0/gems/{ruby_parser-3.12.0 → ruby_parser-3.13.0}/lib/ruby_lexer.rex.rb +8 -8
- data/bundle/ruby/2.5.0/gems/{ruby_parser-3.12.0 → ruby_parser-3.13.0}/lib/ruby_parser.rb +5 -7
- data/bundle/ruby/2.5.0/gems/ruby_parser-3.13.0/lib/ruby_parser.yy +2571 -0
- data/bundle/ruby/2.5.0/gems/ruby_parser-3.13.0/lib/ruby_parser_extras.rb +1360 -0
- data/bundle/ruby/2.5.0/gems/ruby_parser-3.13.0/tools/munge.rb +216 -0
- data/bundle/ruby/2.5.0/gems/ruby_parser-3.13.0/tools/ripper.rb +23 -0
- data/bundle/ruby/2.5.0/gems/ruby_parser-legacy-1.0.0/History.rdoc +6 -0
- data/bundle/ruby/2.5.0/gems/ruby_parser-legacy-1.0.0/Manifest.txt +19 -0
- data/bundle/ruby/2.5.0/gems/ruby_parser-legacy-1.0.0/README.rdoc +54 -0
- data/bundle/ruby/2.5.0/gems/ruby_parser-legacy-1.0.0/lib/ruby_parser/legacy.rb +5 -0
- 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
- 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
- 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
- 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
- data/bundle/ruby/2.5.0/gems/ruby_parser-legacy-1.0.0/lib/ruby_parser/legacy/ruby_lexer.rb +1412 -0
- data/bundle/ruby/2.5.0/gems/ruby_parser-legacy-1.0.0/lib/ruby_parser/legacy/ruby_lexer.rex +179 -0
- data/bundle/ruby/2.5.0/gems/ruby_parser-legacy-1.0.0/lib/ruby_parser/legacy/ruby_lexer.rex.rb +323 -0
- data/bundle/ruby/2.5.0/gems/ruby_parser-legacy-1.0.0/lib/ruby_parser/legacy/ruby_parser.rb +30 -0
- 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
- data/bundle/ruby/2.5.0/gems/{safe_yaml-1.0.4 → safe_yaml-1.0.5}/CHANGES.md +5 -0
- data/bundle/ruby/2.5.0/gems/{safe_yaml-1.0.4 → safe_yaml-1.0.5}/Gemfile +0 -0
- data/bundle/ruby/2.5.0/gems/{safe_yaml-1.0.4 → safe_yaml-1.0.5}/LICENSE.txt +0 -0
- data/bundle/ruby/2.5.0/gems/{safe_yaml-1.0.4 → safe_yaml-1.0.5}/README.md +0 -0
- 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
- data/bundle/ruby/2.5.0/gems/{safe_yaml-1.0.4 → safe_yaml-1.0.5}/lib/safe_yaml.rb +0 -0
- data/bundle/ruby/2.5.0/gems/{safe_yaml-1.0.4 → safe_yaml-1.0.5}/lib/safe_yaml/deep.rb +0 -0
- 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
- data/bundle/ruby/2.5.0/gems/{safe_yaml-1.0.4 → safe_yaml-1.0.5}/lib/safe_yaml/load.rb +0 -0
- 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
- 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
- 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
- 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
- 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
- data/bundle/ruby/2.5.0/gems/{safe_yaml-1.0.4 → safe_yaml-1.0.5}/lib/safe_yaml/resolver.rb +0 -0
- 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
- data/bundle/ruby/2.5.0/gems/safe_yaml-1.0.5/lib/safe_yaml/store.rb +39 -0
- 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
- 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
- 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
- data/bundle/ruby/2.5.0/gems/{safe_yaml-1.0.4 → safe_yaml-1.0.5}/lib/safe_yaml/transform.rb +0 -0
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- data/bundle/ruby/2.5.0/gems/{safe_yaml-1.0.4 → safe_yaml-1.0.5}/lib/safe_yaml/version.rb +1 -1
- 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
- data/bundle/ruby/2.5.0/gems/{safe_yaml-1.0.4 → safe_yaml-1.0.5}/safe_yaml.gemspec +0 -0
- data/bundle/ruby/2.5.0/gems/{sexp_processor-4.11.0 → sexp_processor-4.12.0}/History.rdoc +8 -0
- data/bundle/ruby/2.5.0/gems/{sexp_processor-4.11.0 → sexp_processor-4.12.0}/Manifest.txt +0 -0
- data/bundle/ruby/2.5.0/gems/{sexp_processor-4.11.0 → sexp_processor-4.12.0}/README.rdoc +0 -0
- data/bundle/ruby/2.5.0/gems/{sexp_processor-4.11.0 → sexp_processor-4.12.0}/lib/composite_sexp_processor.rb +0 -0
- data/bundle/ruby/2.5.0/gems/{sexp_processor-4.11.0 → sexp_processor-4.12.0}/lib/pt_testcase.rb +2 -2
- data/bundle/ruby/2.5.0/gems/{sexp_processor-4.11.0 → sexp_processor-4.12.0}/lib/sexp.rb +4 -4
- data/bundle/ruby/2.5.0/gems/{sexp_processor-4.11.0 → sexp_processor-4.12.0}/lib/sexp_processor.rb +1 -1
- data/bundle/ruby/2.5.0/gems/{sexp_processor-4.11.0 → sexp_processor-4.12.0}/lib/strict_sexp.rb +3 -3
- data/bundle/ruby/2.5.0/gems/{sexp_processor-4.11.0 → sexp_processor-4.12.0}/lib/unique.rb +0 -0
- data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/CHANGES +6 -0
- data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/EXPRESSIONS.md +1 -1
- data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/Gemfile +0 -0
- data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/LICENSE +0 -0
- data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/README.md +1 -1
- data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple.rb +0 -0
- data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/engine.rb +0 -0
- data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/erb/engine.rb +0 -0
- data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/erb/parser.rb +0 -0
- data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/erb/template.rb +0 -0
- data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/erb/trimming.rb +0 -0
- data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/exceptions.rb +0 -0
- data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/filter.rb +0 -0
- data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/filters/code_merger.rb +0 -0
- data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/filters/control_flow.rb +0 -0
- data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/filters/dynamic_inliner.rb +0 -0
- data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/filters/encoding.rb +0 -0
- data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/filters/eraser.rb +0 -0
- data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/filters/escapable.rb +0 -0
- data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/filters/multi_flattener.rb +0 -0
- data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/filters/remove_bom.rb +0 -0
- data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/filters/static_analyzer.rb +0 -0
- data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/filters/static_merger.rb +0 -0
- data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/filters/string_splitter.rb +0 -0
- data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/filters/validator.rb +0 -0
- data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/generator.rb +0 -0
- data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/generators/array.rb +0 -0
- data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/generators/array_buffer.rb +0 -0
- data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/generators/erb.rb +0 -0
- data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/generators/rails_output_buffer.rb +0 -0
- data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/generators/string_buffer.rb +0 -0
- data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/grammar.rb +0 -0
- data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/html/attribute_merger.rb +0 -0
- data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/html/attribute_remover.rb +0 -0
- data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/html/attribute_sorter.rb +0 -0
- data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/html/dispatcher.rb +0 -0
- data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/html/fast.rb +0 -0
- data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/html/filter.rb +0 -0
- data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/html/pretty.rb +0 -0
- data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/html/safe.rb +0 -0
- data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/map.rb +0 -0
- data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/mixins/dispatcher.rb +2 -1
- data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/mixins/engine_dsl.rb +0 -0
- data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/mixins/grammar_dsl.rb +0 -0
- data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/mixins/options.rb +0 -0
- data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/mixins/template.rb +0 -0
- data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/parser.rb +0 -0
- data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/static_analyzer.rb +0 -0
- data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/templates.rb +0 -0
- data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/templates/rails.rb +2 -2
- data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/templates/tilt.rb +0 -0
- data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/lib/temple/utils.rb +0 -0
- data/bundle/ruby/2.5.0/gems/temple-0.8.1/lib/temple/version.rb +3 -0
- data/bundle/ruby/2.5.0/gems/{temple-0.8.0 → temple-0.8.1}/temple.gemspec +0 -0
- data/bundle/ruby/2.5.0/gems/{unicode-display_width-1.4.1 → unicode-display_width-1.5.0}/CHANGELOG.md +4 -0
- data/bundle/ruby/2.5.0/gems/{unicode-display_width-1.4.1 → unicode-display_width-1.5.0}/MIT-LICENSE.txt +1 -1
- data/bundle/ruby/2.5.0/gems/{unicode-display_width-1.4.1 → unicode-display_width-1.5.0}/README.md +10 -10
- data/bundle/ruby/2.5.0/gems/unicode-display_width-1.5.0/data/display_width.marshal.gz +0 -0
- 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
- 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
- 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
- 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
- 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
- data/lib/brakeman/checks/base_check.rb +16 -0
- data/lib/brakeman/checks/check_content_tag.rb +12 -0
- data/lib/brakeman/checks/check_cross_site_scripting.rb +6 -6
- data/lib/brakeman/checks/check_evaluation.rb +0 -1
- data/lib/brakeman/checks/check_execute.rb +18 -0
- data/lib/brakeman/checks/check_send.rb +0 -1
- data/lib/brakeman/checks/check_session_manipulation.rb +0 -1
- data/lib/brakeman/checks/check_sql.rb +12 -3
- data/lib/brakeman/file_parser.rb +8 -4
- data/lib/brakeman/parsers/haml_embedded.rb +44 -0
- data/lib/brakeman/parsers/slim_embedded.rb +44 -0
- data/lib/brakeman/parsers/template_parser.rb +2 -4
- data/lib/brakeman/processors/alias_processor.rb +23 -1
- data/lib/brakeman/processors/lib/call_conversion_helper.rb +4 -0
- data/lib/brakeman/processors/slim_template_processor.rb +16 -0
- data/lib/brakeman/processors/template_alias_processor.rb +2 -2
- data/lib/brakeman/scanner.rb +11 -10
- data/lib/brakeman/tracker.rb +5 -1
- data/lib/brakeman/tracker/config.rb +32 -7
- data/lib/brakeman/util.rb +17 -0
- data/lib/brakeman/version.rb +1 -1
- metadata +157 -320
- data/bundle/ruby/2.5.0/gems/ruby_parser-3.12.0/lib/ruby20_parser.rb +0 -6687
- data/bundle/ruby/2.5.0/gems/ruby_parser-3.12.0/lib/ruby21_parser.rb +0 -6767
- data/bundle/ruby/2.5.0/gems/ruby_parser-3.12.0/lib/ruby22_parser.rb +0 -6803
- data/bundle/ruby/2.5.0/gems/ruby_parser-3.12.0/lib/ruby22_parser.y +0 -2376
- data/bundle/ruby/2.5.0/gems/ruby_parser-3.12.0/lib/ruby23_parser.rb +0 -6818
- data/bundle/ruby/2.5.0/gems/ruby_parser-3.12.0/lib/ruby24_parser.rb +0 -6818
- data/bundle/ruby/2.5.0/gems/ruby_parser-3.12.0/lib/ruby25_parser.rb +0 -6818
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/CODE_OF_CONDUCT.md +0 -10
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/CONTRIBUTING.md +0 -148
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/MIT-LICENSE +0 -20
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/README.md +0 -227
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/REVISION +0 -1
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/VERSION +0 -1
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/VERSION_DATE +0 -1
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/VERSION_NAME +0 -1
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/extra/sass-spec-ref.sh +0 -32
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/extra/update_watch.rb +0 -13
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/init.rb +0 -18
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass.rb +0 -109
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/cache_stores.rb +0 -15
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/cache_stores/base.rb +0 -88
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/cache_stores/chain.rb +0 -34
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/cache_stores/filesystem.rb +0 -60
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/cache_stores/memory.rb +0 -46
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/cache_stores/null.rb +0 -25
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/callbacks.rb +0 -67
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/css.rb +0 -408
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/deprecation.rb +0 -55
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/engine.rb +0 -1226
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/environment.rb +0 -215
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/error.rb +0 -198
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/exec.rb +0 -9
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/exec/base.rb +0 -199
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/exec/sass_convert.rb +0 -283
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/exec/sass_scss.rb +0 -440
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/features.rb +0 -47
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/importers.rb +0 -23
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/importers/base.rb +0 -182
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/importers/deprecated_path.rb +0 -51
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/importers/filesystem.rb +0 -219
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/logger.rb +0 -17
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/logger/base.rb +0 -36
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/logger/delayed.rb +0 -50
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/logger/log_level.rb +0 -45
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/media.rb +0 -210
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/plugin.rb +0 -134
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/plugin/compiler.rb +0 -582
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/plugin/configuration.rb +0 -134
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/plugin/generic.rb +0 -15
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/plugin/merb.rb +0 -48
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/plugin/rack.rb +0 -60
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/plugin/rails.rb +0 -47
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/plugin/staleness_checker.rb +0 -199
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/railtie.rb +0 -10
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/repl.rb +0 -57
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/root.rb +0 -7
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/script.rb +0 -66
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/script/css_lexer.rb +0 -33
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/script/css_parser.rb +0 -33
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/script/css_variable_warning.rb +0 -52
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/script/functions.rb +0 -2693
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/script/lexer.rb +0 -464
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/script/parser.rb +0 -832
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/script/tree.rb +0 -16
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/script/tree/funcall.rb +0 -313
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/script/tree/interpolation.rb +0 -223
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/script/tree/list_literal.rb +0 -104
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/script/tree/literal.rb +0 -49
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/script/tree/map_literal.rb +0 -64
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/script/tree/node.rb +0 -127
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/script/tree/operation.rb +0 -156
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/script/tree/selector.rb +0 -26
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/script/tree/string_interpolation.rb +0 -125
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/script/tree/unary_operation.rb +0 -69
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/script/tree/variable.rb +0 -57
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/script/value.rb +0 -11
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/script/value/arg_list.rb +0 -36
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/script/value/base.rb +0 -241
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/script/value/bool.rb +0 -35
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/script/value/color.rb +0 -698
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/script/value/helpers.rb +0 -272
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/script/value/list.rb +0 -113
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/script/value/map.rb +0 -70
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/script/value/null.rb +0 -44
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/script/value/number.rb +0 -563
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/script/value/string.rb +0 -138
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/scss.rb +0 -14
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/scss/css_parser.rb +0 -56
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/scss/parser.rb +0 -1254
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/scss/rx.rb +0 -140
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/scss/static_parser.rb +0 -373
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/selector.rb +0 -323
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/selector/abstract_sequence.rb +0 -111
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/selector/comma_sequence.rb +0 -191
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/selector/pseudo.rb +0 -266
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/selector/sequence.rb +0 -636
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/selector/simple.rb +0 -117
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/selector/simple_sequence.rb +0 -344
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/shared.rb +0 -76
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/source/map.rb +0 -213
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/source/position.rb +0 -39
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/source/range.rb +0 -41
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/stack.rb +0 -120
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/supports.rb +0 -225
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/at_root_node.rb +0 -83
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/charset_node.rb +0 -22
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/comment_node.rb +0 -82
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/content_node.rb +0 -9
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/css_import_node.rb +0 -68
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/debug_node.rb +0 -18
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/directive_node.rb +0 -59
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/each_node.rb +0 -24
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/error_node.rb +0 -18
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/extend_node.rb +0 -43
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/for_node.rb +0 -36
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/function_node.rb +0 -44
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/if_node.rb +0 -52
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/import_node.rb +0 -75
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/keyframe_rule_node.rb +0 -15
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/media_node.rb +0 -48
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/mixin_def_node.rb +0 -38
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/mixin_node.rb +0 -52
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/node.rb +0 -240
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/prop_node.rb +0 -170
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/return_node.rb +0 -19
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/root_node.rb +0 -44
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/rule_node.rb +0 -155
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/supports_node.rb +0 -38
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/trace_node.rb +0 -33
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/variable_node.rb +0 -36
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/visitors/base.rb +0 -72
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/visitors/check_nesting.rb +0 -173
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/visitors/convert.rb +0 -351
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/visitors/cssize.rb +0 -373
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/visitors/deep_copy.rb +0 -107
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/visitors/extend.rb +0 -70
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/visitors/perform.rb +0 -564
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/visitors/set_options.rb +0 -139
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/visitors/to_css.rb +0 -409
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/warn_node.rb +0 -18
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/tree/while_node.rb +0 -18
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/util.rb +0 -1375
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/util/cross_platform_random.rb +0 -19
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/util/multibyte_string_scanner.rb +0 -155
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/util/normalized_map.rb +0 -129
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/util/ordered_hash.rb +0 -192
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/util/subset_map.rb +0 -109
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/util/test.rb +0 -9
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/lib/sass/version.rb +0 -124
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/rails/init.rb +0 -1
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/CHANGELOG.md +0 -1
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/CONTRIBUTING.md +0 -38
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/Gemfile +0 -20
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/Guardfile +0 -8
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/LICENSE +0 -20
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/README.md +0 -349
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/Rakefile +0 -5
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/Vagrantfile +0 -96
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/lib/listen.rb +0 -54
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/lib/listen/adapter.rb +0 -327
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/lib/listen/adapters/bsd.rb +0 -75
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/lib/listen/adapters/darwin.rb +0 -48
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/lib/listen/adapters/linux.rb +0 -81
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/lib/listen/adapters/polling.rb +0 -58
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/lib/listen/adapters/windows.rb +0 -91
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/lib/listen/directory_record.rb +0 -406
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/lib/listen/listener.rb +0 -323
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/lib/listen/turnstile.rb +0 -32
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/lib/listen/version.rb +0 -3
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/listen.gemspec +0 -28
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/spec/listen/adapter_spec.rb +0 -149
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/spec/listen/adapters/bsd_spec.rb +0 -36
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/spec/listen/adapters/darwin_spec.rb +0 -37
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/spec/listen/adapters/linux_spec.rb +0 -47
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/spec/listen/adapters/polling_spec.rb +0 -68
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/spec/listen/adapters/windows_spec.rb +0 -30
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/spec/listen/directory_record_spec.rb +0 -1250
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/spec/listen/listener_spec.rb +0 -258
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/spec/listen/turnstile_spec.rb +0 -56
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/spec/listen_spec.rb +0 -67
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/spec/spec_helper.rb +0 -25
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/spec/support/adapter_helper.rb +0 -666
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/spec/support/directory_record_helper.rb +0 -57
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/spec/support/fixtures_helper.rb +0 -29
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/spec/support/listeners_helper.rb +0 -179
- data/bundle/ruby/2.5.0/gems/sass-3.4.25/vendor/listen/spec/support/platform_helper.rb +0 -15
- data/bundle/ruby/2.5.0/gems/temple-0.8.0/lib/temple/version.rb +0 -3
- 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
|