guesswhat 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +9 -0
- data/CODE_OF_CONDUCT.md +49 -0
- data/Gemfile +4 -0
- data/README.md +36 -0
- data/Rakefile +4 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/guesswhat.gemspec +25 -0
- data/lib/guesswhat/version.rb +3 -0
- data/lib/guesswhat.rb +5 -0
- data/tasks/rspec.rake +3 -0
- data/vendor/bundle/bin/console +23 -0
- data/vendor/bundle/bin/htmldiff +25 -0
- data/vendor/bundle/bin/ldiff +25 -0
- data/vendor/bundle/bin/rake +23 -0
- data/vendor/bundle/bin/rspec +23 -0
- data/vendor/bundle/bin/setup +23 -0
- data/vendor/bundle/cache/diff-lcs-1.2.5.gem +0 -0
- data/vendor/bundle/cache/rake-10.5.0.gem +0 -0
- data/vendor/bundle/cache/rspec-3.4.0.gem +0 -0
- data/vendor/bundle/cache/rspec-core-3.4.4.gem +0 -0
- data/vendor/bundle/cache/rspec-expectations-3.4.0.gem +0 -0
- data/vendor/bundle/cache/rspec-mocks-3.4.1.gem +0 -0
- data/vendor/bundle/cache/rspec-support-3.4.1.gem +0 -0
- data/vendor/bundle/gems/diff-lcs-1.2.5/.autotest +3 -0
- data/vendor/bundle/gems/diff-lcs-1.2.5/.gemtest +0 -0
- data/vendor/bundle/gems/diff-lcs-1.2.5/.hoerc +2 -0
- data/vendor/bundle/gems/diff-lcs-1.2.5/.rspec +2 -0
- data/vendor/bundle/gems/diff-lcs-1.2.5/.travis.yml +22 -0
- data/vendor/bundle/gems/diff-lcs-1.2.5/Contributing.rdoc +64 -0
- data/vendor/bundle/gems/diff-lcs-1.2.5/Gemfile +20 -0
- data/vendor/bundle/gems/diff-lcs-1.2.5/History.rdoc +152 -0
- data/vendor/bundle/gems/diff-lcs-1.2.5/License.rdoc +39 -0
- data/vendor/bundle/gems/diff-lcs-1.2.5/Manifest.txt +38 -0
- data/vendor/bundle/gems/diff-lcs-1.2.5/README.rdoc +85 -0
- data/vendor/bundle/gems/diff-lcs-1.2.5/Rakefile +41 -0
- data/vendor/bundle/gems/diff-lcs-1.2.5/autotest/discover.rb +1 -0
- data/vendor/bundle/gems/diff-lcs-1.2.5/bin/htmldiff +32 -0
- data/vendor/bundle/gems/diff-lcs-1.2.5/bin/ldiff +6 -0
- data/vendor/bundle/gems/diff-lcs-1.2.5/docs/COPYING.txt +339 -0
- data/vendor/bundle/gems/diff-lcs-1.2.5/docs/artistic.txt +127 -0
- data/vendor/bundle/gems/diff-lcs-1.2.5/lib/diff/lcs/array.rb +7 -0
- data/vendor/bundle/gems/diff-lcs-1.2.5/lib/diff/lcs/block.rb +37 -0
- data/vendor/bundle/gems/diff-lcs-1.2.5/lib/diff/lcs/callbacks.rb +322 -0
- data/vendor/bundle/gems/diff-lcs-1.2.5/lib/diff/lcs/change.rb +177 -0
- data/vendor/bundle/gems/diff-lcs-1.2.5/lib/diff/lcs/htmldiff.rb +149 -0
- data/vendor/bundle/gems/diff-lcs-1.2.5/lib/diff/lcs/hunk.rb +276 -0
- data/vendor/bundle/gems/diff-lcs-1.2.5/lib/diff/lcs/internals.rb +301 -0
- data/vendor/bundle/gems/diff-lcs-1.2.5/lib/diff/lcs/ldiff.rb +195 -0
- data/vendor/bundle/gems/diff-lcs-1.2.5/lib/diff/lcs/string.rb +5 -0
- data/vendor/bundle/gems/diff-lcs-1.2.5/lib/diff/lcs.rb +805 -0
- data/vendor/bundle/gems/diff-lcs-1.2.5/lib/diff-lcs.rb +3 -0
- data/vendor/bundle/gems/diff-lcs-1.2.5/spec/change_spec.rb +65 -0
- data/vendor/bundle/gems/diff-lcs-1.2.5/spec/diff_spec.rb +47 -0
- data/vendor/bundle/gems/diff-lcs-1.2.5/spec/hunk_spec.rb +72 -0
- data/vendor/bundle/gems/diff-lcs-1.2.5/spec/issues_spec.rb +24 -0
- data/vendor/bundle/gems/diff-lcs-1.2.5/spec/lcs_spec.rb +54 -0
- data/vendor/bundle/gems/diff-lcs-1.2.5/spec/patch_spec.rb +414 -0
- data/vendor/bundle/gems/diff-lcs-1.2.5/spec/sdiff_spec.rb +214 -0
- data/vendor/bundle/gems/diff-lcs-1.2.5/spec/spec_helper.rb +290 -0
- data/vendor/bundle/gems/diff-lcs-1.2.5/spec/traverse_balanced_spec.rb +310 -0
- data/vendor/bundle/gems/diff-lcs-1.2.5/spec/traverse_sequences_spec.rb +139 -0
- data/vendor/bundle/gems/rake-10.5.0/.autotest +7 -0
- data/vendor/bundle/gems/rake-10.5.0/.rubocop.yml +27 -0
- data/vendor/bundle/gems/rake-10.5.0/.togglerc +7 -0
- data/vendor/bundle/gems/rake-10.5.0/CONTRIBUTING.rdoc +38 -0
- data/vendor/bundle/gems/rake-10.5.0/History.rdoc +659 -0
- data/vendor/bundle/gems/rake-10.5.0/MIT-LICENSE +21 -0
- data/vendor/bundle/gems/rake-10.5.0/Manifest.txt +166 -0
- data/vendor/bundle/gems/rake-10.5.0/README.rdoc +139 -0
- data/vendor/bundle/gems/rake-10.5.0/Rakefile +81 -0
- data/vendor/bundle/gems/rake-10.5.0/bin/rake +33 -0
- data/vendor/bundle/gems/rake-10.5.0/doc/command_line_usage.rdoc +158 -0
- data/vendor/bundle/gems/rake-10.5.0/doc/example/Rakefile1 +38 -0
- data/vendor/bundle/gems/rake-10.5.0/doc/example/Rakefile2 +35 -0
- data/vendor/bundle/gems/rake-10.5.0/doc/example/a.c +6 -0
- data/vendor/bundle/gems/rake-10.5.0/doc/example/b.c +6 -0
- data/vendor/bundle/gems/rake-10.5.0/doc/example/main.c +11 -0
- data/vendor/bundle/gems/rake-10.5.0/doc/glossary.rdoc +42 -0
- data/vendor/bundle/gems/rake-10.5.0/doc/jamis.rb +591 -0
- data/vendor/bundle/gems/rake-10.5.0/doc/proto_rake.rdoc +127 -0
- data/vendor/bundle/gems/rake-10.5.0/doc/rake.1 +141 -0
- data/vendor/bundle/gems/rake-10.5.0/doc/rakefile.rdoc +624 -0
- data/vendor/bundle/gems/rake-10.5.0/doc/rational.rdoc +151 -0
- data/vendor/bundle/gems/rake-10.5.0/doc/release_notes/rake-0.4.14.rdoc +23 -0
- data/vendor/bundle/gems/rake-10.5.0/doc/release_notes/rake-0.4.15.rdoc +35 -0
- data/vendor/bundle/gems/rake-10.5.0/doc/release_notes/rake-0.5.0.rdoc +53 -0
- data/vendor/bundle/gems/rake-10.5.0/doc/release_notes/rake-0.5.3.rdoc +78 -0
- data/vendor/bundle/gems/rake-10.5.0/doc/release_notes/rake-0.5.4.rdoc +46 -0
- data/vendor/bundle/gems/rake-10.5.0/doc/release_notes/rake-0.6.0.rdoc +141 -0
- data/vendor/bundle/gems/rake-10.5.0/doc/release_notes/rake-0.7.0.rdoc +119 -0
- data/vendor/bundle/gems/rake-10.5.0/doc/release_notes/rake-0.7.1.rdoc +59 -0
- data/vendor/bundle/gems/rake-10.5.0/doc/release_notes/rake-0.7.2.rdoc +121 -0
- data/vendor/bundle/gems/rake-10.5.0/doc/release_notes/rake-0.7.3.rdoc +47 -0
- data/vendor/bundle/gems/rake-10.5.0/doc/release_notes/rake-0.8.0.rdoc +114 -0
- data/vendor/bundle/gems/rake-10.5.0/doc/release_notes/rake-0.8.2.rdoc +165 -0
- data/vendor/bundle/gems/rake-10.5.0/doc/release_notes/rake-0.8.3.rdoc +112 -0
- data/vendor/bundle/gems/rake-10.5.0/doc/release_notes/rake-0.8.4.rdoc +147 -0
- data/vendor/bundle/gems/rake-10.5.0/doc/release_notes/rake-0.8.5.rdoc +53 -0
- data/vendor/bundle/gems/rake-10.5.0/doc/release_notes/rake-0.8.6.rdoc +37 -0
- data/vendor/bundle/gems/rake-10.5.0/doc/release_notes/rake-0.8.7.rdoc +55 -0
- data/vendor/bundle/gems/rake-10.5.0/doc/release_notes/rake-0.9.0.rdoc +112 -0
- data/vendor/bundle/gems/rake-10.5.0/doc/release_notes/rake-0.9.1.rdoc +52 -0
- data/vendor/bundle/gems/rake-10.5.0/doc/release_notes/rake-0.9.2.2.rdoc +55 -0
- data/vendor/bundle/gems/rake-10.5.0/doc/release_notes/rake-0.9.2.rdoc +49 -0
- data/vendor/bundle/gems/rake-10.5.0/doc/release_notes/rake-0.9.3.rdoc +102 -0
- data/vendor/bundle/gems/rake-10.5.0/doc/release_notes/rake-0.9.4.rdoc +60 -0
- data/vendor/bundle/gems/rake-10.5.0/doc/release_notes/rake-0.9.5.rdoc +55 -0
- data/vendor/bundle/gems/rake-10.5.0/doc/release_notes/rake-0.9.6.rdoc +64 -0
- data/vendor/bundle/gems/rake-10.5.0/doc/release_notes/rake-10.0.0.rdoc +178 -0
- data/vendor/bundle/gems/rake-10.5.0/doc/release_notes/rake-10.0.1.rdoc +58 -0
- data/vendor/bundle/gems/rake-10.5.0/doc/release_notes/rake-10.0.2.rdoc +53 -0
- data/vendor/bundle/gems/rake-10.5.0/doc/release_notes/rake-10.0.3.rdoc +191 -0
- data/vendor/bundle/gems/rake-10.5.0/doc/release_notes/rake-10.1.0.rdoc +61 -0
- data/vendor/bundle/gems/rake-10.5.0/lib/rake/alt_system.rb +110 -0
- data/vendor/bundle/gems/rake-10.5.0/lib/rake/application.rb +790 -0
- data/vendor/bundle/gems/rake-10.5.0/lib/rake/backtrace.rb +23 -0
- data/vendor/bundle/gems/rake-10.5.0/lib/rake/clean.rb +76 -0
- data/vendor/bundle/gems/rake-10.5.0/lib/rake/cloneable.rb +16 -0
- data/vendor/bundle/gems/rake-10.5.0/lib/rake/contrib/.document +1 -0
- data/vendor/bundle/gems/rake-10.5.0/lib/rake/contrib/compositepublisher.rb +21 -0
- data/vendor/bundle/gems/rake-10.5.0/lib/rake/contrib/ftptools.rb +137 -0
- data/vendor/bundle/gems/rake-10.5.0/lib/rake/contrib/publisher.rb +81 -0
- data/vendor/bundle/gems/rake-10.5.0/lib/rake/contrib/rubyforgepublisher.rb +18 -0
- data/vendor/bundle/gems/rake-10.5.0/lib/rake/contrib/sshpublisher.rb +61 -0
- data/vendor/bundle/gems/rake-10.5.0/lib/rake/contrib/sys.rb +4 -0
- data/vendor/bundle/gems/rake-10.5.0/lib/rake/cpu_counter.rb +125 -0
- data/vendor/bundle/gems/rake-10.5.0/lib/rake/default_loader.rb +14 -0
- data/vendor/bundle/gems/rake-10.5.0/lib/rake/dsl_definition.rb +201 -0
- data/vendor/bundle/gems/rake-10.5.0/lib/rake/early_time.rb +21 -0
- data/vendor/bundle/gems/rake-10.5.0/lib/rake/ext/core.rb +25 -0
- data/vendor/bundle/gems/rake-10.5.0/lib/rake/ext/module.rb +2 -0
- data/vendor/bundle/gems/rake-10.5.0/lib/rake/ext/pathname.rb +25 -0
- data/vendor/bundle/gems/rake-10.5.0/lib/rake/ext/string.rb +175 -0
- data/vendor/bundle/gems/rake-10.5.0/lib/rake/ext/time.rb +18 -0
- data/vendor/bundle/gems/rake-10.5.0/lib/rake/file_creation_task.rb +24 -0
- data/vendor/bundle/gems/rake-10.5.0/lib/rake/file_list.rb +428 -0
- data/vendor/bundle/gems/rake-10.5.0/lib/rake/file_task.rb +46 -0
- data/vendor/bundle/gems/rake-10.5.0/lib/rake/file_utils.rb +128 -0
- data/vendor/bundle/gems/rake-10.5.0/lib/rake/file_utils_ext.rb +144 -0
- data/vendor/bundle/gems/rake-10.5.0/lib/rake/gempackagetask.rb +4 -0
- data/vendor/bundle/gems/rake-10.5.0/lib/rake/invocation_chain.rb +56 -0
- data/vendor/bundle/gems/rake-10.5.0/lib/rake/invocation_exception_mixin.rb +16 -0
- data/vendor/bundle/gems/rake-10.5.0/lib/rake/late_time.rb +17 -0
- data/vendor/bundle/gems/rake-10.5.0/lib/rake/linked_list.rb +103 -0
- data/vendor/bundle/gems/rake-10.5.0/lib/rake/loaders/makefile.rb +53 -0
- data/vendor/bundle/gems/rake-10.5.0/lib/rake/multi_task.rb +13 -0
- data/vendor/bundle/gems/rake-10.5.0/lib/rake/name_space.rb +38 -0
- data/vendor/bundle/gems/rake-10.5.0/lib/rake/packagetask.rb +199 -0
- data/vendor/bundle/gems/rake-10.5.0/lib/rake/pathmap.rb +3 -0
- data/vendor/bundle/gems/rake-10.5.0/lib/rake/phony.rb +15 -0
- data/vendor/bundle/gems/rake-10.5.0/lib/rake/private_reader.rb +20 -0
- data/vendor/bundle/gems/rake-10.5.0/lib/rake/promise.rb +99 -0
- data/vendor/bundle/gems/rake-10.5.0/lib/rake/pseudo_status.rb +29 -0
- data/vendor/bundle/gems/rake-10.5.0/lib/rake/rake_module.rb +38 -0
- data/vendor/bundle/gems/rake-10.5.0/lib/rake/rake_test_loader.rb +22 -0
- data/vendor/bundle/gems/rake-10.5.0/lib/rake/rdoctask.rb +4 -0
- data/vendor/bundle/gems/rake-10.5.0/lib/rake/ruby182_test_unit_fix.rb +29 -0
- data/vendor/bundle/gems/rake-10.5.0/lib/rake/rule_recursion_overflow_error.rb +20 -0
- data/vendor/bundle/gems/rake-10.5.0/lib/rake/runtest.rb +27 -0
- data/vendor/bundle/gems/rake-10.5.0/lib/rake/scope.rb +42 -0
- data/vendor/bundle/gems/rake-10.5.0/lib/rake/task.rb +383 -0
- data/vendor/bundle/gems/rake-10.5.0/lib/rake/task_argument_error.rb +7 -0
- data/vendor/bundle/gems/rake-10.5.0/lib/rake/task_arguments.rb +98 -0
- data/vendor/bundle/gems/rake-10.5.0/lib/rake/task_manager.rb +307 -0
- data/vendor/bundle/gems/rake-10.5.0/lib/rake/tasklib.rb +24 -0
- data/vendor/bundle/gems/rake-10.5.0/lib/rake/testtask.rb +213 -0
- data/vendor/bundle/gems/rake-10.5.0/lib/rake/thread_history_display.rb +48 -0
- data/vendor/bundle/gems/rake-10.5.0/lib/rake/thread_pool.rb +164 -0
- data/vendor/bundle/gems/rake-10.5.0/lib/rake/trace_output.rb +22 -0
- data/vendor/bundle/gems/rake-10.5.0/lib/rake/version.rb +7 -0
- data/vendor/bundle/gems/rake-10.5.0/lib/rake/win32.rb +56 -0
- data/vendor/bundle/gems/rake-10.5.0/lib/rake.rb +79 -0
- data/vendor/bundle/gems/rake-10.5.0/rakelib/publish.rake +20 -0
- data/vendor/bundle/gems/rake-10.5.0/rakelib/test_times.rake +25 -0
- data/vendor/bundle/gems/rake-10.5.0/test/file_creation.rb +34 -0
- data/vendor/bundle/gems/rake-10.5.0/test/helper.rb +129 -0
- data/vendor/bundle/gems/rake-10.5.0/test/support/rakefile_definitions.rb +478 -0
- data/vendor/bundle/gems/rake-10.5.0/test/support/ruby_runner.rb +34 -0
- data/vendor/bundle/gems/rake-10.5.0/test/test_private_reader.rb +42 -0
- data/vendor/bundle/gems/rake-10.5.0/test/test_rake.rb +40 -0
- data/vendor/bundle/gems/rake-10.5.0/test/test_rake_application.rb +643 -0
- data/vendor/bundle/gems/rake-10.5.0/test/test_rake_application_options.rb +468 -0
- data/vendor/bundle/gems/rake-10.5.0/test/test_rake_backtrace.rb +119 -0
- data/vendor/bundle/gems/rake-10.5.0/test/test_rake_clean.rb +61 -0
- data/vendor/bundle/gems/rake-10.5.0/test/test_rake_cpu_counter.rb +68 -0
- data/vendor/bundle/gems/rake-10.5.0/test/test_rake_definitions.rb +84 -0
- data/vendor/bundle/gems/rake-10.5.0/test/test_rake_directory_task.rb +76 -0
- data/vendor/bundle/gems/rake-10.5.0/test/test_rake_dsl.rb +40 -0
- data/vendor/bundle/gems/rake-10.5.0/test/test_rake_early_time.rb +31 -0
- data/vendor/bundle/gems/rake-10.5.0/test/test_rake_extension.rb +59 -0
- data/vendor/bundle/gems/rake-10.5.0/test/test_rake_file_creation_task.rb +56 -0
- data/vendor/bundle/gems/rake-10.5.0/test/test_rake_file_list.rb +670 -0
- data/vendor/bundle/gems/rake-10.5.0/test/test_rake_file_list_path_map.rb +8 -0
- data/vendor/bundle/gems/rake-10.5.0/test/test_rake_file_task.rb +197 -0
- data/vendor/bundle/gems/rake-10.5.0/test/test_rake_file_utils.rb +314 -0
- data/vendor/bundle/gems/rake-10.5.0/test/test_rake_ftp_file.rb +74 -0
- data/vendor/bundle/gems/rake-10.5.0/test/test_rake_functional.rb +482 -0
- data/vendor/bundle/gems/rake-10.5.0/test/test_rake_invocation_chain.rb +64 -0
- data/vendor/bundle/gems/rake-10.5.0/test/test_rake_late_time.rb +18 -0
- data/vendor/bundle/gems/rake-10.5.0/test/test_rake_linked_list.rb +84 -0
- data/vendor/bundle/gems/rake-10.5.0/test/test_rake_makefile_loader.rb +46 -0
- data/vendor/bundle/gems/rake-10.5.0/test/test_rake_multi_task.rb +64 -0
- data/vendor/bundle/gems/rake-10.5.0/test/test_rake_name_space.rb +57 -0
- data/vendor/bundle/gems/rake-10.5.0/test/test_rake_package_task.rb +79 -0
- data/vendor/bundle/gems/rake-10.5.0/test/test_rake_path_map.rb +168 -0
- data/vendor/bundle/gems/rake-10.5.0/test/test_rake_path_map_explode.rb +34 -0
- data/vendor/bundle/gems/rake-10.5.0/test/test_rake_path_map_partial.rb +18 -0
- data/vendor/bundle/gems/rake-10.5.0/test/test_rake_pathname_extensions.rb +15 -0
- data/vendor/bundle/gems/rake-10.5.0/test/test_rake_pseudo_status.rb +21 -0
- data/vendor/bundle/gems/rake-10.5.0/test/test_rake_rake_test_loader.rb +20 -0
- data/vendor/bundle/gems/rake-10.5.0/test/test_rake_reduce_compat.rb +26 -0
- data/vendor/bundle/gems/rake-10.5.0/test/test_rake_require.rb +40 -0
- data/vendor/bundle/gems/rake-10.5.0/test/test_rake_rules.rb +388 -0
- data/vendor/bundle/gems/rake-10.5.0/test/test_rake_scope.rb +44 -0
- data/vendor/bundle/gems/rake-10.5.0/test/test_rake_task.rb +393 -0
- data/vendor/bundle/gems/rake-10.5.0/test/test_rake_task_argument_parsing.rb +119 -0
- data/vendor/bundle/gems/rake-10.5.0/test/test_rake_task_arguments.rb +127 -0
- data/vendor/bundle/gems/rake-10.5.0/test/test_rake_task_lib.rb +9 -0
- data/vendor/bundle/gems/rake-10.5.0/test/test_rake_task_manager.rb +178 -0
- data/vendor/bundle/gems/rake-10.5.0/test/test_rake_task_manager_argument_resolution.rb +19 -0
- data/vendor/bundle/gems/rake-10.5.0/test/test_rake_task_with_arguments.rb +172 -0
- data/vendor/bundle/gems/rake-10.5.0/test/test_rake_test_task.rb +146 -0
- data/vendor/bundle/gems/rake-10.5.0/test/test_rake_thread_pool.rb +145 -0
- data/vendor/bundle/gems/rake-10.5.0/test/test_rake_top_level_functions.rb +71 -0
- data/vendor/bundle/gems/rake-10.5.0/test/test_rake_win32.rb +72 -0
- data/vendor/bundle/gems/rake-10.5.0/test/test_thread_history_display.rb +101 -0
- data/vendor/bundle/gems/rake-10.5.0/test/test_trace_output.rb +52 -0
- data/vendor/bundle/gems/rspec-3.4.0/LICENSE.md +27 -0
- data/vendor/bundle/gems/rspec-3.4.0/README.md +39 -0
- data/vendor/bundle/gems/rspec-3.4.0/lib/rspec/version.rb +5 -0
- data/vendor/bundle/gems/rspec-3.4.0/lib/rspec.rb +3 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/.document +5 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/.yardopts +8 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/Changelog.md +1972 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/LICENSE.md +26 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/README.md +384 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/exe/rspec +4 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/autorun.rb +3 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/backtrace_formatter.rb +65 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/bisect/coordinator.rb +66 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/bisect/example_minimizer.rb +169 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/bisect/runner.rb +139 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/bisect/server.rb +61 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/configuration.rb +1869 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/configuration_options.rb +191 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/drb.rb +111 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/dsl.rb +96 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/example.rb +631 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/example_group.rb +816 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/example_status_persister.rb +235 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/filter_manager.rb +231 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/flat_map.rb +20 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/formatters/base_formatter.rb +70 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/formatters/base_text_formatter.rb +77 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/formatters/bisect_formatter.rb +68 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/formatters/bisect_progress_formatter.rb +144 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/formatters/console_codes.rb +65 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/formatters/deprecation_formatter.rb +223 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/formatters/documentation_formatter.rb +70 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/formatters/exception_presenter.rb +482 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/formatters/fallback_message_formatter.rb +28 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/formatters/helpers.rb +109 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/formatters/html_formatter.rb +151 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/formatters/html_printer.rb +414 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/formatters/html_snippet_extractor.rb +116 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/formatters/json_formatter.rb +96 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/formatters/profile_formatter.rb +68 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/formatters/progress_formatter.rb +28 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/formatters/protocol.rb +181 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/formatters/snippet_extractor.rb +136 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/formatters.rb +255 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/hooks.rb +638 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/memoized_helpers.rb +532 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/metadata.rb +498 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/metadata_filter.rb +231 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/minitest_assertions_adapter.rb +31 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/mocking_adapters/flexmock.rb +31 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/mocking_adapters/mocha.rb +57 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/mocking_adapters/null.rb +14 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/mocking_adapters/rr.rb +31 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/mocking_adapters/rspec.rb +32 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/notifications.rb +499 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/option_parser.rb +319 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/ordering.rb +158 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/pending.rb +165 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/profiler.rb +32 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/project_initializer/.rspec +2 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/project_initializer/spec/spec_helper.rb +96 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/project_initializer.rb +48 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/rake_task.rb +167 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/reporter.rb +236 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/ruby_project.rb +53 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/runner.rb +183 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/sandbox.rb +37 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/set.rb +49 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/shared_context.rb +55 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/shared_example_group.rb +212 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/shell_escape.rb +49 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/source/location.rb +13 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/source/node.rb +93 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/source/syntax_highlighter.rb +71 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/source/token.rb +86 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/source.rb +76 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/test_unit_assertions_adapter.rb +30 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/version.rb +9 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/warnings.rb +40 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/world.rb +213 -0
- data/vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core.rb +181 -0
- data/vendor/bundle/gems/rspec-expectations-3.4.0/.document +5 -0
- data/vendor/bundle/gems/rspec-expectations-3.4.0/.yardopts +6 -0
- data/vendor/bundle/gems/rspec-expectations-3.4.0/Changelog.md +979 -0
- data/vendor/bundle/gems/rspec-expectations-3.4.0/LICENSE.md +25 -0
- data/vendor/bundle/gems/rspec-expectations-3.4.0/README.md +303 -0
- data/vendor/bundle/gems/rspec-expectations-3.4.0/lib/rspec/expectations/configuration.rb +164 -0
- data/vendor/bundle/gems/rspec-expectations-3.4.0/lib/rspec/expectations/expectation_target.rb +113 -0
- data/vendor/bundle/gems/rspec-expectations-3.4.0/lib/rspec/expectations/fail_with.rb +31 -0
- data/vendor/bundle/gems/rspec-expectations-3.4.0/lib/rspec/expectations/failure_aggregator.rb +194 -0
- data/vendor/bundle/gems/rspec-expectations-3.4.0/lib/rspec/expectations/handler.rb +170 -0
- data/vendor/bundle/gems/rspec-expectations-3.4.0/lib/rspec/expectations/minitest_integration.rb +31 -0
- data/vendor/bundle/gems/rspec-expectations-3.4.0/lib/rspec/expectations/syntax.rb +132 -0
- data/vendor/bundle/gems/rspec-expectations-3.4.0/lib/rspec/expectations/version.rb +8 -0
- data/vendor/bundle/gems/rspec-expectations-3.4.0/lib/rspec/expectations.rb +81 -0
- data/vendor/bundle/gems/rspec-expectations-3.4.0/lib/rspec/matchers/aliased_matcher.rb +116 -0
- data/vendor/bundle/gems/rspec-expectations-3.4.0/lib/rspec/matchers/built_in/all.rb +85 -0
- data/vendor/bundle/gems/rspec-expectations-3.4.0/lib/rspec/matchers/built_in/base_matcher.rb +181 -0
- data/vendor/bundle/gems/rspec-expectations-3.4.0/lib/rspec/matchers/built_in/be.rb +285 -0
- data/vendor/bundle/gems/rspec-expectations-3.4.0/lib/rspec/matchers/built_in/be_between.rb +77 -0
- data/vendor/bundle/gems/rspec-expectations-3.4.0/lib/rspec/matchers/built_in/be_instance_of.rb +22 -0
- data/vendor/bundle/gems/rspec-expectations-3.4.0/lib/rspec/matchers/built_in/be_kind_of.rb +16 -0
- data/vendor/bundle/gems/rspec-expectations-3.4.0/lib/rspec/matchers/built_in/be_within.rb +72 -0
- data/vendor/bundle/gems/rspec-expectations-3.4.0/lib/rspec/matchers/built_in/change.rb +354 -0
- data/vendor/bundle/gems/rspec-expectations-3.4.0/lib/rspec/matchers/built_in/compound.rb +272 -0
- data/vendor/bundle/gems/rspec-expectations-3.4.0/lib/rspec/matchers/built_in/contain_exactly.rb +286 -0
- data/vendor/bundle/gems/rspec-expectations-3.4.0/lib/rspec/matchers/built_in/cover.rb +24 -0
- data/vendor/bundle/gems/rspec-expectations-3.4.0/lib/rspec/matchers/built_in/eq.rb +40 -0
- data/vendor/bundle/gems/rspec-expectations-3.4.0/lib/rspec/matchers/built_in/eql.rb +34 -0
- data/vendor/bundle/gems/rspec-expectations-3.4.0/lib/rspec/matchers/built_in/equal.rb +81 -0
- data/vendor/bundle/gems/rspec-expectations-3.4.0/lib/rspec/matchers/built_in/exist.rb +86 -0
- data/vendor/bundle/gems/rspec-expectations-3.4.0/lib/rspec/matchers/built_in/has.rb +103 -0
- data/vendor/bundle/gems/rspec-expectations-3.4.0/lib/rspec/matchers/built_in/have_attributes.rb +114 -0
- data/vendor/bundle/gems/rspec-expectations-3.4.0/lib/rspec/matchers/built_in/include.rb +130 -0
- data/vendor/bundle/gems/rspec-expectations-3.4.0/lib/rspec/matchers/built_in/match.rb +106 -0
- data/vendor/bundle/gems/rspec-expectations-3.4.0/lib/rspec/matchers/built_in/operators.rb +128 -0
- data/vendor/bundle/gems/rspec-expectations-3.4.0/lib/rspec/matchers/built_in/output.rb +200 -0
- data/vendor/bundle/gems/rspec-expectations-3.4.0/lib/rspec/matchers/built_in/raise_error.rb +228 -0
- data/vendor/bundle/gems/rspec-expectations-3.4.0/lib/rspec/matchers/built_in/respond_to.rb +90 -0
- data/vendor/bundle/gems/rspec-expectations-3.4.0/lib/rspec/matchers/built_in/satisfy.rb +37 -0
- data/vendor/bundle/gems/rspec-expectations-3.4.0/lib/rspec/matchers/built_in/start_or_end_with.rb +94 -0
- data/vendor/bundle/gems/rspec-expectations-3.4.0/lib/rspec/matchers/built_in/throw_symbol.rb +132 -0
- data/vendor/bundle/gems/rspec-expectations-3.4.0/lib/rspec/matchers/built_in/yield.rb +419 -0
- data/vendor/bundle/gems/rspec-expectations-3.4.0/lib/rspec/matchers/built_in.rb +52 -0
- data/vendor/bundle/gems/rspec-expectations-3.4.0/lib/rspec/matchers/composable.rb +185 -0
- data/vendor/bundle/gems/rspec-expectations-3.4.0/lib/rspec/matchers/dsl.rb +453 -0
- data/vendor/bundle/gems/rspec-expectations-3.4.0/lib/rspec/matchers/english_phrasing.rb +42 -0
- data/vendor/bundle/gems/rspec-expectations-3.4.0/lib/rspec/matchers/expecteds_for_multiple_diffs.rb +73 -0
- data/vendor/bundle/gems/rspec-expectations-3.4.0/lib/rspec/matchers/fail_matchers.rb +42 -0
- data/vendor/bundle/gems/rspec-expectations-3.4.0/lib/rspec/matchers/generated_descriptions.rb +42 -0
- data/vendor/bundle/gems/rspec-expectations-3.4.0/lib/rspec/matchers/matcher_delegator.rb +35 -0
- data/vendor/bundle/gems/rspec-expectations-3.4.0/lib/rspec/matchers/matcher_protocol.rb +99 -0
- data/vendor/bundle/gems/rspec-expectations-3.4.0/lib/rspec/matchers.rb +1037 -0
- data/vendor/bundle/gems/rspec-mocks-3.4.1/.document +5 -0
- data/vendor/bundle/gems/rspec-mocks-3.4.1/.yardopts +6 -0
- data/vendor/bundle/gems/rspec-mocks-3.4.1/Changelog.md +991 -0
- data/vendor/bundle/gems/rspec-mocks-3.4.1/LICENSE.md +25 -0
- data/vendor/bundle/gems/rspec-mocks-3.4.1/README.md +445 -0
- data/vendor/bundle/gems/rspec-mocks-3.4.1/lib/rspec/mocks/any_instance/chain.rb +110 -0
- data/vendor/bundle/gems/rspec-mocks-3.4.1/lib/rspec/mocks/any_instance/error_generator.rb +31 -0
- data/vendor/bundle/gems/rspec-mocks-3.4.1/lib/rspec/mocks/any_instance/expect_chain_chain.rb +35 -0
- data/vendor/bundle/gems/rspec-mocks-3.4.1/lib/rspec/mocks/any_instance/expectation_chain.rb +48 -0
- data/vendor/bundle/gems/rspec-mocks-3.4.1/lib/rspec/mocks/any_instance/message_chains.rb +83 -0
- data/vendor/bundle/gems/rspec-mocks-3.4.1/lib/rspec/mocks/any_instance/proxy.rb +116 -0
- data/vendor/bundle/gems/rspec-mocks-3.4.1/lib/rspec/mocks/any_instance/recorder.rb +268 -0
- data/vendor/bundle/gems/rspec-mocks-3.4.1/lib/rspec/mocks/any_instance/stub_chain.rb +46 -0
- data/vendor/bundle/gems/rspec-mocks-3.4.1/lib/rspec/mocks/any_instance/stub_chain_chain.rb +27 -0
- data/vendor/bundle/gems/rspec-mocks-3.4.1/lib/rspec/mocks/any_instance.rb +11 -0
- data/vendor/bundle/gems/rspec-mocks-3.4.1/lib/rspec/mocks/argument_list_matcher.rb +100 -0
- data/vendor/bundle/gems/rspec-mocks-3.4.1/lib/rspec/mocks/argument_matchers.rb +320 -0
- data/vendor/bundle/gems/rspec-mocks-3.4.1/lib/rspec/mocks/configuration.rb +205 -0
- data/vendor/bundle/gems/rspec-mocks-3.4.1/lib/rspec/mocks/error_generator.rb +367 -0
- data/vendor/bundle/gems/rspec-mocks-3.4.1/lib/rspec/mocks/example_methods.rb +422 -0
- data/vendor/bundle/gems/rspec-mocks-3.4.1/lib/rspec/mocks/instance_method_stasher.rb +135 -0
- data/vendor/bundle/gems/rspec-mocks-3.4.1/lib/rspec/mocks/marshal_extension.rb +41 -0
- data/vendor/bundle/gems/rspec-mocks-3.4.1/lib/rspec/mocks/matchers/expectation_customization.rb +20 -0
- data/vendor/bundle/gems/rspec-mocks-3.4.1/lib/rspec/mocks/matchers/have_received.rb +128 -0
- data/vendor/bundle/gems/rspec-mocks-3.4.1/lib/rspec/mocks/matchers/receive.rb +130 -0
- data/vendor/bundle/gems/rspec-mocks-3.4.1/lib/rspec/mocks/matchers/receive_message_chain.rb +80 -0
- data/vendor/bundle/gems/rspec-mocks-3.4.1/lib/rspec/mocks/matchers/receive_messages.rb +75 -0
- data/vendor/bundle/gems/rspec-mocks-3.4.1/lib/rspec/mocks/message_chain.rb +87 -0
- data/vendor/bundle/gems/rspec-mocks-3.4.1/lib/rspec/mocks/message_expectation.rb +717 -0
- data/vendor/bundle/gems/rspec-mocks-3.4.1/lib/rspec/mocks/method_double.rb +287 -0
- data/vendor/bundle/gems/rspec-mocks-3.4.1/lib/rspec/mocks/method_reference.rb +192 -0
- data/vendor/bundle/gems/rspec-mocks-3.4.1/lib/rspec/mocks/mutate_const.rb +335 -0
- data/vendor/bundle/gems/rspec-mocks-3.4.1/lib/rspec/mocks/object_reference.rb +149 -0
- data/vendor/bundle/gems/rspec-mocks-3.4.1/lib/rspec/mocks/order_group.rb +81 -0
- data/vendor/bundle/gems/rspec-mocks-3.4.1/lib/rspec/mocks/proxy.rb +484 -0
- data/vendor/bundle/gems/rspec-mocks-3.4.1/lib/rspec/mocks/space.rb +238 -0
- data/vendor/bundle/gems/rspec-mocks-3.4.1/lib/rspec/mocks/standalone.rb +3 -0
- data/vendor/bundle/gems/rspec-mocks-3.4.1/lib/rspec/mocks/syntax.rb +325 -0
- data/vendor/bundle/gems/rspec-mocks-3.4.1/lib/rspec/mocks/targets.rb +97 -0
- data/vendor/bundle/gems/rspec-mocks-3.4.1/lib/rspec/mocks/test_double.rb +170 -0
- data/vendor/bundle/gems/rspec-mocks-3.4.1/lib/rspec/mocks/verifying_double.rb +129 -0
- data/vendor/bundle/gems/rspec-mocks-3.4.1/lib/rspec/mocks/verifying_message_expectation.rb +54 -0
- data/vendor/bundle/gems/rspec-mocks-3.4.1/lib/rspec/mocks/verifying_proxy.rb +213 -0
- data/vendor/bundle/gems/rspec-mocks-3.4.1/lib/rspec/mocks/version.rb +9 -0
- data/vendor/bundle/gems/rspec-mocks-3.4.1/lib/rspec/mocks.rb +126 -0
- data/vendor/bundle/gems/rspec-support-3.4.1/Changelog.md +151 -0
- data/vendor/bundle/gems/rspec-support-3.4.1/LICENSE.md +23 -0
- data/vendor/bundle/gems/rspec-support-3.4.1/README.md +40 -0
- data/vendor/bundle/gems/rspec-support-3.4.1/lib/rspec/support/caller_filter.rb +83 -0
- data/vendor/bundle/gems/rspec-support-3.4.1/lib/rspec/support/comparable_version.rb +46 -0
- data/vendor/bundle/gems/rspec-support-3.4.1/lib/rspec/support/differ.rb +215 -0
- data/vendor/bundle/gems/rspec-support-3.4.1/lib/rspec/support/directory_maker.rb +63 -0
- data/vendor/bundle/gems/rspec-support-3.4.1/lib/rspec/support/encoded_string.rb +155 -0
- data/vendor/bundle/gems/rspec-support-3.4.1/lib/rspec/support/fuzzy_matcher.rb +48 -0
- data/vendor/bundle/gems/rspec-support-3.4.1/lib/rspec/support/hunk_generator.rb +47 -0
- data/vendor/bundle/gems/rspec-support-3.4.1/lib/rspec/support/matcher_definition.rb +42 -0
- data/vendor/bundle/gems/rspec-support-3.4.1/lib/rspec/support/method_signature_verifier.rb +290 -0
- data/vendor/bundle/gems/rspec-support-3.4.1/lib/rspec/support/mutex.rb +73 -0
- data/vendor/bundle/gems/rspec-support-3.4.1/lib/rspec/support/object_formatter.rb +108 -0
- data/vendor/bundle/gems/rspec-support-3.4.1/lib/rspec/support/recursive_const_methods.rb +76 -0
- data/vendor/bundle/gems/rspec-support-3.4.1/lib/rspec/support/reentrant_mutex.rb +53 -0
- data/vendor/bundle/gems/rspec-support-3.4.1/lib/rspec/support/ruby_features.rb +149 -0
- data/vendor/bundle/gems/rspec-support-3.4.1/lib/rspec/support/spec/deprecation_helpers.rb +64 -0
- data/vendor/bundle/gems/rspec-support-3.4.1/lib/rspec/support/spec/formatting_support.rb +9 -0
- data/vendor/bundle/gems/rspec-support-3.4.1/lib/rspec/support/spec/in_sub_process.rb +52 -0
- data/vendor/bundle/gems/rspec-support-3.4.1/lib/rspec/support/spec/library_wide_checks.rb +152 -0
- data/vendor/bundle/gems/rspec-support-3.4.1/lib/rspec/support/spec/shell_out.rb +71 -0
- data/vendor/bundle/gems/rspec-support-3.4.1/lib/rspec/support/spec/stderr_splitter.rb +63 -0
- data/vendor/bundle/gems/rspec-support-3.4.1/lib/rspec/support/spec/string_matcher.rb +46 -0
- data/vendor/bundle/gems/rspec-support-3.4.1/lib/rspec/support/spec/with_isolated_directory.rb +9 -0
- data/vendor/bundle/gems/rspec-support-3.4.1/lib/rspec/support/spec/with_isolated_stderr.rb +13 -0
- data/vendor/bundle/gems/rspec-support-3.4.1/lib/rspec/support/spec.rb +81 -0
- data/vendor/bundle/gems/rspec-support-3.4.1/lib/rspec/support/version.rb +7 -0
- data/vendor/bundle/gems/rspec-support-3.4.1/lib/rspec/support/version_checker.rb +53 -0
- data/vendor/bundle/gems/rspec-support-3.4.1/lib/rspec/support/warnings.rb +39 -0
- data/vendor/bundle/gems/rspec-support-3.4.1/lib/rspec/support.rb +139 -0
- data/vendor/bundle/specifications/diff-lcs-1.2.5.gemspec +68 -0
- data/vendor/bundle/specifications/rake-10.5.0.gemspec +43 -0
- data/vendor/bundle/specifications/rspec-3.4.0.gemspec +42 -0
- data/vendor/bundle/specifications/rspec-core-3.4.4.gemspec +65 -0
- data/vendor/bundle/specifications/rspec-expectations-3.4.0.gemspec +50 -0
- data/vendor/bundle/specifications/rspec-mocks-3.4.1.gemspec +50 -0
- data/vendor/bundle/specifications/rspec-support-3.4.1.gemspec +41 -0
- metadata +532 -0
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
require 'diff/lcs'
|
|
2
|
+
require 'diff/lcs/hunk'
|
|
3
|
+
|
|
4
|
+
module RSpec
|
|
5
|
+
module Support
|
|
6
|
+
# @private
|
|
7
|
+
class HunkGenerator
|
|
8
|
+
def initialize(actual, expected)
|
|
9
|
+
@actual = actual
|
|
10
|
+
@expected = expected
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def hunks
|
|
14
|
+
@file_length_difference = 0
|
|
15
|
+
@hunks ||= diffs.map do |piece|
|
|
16
|
+
build_hunk(piece)
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
private
|
|
21
|
+
|
|
22
|
+
def diffs
|
|
23
|
+
Diff::LCS.diff(expected_lines, actual_lines)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def expected_lines
|
|
27
|
+
@expected.split("\n").map! { |e| e.chomp }
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def actual_lines
|
|
31
|
+
@actual.split("\n").map! { |e| e.chomp }
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def build_hunk(piece)
|
|
35
|
+
Diff::LCS::Hunk.new(
|
|
36
|
+
expected_lines, actual_lines, piece, context_lines, @file_length_difference
|
|
37
|
+
).tap do |h|
|
|
38
|
+
@file_length_difference = h.file_length_difference
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def context_lines
|
|
43
|
+
3
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
module RSpec
|
|
2
|
+
module Support
|
|
3
|
+
# @private
|
|
4
|
+
def self.matcher_definitions
|
|
5
|
+
@matcher_definitions ||= []
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
# Used internally to break cyclic dependency between mocks, expectations,
|
|
9
|
+
# and support. We don't currently have a consistent implementation of our
|
|
10
|
+
# matchers, though we are considering changing that:
|
|
11
|
+
# https://github.com/rspec/rspec-mocks/issues/513
|
|
12
|
+
#
|
|
13
|
+
# @private
|
|
14
|
+
def self.register_matcher_definition(&block)
|
|
15
|
+
matcher_definitions << block
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Remove a previously registered matcher. Useful for cleaning up after
|
|
19
|
+
# yourself in specs.
|
|
20
|
+
#
|
|
21
|
+
# @private
|
|
22
|
+
def self.deregister_matcher_definition(&block)
|
|
23
|
+
matcher_definitions.delete(block)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# @private
|
|
27
|
+
def self.is_a_matcher?(object)
|
|
28
|
+
matcher_definitions.any? { |md| md.call(object) }
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# @api private
|
|
32
|
+
#
|
|
33
|
+
# gives a string representation of an object for use in RSpec descriptions
|
|
34
|
+
def self.rspec_description_for_object(object)
|
|
35
|
+
if RSpec::Support.is_a_matcher?(object) && object.respond_to?(:description)
|
|
36
|
+
object.description
|
|
37
|
+
else
|
|
38
|
+
object
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
require 'rspec/support'
|
|
2
|
+
RSpec::Support.require_rspec_support "ruby_features"
|
|
3
|
+
RSpec::Support.require_rspec_support "matcher_definition"
|
|
4
|
+
|
|
5
|
+
module RSpec
|
|
6
|
+
module Support
|
|
7
|
+
# Extracts info about the number of arguments and allowed/required
|
|
8
|
+
# keyword args of a given method.
|
|
9
|
+
#
|
|
10
|
+
# @private
|
|
11
|
+
class MethodSignature
|
|
12
|
+
attr_reader :min_non_kw_args, :max_non_kw_args, :optional_kw_args, :required_kw_args
|
|
13
|
+
|
|
14
|
+
def initialize(method)
|
|
15
|
+
@method = method
|
|
16
|
+
@optional_kw_args = []
|
|
17
|
+
@required_kw_args = []
|
|
18
|
+
classify_parameters
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def non_kw_args_arity_description
|
|
22
|
+
case max_non_kw_args
|
|
23
|
+
when min_non_kw_args then min_non_kw_args.to_s
|
|
24
|
+
when INFINITY then "#{min_non_kw_args} or more"
|
|
25
|
+
else "#{min_non_kw_args} to #{max_non_kw_args}"
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def valid_non_kw_args?(positional_arg_count)
|
|
30
|
+
min_non_kw_args <= positional_arg_count &&
|
|
31
|
+
positional_arg_count <= max_non_kw_args
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
if RubyFeatures.optional_and_splat_args_supported?
|
|
35
|
+
def description
|
|
36
|
+
@description ||= begin
|
|
37
|
+
parts = []
|
|
38
|
+
|
|
39
|
+
unless non_kw_args_arity_description == "0"
|
|
40
|
+
parts << "arity of #{non_kw_args_arity_description}"
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
if @optional_kw_args.any?
|
|
44
|
+
parts << "optional keyword args (#{@optional_kw_args.map(&:inspect).join(", ")})"
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
if @required_kw_args.any?
|
|
48
|
+
parts << "required keyword args (#{@required_kw_args.map(&:inspect).join(", ")})"
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
parts << "any additional keyword args" if @allows_any_kw_args
|
|
52
|
+
|
|
53
|
+
parts.join(" and ")
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def missing_kw_args_from(given_kw_args)
|
|
58
|
+
@required_kw_args - given_kw_args
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def invalid_kw_args_from(given_kw_args)
|
|
62
|
+
return [] if @allows_any_kw_args
|
|
63
|
+
given_kw_args - @allowed_kw_args
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def has_kw_args_in?(args)
|
|
67
|
+
Hash === args.last && could_contain_kw_args?(args)
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# Without considering what the last arg is, could it
|
|
71
|
+
# contain keyword arguments?
|
|
72
|
+
def could_contain_kw_args?(args)
|
|
73
|
+
return false if args.count <= min_non_kw_args
|
|
74
|
+
@allows_any_kw_args || @allowed_kw_args.any?
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def classify_parameters
|
|
78
|
+
optional_non_kw_args = @min_non_kw_args = 0
|
|
79
|
+
@allows_any_kw_args = false
|
|
80
|
+
|
|
81
|
+
@method.parameters.each do |(type, name)|
|
|
82
|
+
case type
|
|
83
|
+
# def foo(a:)
|
|
84
|
+
when :keyreq then @required_kw_args << name
|
|
85
|
+
# def foo(a: 1)
|
|
86
|
+
when :key then @optional_kw_args << name
|
|
87
|
+
# def foo(**kw_args)
|
|
88
|
+
when :keyrest then @allows_any_kw_args = true
|
|
89
|
+
# def foo(a)
|
|
90
|
+
when :req then @min_non_kw_args += 1
|
|
91
|
+
# def foo(a = 1)
|
|
92
|
+
when :opt then optional_non_kw_args += 1
|
|
93
|
+
# def foo(*a)
|
|
94
|
+
when :rest then optional_non_kw_args = INFINITY
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
@max_non_kw_args = @min_non_kw_args + optional_non_kw_args
|
|
99
|
+
@allowed_kw_args = @required_kw_args + @optional_kw_args
|
|
100
|
+
end
|
|
101
|
+
else
|
|
102
|
+
def description
|
|
103
|
+
"arity of #{non_kw_args_arity_description}"
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def missing_kw_args_from(_given_kw_args)
|
|
107
|
+
[]
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
def invalid_kw_args_from(_given_kw_args)
|
|
111
|
+
[]
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def has_kw_args_in?(_args)
|
|
115
|
+
false
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
def could_contain_kw_args?(*)
|
|
119
|
+
false
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
def classify_parameters
|
|
123
|
+
arity = @method.arity
|
|
124
|
+
if arity < 0
|
|
125
|
+
# `~` inverts the one's complement and gives us the
|
|
126
|
+
# number of required args
|
|
127
|
+
@min_non_kw_args = ~arity
|
|
128
|
+
@max_non_kw_args = INFINITY
|
|
129
|
+
else
|
|
130
|
+
@min_non_kw_args = arity
|
|
131
|
+
@max_non_kw_args = arity
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
INFINITY = 1 / 0.0
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
# Some versions of JRuby have a nasty bug we have to work around :(.
|
|
140
|
+
# https://github.com/jruby/jruby/issues/2816
|
|
141
|
+
if RSpec::Support::Ruby.jruby? &&
|
|
142
|
+
RubyFeatures.optional_and_splat_args_supported? &&
|
|
143
|
+
Class.new { attr_writer :foo }.instance_method(:foo=).parameters == []
|
|
144
|
+
|
|
145
|
+
class MethodSignature < remove_const(:MethodSignature)
|
|
146
|
+
private
|
|
147
|
+
|
|
148
|
+
def classify_parameters
|
|
149
|
+
super
|
|
150
|
+
return unless @method.parameters == [] && @method.arity == 1
|
|
151
|
+
@max_non_kw_args = @min_non_kw_args = 1
|
|
152
|
+
end
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
# Deals with the slightly different semantics of block arguments.
|
|
157
|
+
# For methods, arguments are required unless a default value is provided.
|
|
158
|
+
# For blocks, arguments are optional, even if no default value is provided.
|
|
159
|
+
#
|
|
160
|
+
# However, we want to treat block args as required since you virtually
|
|
161
|
+
# always want to pass a value for each received argument and our
|
|
162
|
+
# `and_yield` has treated block args as required for many years.
|
|
163
|
+
#
|
|
164
|
+
# @api private
|
|
165
|
+
class BlockSignature < MethodSignature
|
|
166
|
+
if RubyFeatures.optional_and_splat_args_supported?
|
|
167
|
+
def classify_parameters
|
|
168
|
+
super
|
|
169
|
+
@min_non_kw_args = @max_non_kw_args unless @max_non_kw_args == INFINITY
|
|
170
|
+
end
|
|
171
|
+
end
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
# Abstract base class for signature verifiers.
|
|
175
|
+
#
|
|
176
|
+
# @api private
|
|
177
|
+
class MethodSignatureVerifier
|
|
178
|
+
attr_reader :non_kw_args, :kw_args
|
|
179
|
+
|
|
180
|
+
def initialize(signature, args)
|
|
181
|
+
@signature = signature
|
|
182
|
+
@non_kw_args, @kw_args = split_args(*args)
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
def valid?
|
|
186
|
+
missing_kw_args.empty? &&
|
|
187
|
+
invalid_kw_args.empty? &&
|
|
188
|
+
valid_non_kw_args?
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
def error_message
|
|
192
|
+
if missing_kw_args.any?
|
|
193
|
+
"Missing required keyword arguments: %s" % [
|
|
194
|
+
missing_kw_args.join(", ")
|
|
195
|
+
]
|
|
196
|
+
elsif invalid_kw_args.any?
|
|
197
|
+
"Invalid keyword arguments provided: %s" % [
|
|
198
|
+
invalid_kw_args.join(", ")
|
|
199
|
+
]
|
|
200
|
+
elsif !valid_non_kw_args?
|
|
201
|
+
"Wrong number of arguments. Expected %s, got %s." % [
|
|
202
|
+
@signature.non_kw_args_arity_description,
|
|
203
|
+
non_kw_args.length
|
|
204
|
+
]
|
|
205
|
+
end
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
private
|
|
209
|
+
|
|
210
|
+
def valid_non_kw_args?
|
|
211
|
+
@signature.valid_non_kw_args?(non_kw_args.length)
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
def missing_kw_args
|
|
215
|
+
@signature.missing_kw_args_from(kw_args)
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
def invalid_kw_args
|
|
219
|
+
@signature.invalid_kw_args_from(kw_args)
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
def split_args(*args)
|
|
223
|
+
kw_args = if @signature.has_kw_args_in?(args)
|
|
224
|
+
args.pop.keys
|
|
225
|
+
else
|
|
226
|
+
[]
|
|
227
|
+
end
|
|
228
|
+
|
|
229
|
+
[args, kw_args]
|
|
230
|
+
end
|
|
231
|
+
end
|
|
232
|
+
|
|
233
|
+
# Figures out wether a given method can accept various arguments.
|
|
234
|
+
# Surprisingly non-trivial.
|
|
235
|
+
#
|
|
236
|
+
# @private
|
|
237
|
+
StrictSignatureVerifier = MethodSignatureVerifier
|
|
238
|
+
|
|
239
|
+
# Allows matchers to be used instead of providing keyword arguments. In
|
|
240
|
+
# practice, when this happens only the arity of the method is verified.
|
|
241
|
+
#
|
|
242
|
+
# @private
|
|
243
|
+
class LooseSignatureVerifier < MethodSignatureVerifier
|
|
244
|
+
private
|
|
245
|
+
|
|
246
|
+
def split_args(*args)
|
|
247
|
+
if RSpec::Support.is_a_matcher?(args.last) && @signature.could_contain_kw_args?(args)
|
|
248
|
+
args.pop
|
|
249
|
+
@signature = SignatureWithKeywordArgumentsMatcher.new(@signature)
|
|
250
|
+
end
|
|
251
|
+
|
|
252
|
+
super(*args)
|
|
253
|
+
end
|
|
254
|
+
|
|
255
|
+
# If a matcher is used in a signature in place of keyword arguments, all
|
|
256
|
+
# keyword argument validation needs to be skipped since the matcher is
|
|
257
|
+
# opaque.
|
|
258
|
+
#
|
|
259
|
+
# Instead, keyword arguments will be validated when the method is called
|
|
260
|
+
# and they are actually known.
|
|
261
|
+
#
|
|
262
|
+
# @private
|
|
263
|
+
class SignatureWithKeywordArgumentsMatcher
|
|
264
|
+
def initialize(signature)
|
|
265
|
+
@signature = signature
|
|
266
|
+
end
|
|
267
|
+
|
|
268
|
+
def missing_kw_args_from(_kw_args)
|
|
269
|
+
[]
|
|
270
|
+
end
|
|
271
|
+
|
|
272
|
+
def invalid_kw_args_from(_kw_args)
|
|
273
|
+
[]
|
|
274
|
+
end
|
|
275
|
+
|
|
276
|
+
def non_kw_args_arity_description
|
|
277
|
+
@signature.non_kw_args_arity_description
|
|
278
|
+
end
|
|
279
|
+
|
|
280
|
+
def valid_non_kw_args?(*args)
|
|
281
|
+
@signature.valid_non_kw_args?(*args)
|
|
282
|
+
end
|
|
283
|
+
|
|
284
|
+
def has_kw_args_in?(args)
|
|
285
|
+
@signature.has_kw_args_in?(args)
|
|
286
|
+
end
|
|
287
|
+
end
|
|
288
|
+
end
|
|
289
|
+
end
|
|
290
|
+
end
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
module RSpec
|
|
2
|
+
module Support
|
|
3
|
+
# On 1.8.7, it's in the stdlib.
|
|
4
|
+
# We don't want to load the stdlib, b/c this is a test tool, and can affect
|
|
5
|
+
# the test environment, causing tests to pass where they should fail.
|
|
6
|
+
#
|
|
7
|
+
# So we're transcribing/modifying it from
|
|
8
|
+
# https://github.com/ruby/ruby/blob/v1_8_7_374/lib/thread.rb#L56
|
|
9
|
+
# Some methods we don't need are deleted. Anything I don't
|
|
10
|
+
# understand (there's quite a bit, actually) is left in.
|
|
11
|
+
#
|
|
12
|
+
# Some formating changes are made to appease the robot overlord:
|
|
13
|
+
# https://travis-ci.org/rspec/rspec-core/jobs/54410874
|
|
14
|
+
# @private
|
|
15
|
+
class Mutex
|
|
16
|
+
def initialize
|
|
17
|
+
@waiting = []
|
|
18
|
+
@locked = false
|
|
19
|
+
@waiting.taint
|
|
20
|
+
taint
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# @private
|
|
24
|
+
def lock
|
|
25
|
+
while Thread.critical = true && @locked
|
|
26
|
+
@waiting.push Thread.current
|
|
27
|
+
Thread.stop
|
|
28
|
+
end
|
|
29
|
+
@locked = true
|
|
30
|
+
Thread.critical = false
|
|
31
|
+
self
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# @private
|
|
35
|
+
def unlock
|
|
36
|
+
return unless @locked
|
|
37
|
+
Thread.critical = true
|
|
38
|
+
@locked = false
|
|
39
|
+
wakeup_and_run_waiting_thread
|
|
40
|
+
self
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# @private
|
|
44
|
+
def synchronize
|
|
45
|
+
lock
|
|
46
|
+
begin
|
|
47
|
+
yield
|
|
48
|
+
ensure
|
|
49
|
+
unlock
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
private
|
|
54
|
+
|
|
55
|
+
def wakeup_and_run_waiting_thread
|
|
56
|
+
begin
|
|
57
|
+
t = @waiting.shift
|
|
58
|
+
t.wakeup if t
|
|
59
|
+
rescue ThreadError
|
|
60
|
+
retry
|
|
61
|
+
end
|
|
62
|
+
Thread.critical = false
|
|
63
|
+
begin
|
|
64
|
+
t.run if t
|
|
65
|
+
rescue ThreadError
|
|
66
|
+
:noop
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# Avoid warnings for library wide checks spec
|
|
71
|
+
end unless defined?(::RSpec::Support::Mutex) || defined?(::Mutex)
|
|
72
|
+
end
|
|
73
|
+
end
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
module RSpec
|
|
2
|
+
module Support
|
|
3
|
+
# Provide additional output details beyond what `inspect` provides when
|
|
4
|
+
# printing Time, DateTime, or BigDecimal
|
|
5
|
+
module ObjectFormatter
|
|
6
|
+
# @api private
|
|
7
|
+
def self.format(object)
|
|
8
|
+
prepare_for_inspection(object).inspect
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
# rubocop:disable MethodLength
|
|
12
|
+
|
|
13
|
+
# @private
|
|
14
|
+
# Prepares the provided object to be formatted by wrapping it as needed
|
|
15
|
+
# in something that, when `inspect` is called on it, will produce the
|
|
16
|
+
# desired output.
|
|
17
|
+
#
|
|
18
|
+
# This allows us to apply the desired formatting to hash/array data structures
|
|
19
|
+
# at any level of nesting, simply by walking that structure and replacing items
|
|
20
|
+
# with custom items that have `inspect` defined to return the desired output
|
|
21
|
+
# for that item. Then we can just use `Array#inspect` or `Hash#inspect` to
|
|
22
|
+
# format the entire thing.
|
|
23
|
+
def self.prepare_for_inspection(object)
|
|
24
|
+
case object
|
|
25
|
+
when Array
|
|
26
|
+
return object.map { |o| prepare_for_inspection(o) }
|
|
27
|
+
when Hash
|
|
28
|
+
return prepare_hash(object)
|
|
29
|
+
when Time
|
|
30
|
+
inspection = format_time(object)
|
|
31
|
+
else
|
|
32
|
+
if defined?(DateTime) && DateTime === object
|
|
33
|
+
inspection = format_date_time(object)
|
|
34
|
+
elsif defined?(BigDecimal) && BigDecimal === object
|
|
35
|
+
inspection = "#{object.to_s 'F'} (#{object.inspect})"
|
|
36
|
+
elsif RSpec::Support.is_a_matcher?(object) && object.respond_to?(:description)
|
|
37
|
+
inspection = object.description
|
|
38
|
+
else
|
|
39
|
+
return DelegatingInspector.new(object)
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
InspectableItem.new(inspection)
|
|
44
|
+
end
|
|
45
|
+
# rubocop:enable MethodLength
|
|
46
|
+
|
|
47
|
+
# @private
|
|
48
|
+
def self.prepare_hash(input)
|
|
49
|
+
input.inject({}) do |hash, (k, v)|
|
|
50
|
+
hash[prepare_for_inspection(k)] = prepare_for_inspection(v)
|
|
51
|
+
hash
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
TIME_FORMAT = "%Y-%m-%d %H:%M:%S"
|
|
56
|
+
|
|
57
|
+
if Time.method_defined?(:nsec)
|
|
58
|
+
# @private
|
|
59
|
+
def self.format_time(time)
|
|
60
|
+
time.strftime("#{TIME_FORMAT}.#{"%09d" % time.nsec} %z")
|
|
61
|
+
end
|
|
62
|
+
else # for 1.8.7
|
|
63
|
+
# @private
|
|
64
|
+
def self.format_time(time)
|
|
65
|
+
time.strftime("#{TIME_FORMAT}.#{"%06d" % time.usec} %z")
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
DATE_TIME_FORMAT = "%a, %d %b %Y %H:%M:%S.%N %z"
|
|
70
|
+
# ActiveSupport sometimes overrides inspect. If `ActiveSupport` is
|
|
71
|
+
# defined use a custom format string that includes more time precision.
|
|
72
|
+
# @private
|
|
73
|
+
def self.format_date_time(date_time)
|
|
74
|
+
if defined?(ActiveSupport)
|
|
75
|
+
date_time.strftime(DATE_TIME_FORMAT)
|
|
76
|
+
else
|
|
77
|
+
date_time.inspect
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
# @private
|
|
82
|
+
InspectableItem = Struct.new(:inspection) do
|
|
83
|
+
def inspect
|
|
84
|
+
inspection
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def pretty_print(pp)
|
|
88
|
+
pp.text inspection
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
# @private
|
|
93
|
+
DelegatingInspector = Struct.new(:object) do
|
|
94
|
+
def inspect
|
|
95
|
+
if defined?(::Delegator) && ::Delegator === object
|
|
96
|
+
"#<#{object.class}(#{ObjectFormatter.format(object.__getobj__)})>"
|
|
97
|
+
else
|
|
98
|
+
object.inspect
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def pretty_print(pp)
|
|
103
|
+
pp.text inspect
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
end
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
module RSpec
|
|
2
|
+
module Support
|
|
3
|
+
# Provides recursive constant lookup methods useful for
|
|
4
|
+
# constant stubbing.
|
|
5
|
+
module RecursiveConstMethods
|
|
6
|
+
# We only want to consider constants that are defined directly on a
|
|
7
|
+
# particular module, and not include top-level/inherited constants.
|
|
8
|
+
# Unfortunately, the constant API changed between 1.8 and 1.9, so
|
|
9
|
+
# we need to conditionally define methods to ignore the top-level/inherited
|
|
10
|
+
# constants.
|
|
11
|
+
#
|
|
12
|
+
# Given:
|
|
13
|
+
# class A; B = 1; end
|
|
14
|
+
# class C < A; end
|
|
15
|
+
#
|
|
16
|
+
# On 1.8:
|
|
17
|
+
# - C.const_get("Hash") # => ::Hash
|
|
18
|
+
# - C.const_defined?("Hash") # => false
|
|
19
|
+
# - C.constants # => ["B"]
|
|
20
|
+
# - None of these methods accept the extra `inherit` argument
|
|
21
|
+
# On 1.9:
|
|
22
|
+
# - C.const_get("Hash") # => ::Hash
|
|
23
|
+
# - C.const_defined?("Hash") # => true
|
|
24
|
+
# - C.const_get("Hash", false) # => raises NameError
|
|
25
|
+
# - C.const_defined?("Hash", false) # => false
|
|
26
|
+
# - C.constants # => [:B]
|
|
27
|
+
# - C.constants(false) #=> []
|
|
28
|
+
if Module.method(:const_defined?).arity == 1
|
|
29
|
+
def const_defined_on?(mod, const_name)
|
|
30
|
+
mod.const_defined?(const_name)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def get_const_defined_on(mod, const_name)
|
|
34
|
+
return mod.const_get(const_name) if const_defined_on?(mod, const_name)
|
|
35
|
+
|
|
36
|
+
raise NameError, "uninitialized constant #{mod.name}::#{const_name}"
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def constants_defined_on(mod)
|
|
40
|
+
mod.constants.select { |c| const_defined_on?(mod, c) }
|
|
41
|
+
end
|
|
42
|
+
else
|
|
43
|
+
def const_defined_on?(mod, const_name)
|
|
44
|
+
mod.const_defined?(const_name, false)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def get_const_defined_on(mod, const_name)
|
|
48
|
+
mod.const_get(const_name, false)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def constants_defined_on(mod)
|
|
52
|
+
mod.constants(false)
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def recursive_const_get(const_name)
|
|
57
|
+
normalize_const_name(const_name).split('::').inject(Object) do |mod, name|
|
|
58
|
+
get_const_defined_on(mod, name)
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def recursive_const_defined?(const_name)
|
|
63
|
+
parts = normalize_const_name(const_name).split('::')
|
|
64
|
+
parts.inject([Object, '']) do |(mod, full_name), name|
|
|
65
|
+
yield(full_name, name) if block_given? && !(Module === mod)
|
|
66
|
+
return false unless const_defined_on?(mod, name)
|
|
67
|
+
[get_const_defined_on(mod, name), [mod, name].join('::')]
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def normalize_const_name(const_name)
|
|
72
|
+
const_name.sub(/\A::/, '')
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
module RSpec
|
|
2
|
+
module Support
|
|
3
|
+
# Allows a thread to lock out other threads from a critical section of code,
|
|
4
|
+
# while allowing the thread with the lock to reenter that section.
|
|
5
|
+
#
|
|
6
|
+
# Based on Monitor as of 2.2 -
|
|
7
|
+
# https://github.com/ruby/ruby/blob/eb7ddaa3a47bf48045d26c72eb0f263a53524ebc/lib/monitor.rb#L9
|
|
8
|
+
#
|
|
9
|
+
# Depends on Mutex, but Mutex is only available as part of core since 1.9.1:
|
|
10
|
+
# exists - http://ruby-doc.org/core-1.9.1/Mutex.html
|
|
11
|
+
# dne - http://ruby-doc.org/core-1.9.0/Mutex.html
|
|
12
|
+
#
|
|
13
|
+
# @private
|
|
14
|
+
class ReentrantMutex
|
|
15
|
+
def initialize
|
|
16
|
+
@owner = nil
|
|
17
|
+
@count = 0
|
|
18
|
+
@mutex = Mutex.new
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def synchronize
|
|
22
|
+
enter
|
|
23
|
+
yield
|
|
24
|
+
ensure
|
|
25
|
+
exit
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
private
|
|
29
|
+
|
|
30
|
+
def enter
|
|
31
|
+
@mutex.lock if @owner != Thread.current
|
|
32
|
+
@owner = Thread.current
|
|
33
|
+
@count += 1
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def exit
|
|
37
|
+
@count -= 1
|
|
38
|
+
return unless @count == 0
|
|
39
|
+
@owner = nil
|
|
40
|
+
@mutex.unlock
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
if defined? ::Mutex
|
|
45
|
+
# On 1.9 and up, this is in core, so we just use the real one
|
|
46
|
+
Mutex = ::Mutex
|
|
47
|
+
else # For 1.8.7
|
|
48
|
+
# :nocov:
|
|
49
|
+
RSpec::Support.require_rspec_support "mutex"
|
|
50
|
+
# :nocov:
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|