mdap 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/.DS_Store +0 -0
- data/.gitignore +11 -0
- data/.rspec +3 -0
- data/.travis.yml +6 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +7 -0
- data/Gemfile.lock +34 -0
- data/LICENSE.txt +21 -0
- data/README.md +58 -0
- data/Rakefile +6 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/lib/mdap.rb +95 -0
- data/lib/mdap/version.rb +3 -0
- data/mdap.gemspec +26 -0
- data/vendor/bundle/ruby/2.7.0/bin/htmldiff +29 -0
- data/vendor/bundle/ruby/2.7.0/bin/ldiff +29 -0
- data/vendor/bundle/ruby/2.7.0/bin/rake +27 -0
- data/vendor/bundle/ruby/2.7.0/bin/rspec +27 -0
- data/vendor/bundle/ruby/2.7.0/cache/diff-lcs-1.3.gem +0 -0
- data/vendor/bundle/ruby/2.7.0/cache/rake-12.3.3.gem +0 -0
- data/vendor/bundle/ruby/2.7.0/cache/rspec-3.9.0.gem +0 -0
- data/vendor/bundle/ruby/2.7.0/cache/rspec-core-3.9.1.gem +0 -0
- data/vendor/bundle/ruby/2.7.0/cache/rspec-expectations-3.9.0.gem +0 -0
- data/vendor/bundle/ruby/2.7.0/cache/rspec-mocks-3.9.1.gem +0 -0
- data/vendor/bundle/ruby/2.7.0/cache/rspec-support-3.9.2.gem +0 -0
- data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.3/.rspec +1 -0
- data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.3/Code-of-Conduct.md +74 -0
- data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.3/Contributing.md +83 -0
- data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.3/History.md +220 -0
- data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.3/License.md +39 -0
- data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.3/Manifest.txt +37 -0
- data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.3/README.rdoc +84 -0
- data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.3/Rakefile +57 -0
- data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.3/autotest/discover.rb +1 -0
- data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.3/bin/htmldiff +32 -0
- data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.3/bin/ldiff +6 -0
- data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.3/docs/COPYING.txt +339 -0
- data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.3/docs/artistic.txt +127 -0
- data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.3/lib/diff-lcs.rb +3 -0
- data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.3/lib/diff/lcs.rb +725 -0
- data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.3/lib/diff/lcs/array.rb +7 -0
- data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.3/lib/diff/lcs/block.rb +37 -0
- data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.3/lib/diff/lcs/callbacks.rb +322 -0
- data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.3/lib/diff/lcs/change.rb +181 -0
- data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.3/lib/diff/lcs/htmldiff.rb +149 -0
- data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.3/lib/diff/lcs/hunk.rb +276 -0
- data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.3/lib/diff/lcs/internals.rb +307 -0
- data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.3/lib/diff/lcs/ldiff.rb +167 -0
- data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.3/lib/diff/lcs/string.rb +5 -0
- data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.3/spec/change_spec.rb +65 -0
- data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.3/spec/diff_spec.rb +47 -0
- data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.3/spec/fixtures/ds1.csv +50 -0
- data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.3/spec/fixtures/ds2.csv +51 -0
- data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.3/spec/hunk_spec.rb +72 -0
- data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.3/spec/issues_spec.rb +49 -0
- data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.3/spec/lcs_spec.rb +56 -0
- data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.3/spec/ldiff_spec.rb +47 -0
- data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.3/spec/patch_spec.rb +422 -0
- data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.3/spec/sdiff_spec.rb +214 -0
- data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.3/spec/spec_helper.rb +321 -0
- data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.3/spec/traverse_balanced_spec.rb +310 -0
- data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.3/spec/traverse_sequences_spec.rb +139 -0
- data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/CONTRIBUTING.rdoc +43 -0
- data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/Gemfile +3 -0
- data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/History.rdoc +2344 -0
- data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/MIT-LICENSE +21 -0
- data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/README.rdoc +156 -0
- data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/Rakefile +41 -0
- data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/azure-pipelines.yml +11 -0
- data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/bin/bundle +105 -0
- data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/bin/console +7 -0
- data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/bin/rake +29 -0
- data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/bin/rdoc +29 -0
- data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/bin/rubocop +29 -0
- data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/bin/setup +6 -0
- data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/doc/command_line_usage.rdoc +158 -0
- data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/doc/example/Rakefile1 +38 -0
- data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/doc/example/Rakefile2 +35 -0
- data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/doc/example/a.c +6 -0
- data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/doc/example/b.c +6 -0
- data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/doc/example/main.c +11 -0
- data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/doc/glossary.rdoc +42 -0
- data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/doc/jamis.rb +592 -0
- data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/doc/proto_rake.rdoc +127 -0
- data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/doc/rake.1 +156 -0
- data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/doc/rakefile.rdoc +622 -0
- data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/doc/rational.rdoc +151 -0
- data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/exe/rake +27 -0
- data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake.rb +71 -0
- data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/application.rb +824 -0
- data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/backtrace.rb +24 -0
- data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/clean.rb +78 -0
- data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/cloneable.rb +17 -0
- data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/cpu_counter.rb +107 -0
- data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/default_loader.rb +15 -0
- data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/dsl_definition.rb +195 -0
- data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/early_time.rb +22 -0
- data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/ext/core.rb +26 -0
- data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/ext/string.rb +176 -0
- data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/file_creation_task.rb +25 -0
- data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/file_list.rb +435 -0
- data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/file_task.rb +54 -0
- data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/file_utils.rb +137 -0
- data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/file_utils_ext.rb +145 -0
- data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/invocation_chain.rb +57 -0
- data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/invocation_exception_mixin.rb +17 -0
- data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/late_time.rb +18 -0
- data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/linked_list.rb +112 -0
- data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/loaders/makefile.rb +54 -0
- data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/multi_task.rb +14 -0
- data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/name_space.rb +38 -0
- data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/packagetask.rb +207 -0
- data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/phony.rb +16 -0
- data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/private_reader.rb +21 -0
- data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/promise.rb +100 -0
- data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/pseudo_status.rb +30 -0
- data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/rake_module.rb +67 -0
- data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/rake_test_loader.rb +27 -0
- data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/rule_recursion_overflow_error.rb +20 -0
- data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/scope.rb +43 -0
- data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/task.rb +413 -0
- data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/task_argument_error.rb +8 -0
- data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/task_arguments.rb +109 -0
- data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/task_manager.rb +324 -0
- data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/tasklib.rb +12 -0
- data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/testtask.rb +224 -0
- data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/thread_history_display.rb +49 -0
- data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/thread_pool.rb +163 -0
- data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/trace_output.rb +23 -0
- data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/version.rb +10 -0
- data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/win32.rb +51 -0
- data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/rake.gemspec +42 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-3.9.0/LICENSE.md +27 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-3.9.0/README.md +43 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-3.9.0/lib/rspec.rb +3 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-3.9.0/lib/rspec/version.rb +5 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/.document +5 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/.yardopts +8 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/Changelog.md +2274 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/LICENSE.md +26 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/README.md +384 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/exe/rspec +4 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/autorun.rb +3 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core.rb +186 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/backtrace_formatter.rb +65 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/bisect/coordinator.rb +62 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/bisect/example_minimizer.rb +173 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/bisect/fork_runner.rb +135 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/bisect/server.rb +61 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/bisect/shell_command.rb +126 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/bisect/shell_runner.rb +73 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/bisect/utilities.rb +58 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/configuration.rb +2336 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/configuration_options.rb +233 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/did_you_mean.rb +46 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/drb.rb +113 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/dsl.rb +98 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/example.rb +656 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/example_group.rb +889 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/example_status_persister.rb +235 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/filter_manager.rb +231 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/flat_map.rb +20 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/formatters.rb +272 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/formatters/base_bisect_formatter.rb +45 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/formatters/base_formatter.rb +70 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/formatters/base_text_formatter.rb +75 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/formatters/bisect_drb_formatter.rb +29 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/formatters/bisect_progress_formatter.rb +157 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/formatters/console_codes.rb +68 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/formatters/deprecation_formatter.rb +223 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/formatters/documentation_formatter.rb +102 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/formatters/exception_presenter.rb +508 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/formatters/failure_list_formatter.rb +23 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/formatters/fallback_message_formatter.rb +28 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/formatters/helpers.rb +110 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/formatters/html_formatter.rb +153 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/formatters/html_printer.rb +414 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/formatters/html_snippet_extractor.rb +120 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/formatters/json_formatter.rb +102 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/formatters/profile_formatter.rb +68 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/formatters/progress_formatter.rb +29 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/formatters/protocol.rb +182 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/formatters/snippet_extractor.rb +134 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/formatters/syntax_highlighter.rb +91 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/hooks.rb +632 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/invocations.rb +87 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/memoized_helpers.rb +554 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/metadata.rb +498 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/metadata_filter.rb +255 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/minitest_assertions_adapter.rb +31 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/mocking_adapters/flexmock.rb +31 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/mocking_adapters/mocha.rb +57 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/mocking_adapters/null.rb +14 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/mocking_adapters/rr.rb +31 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/mocking_adapters/rspec.rb +32 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/notifications.rb +521 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/option_parser.rb +316 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/ordering.rb +158 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/output_wrapper.rb +29 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/pending.rb +165 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/profiler.rb +34 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/project_initializer.rb +48 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/project_initializer/.rspec +1 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/project_initializer/spec/spec_helper.rb +100 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/rake_task.rb +188 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/reporter.rb +265 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/ruby_project.rb +53 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/runner.rb +204 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/sandbox.rb +37 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/set.rb +54 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/shared_context.rb +55 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/shared_example_group.rb +269 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/shell_escape.rb +49 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/test_unit_assertions_adapter.rb +30 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/version.rb +9 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/warnings.rb +40 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.1/lib/rspec/core/world.rb +275 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.0/.document +5 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.0/.yardopts +6 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.0/Changelog.md +1170 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.0/LICENSE.md +25 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.0/README.md +320 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.0/lib/rspec/expectations.rb +82 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.0/lib/rspec/expectations/block_snippet_extractor.rb +253 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.0/lib/rspec/expectations/configuration.rb +215 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.0/lib/rspec/expectations/expectation_target.rb +127 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.0/lib/rspec/expectations/fail_with.rb +39 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.0/lib/rspec/expectations/failure_aggregator.rb +194 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.0/lib/rspec/expectations/handler.rb +170 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.0/lib/rspec/expectations/minitest_integration.rb +58 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.0/lib/rspec/expectations/syntax.rb +132 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.0/lib/rspec/expectations/version.rb +8 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers.rb +1038 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/aliased_matcher.rb +116 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/built_in.rb +52 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/built_in/all.rb +86 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/built_in/base_matcher.rb +193 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/built_in/be.rb +288 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/built_in/be_between.rb +77 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/built_in/be_instance_of.rb +26 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/built_in/be_kind_of.rb +20 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/built_in/be_within.rb +72 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/built_in/change.rb +428 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/built_in/compound.rb +276 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/built_in/contain_exactly.rb +302 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/built_in/cover.rb +24 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/built_in/eq.rb +40 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/built_in/eql.rb +34 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/built_in/equal.rb +81 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/built_in/exist.rb +90 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/built_in/has.rb +103 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/built_in/have_attributes.rb +114 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/built_in/include.rb +149 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/built_in/match.rb +106 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/built_in/operators.rb +128 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/built_in/output.rb +200 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/built_in/raise_error.rb +230 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/built_in/respond_to.rb +174 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/built_in/satisfy.rb +60 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/built_in/start_or_end_with.rb +94 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/built_in/throw_symbol.rb +132 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/built_in/yield.rb +432 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/composable.rb +171 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/dsl.rb +534 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/english_phrasing.rb +58 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/expecteds_for_multiple_diffs.rb +82 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/fail_matchers.rb +42 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/generated_descriptions.rb +41 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/matcher_delegator.rb +35 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/matcher_protocol.rb +99 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/.document +5 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/.yardopts +6 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/Changelog.md +1133 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/LICENSE.md +25 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/README.md +463 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks.rb +130 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/any_instance.rb +11 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/any_instance/chain.rb +111 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/any_instance/error_generator.rb +31 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/any_instance/expect_chain_chain.rb +31 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/any_instance/expectation_chain.rb +50 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/any_instance/message_chains.rb +83 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/any_instance/proxy.rb +116 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/any_instance/recorder.rb +294 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/any_instance/stub_chain.rb +51 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/any_instance/stub_chain_chain.rb +23 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/argument_list_matcher.rb +100 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/argument_matchers.rb +322 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/configuration.rb +212 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/error_generator.rb +369 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/example_methods.rb +434 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/instance_method_stasher.rb +146 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/marshal_extension.rb +41 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/matchers/expectation_customization.rb +20 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/matchers/have_received.rb +134 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/matchers/receive.rb +132 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/matchers/receive_message_chain.rb +82 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/matchers/receive_messages.rb +77 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/message_chain.rb +87 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/message_expectation.rb +751 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/method_double.rb +287 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/method_reference.rb +202 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/minitest_integration.rb +68 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/mutate_const.rb +339 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/object_reference.rb +149 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/order_group.rb +81 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/proxy.rb +503 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/space.rb +238 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/standalone.rb +3 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/syntax.rb +325 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/targets.rb +124 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/test_double.rb +171 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/verifying_double.rb +129 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/verifying_message_expectation.rb +54 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/verifying_proxy.rb +220 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/version.rb +9 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-support-3.9.2/Changelog.md +292 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-support-3.9.2/LICENSE.md +23 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-support-3.9.2/README.md +40 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-support-3.9.2/lib/rspec/support.rb +149 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-support-3.9.2/lib/rspec/support/caller_filter.rb +83 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-support-3.9.2/lib/rspec/support/comparable_version.rb +46 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-support-3.9.2/lib/rspec/support/differ.rb +215 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-support-3.9.2/lib/rspec/support/directory_maker.rb +63 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-support-3.9.2/lib/rspec/support/encoded_string.rb +161 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-support-3.9.2/lib/rspec/support/fuzzy_matcher.rb +48 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-support-3.9.2/lib/rspec/support/hunk_generator.rb +47 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-support-3.9.2/lib/rspec/support/matcher_definition.rb +42 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-support-3.9.2/lib/rspec/support/method_signature_verifier.rb +438 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-support-3.9.2/lib/rspec/support/mutex.rb +73 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-support-3.9.2/lib/rspec/support/object_formatter.rb +275 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-support-3.9.2/lib/rspec/support/recursive_const_methods.rb +76 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-support-3.9.2/lib/rspec/support/reentrant_mutex.rb +53 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-support-3.9.2/lib/rspec/support/ruby_features.rb +185 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-support-3.9.2/lib/rspec/support/source.rb +75 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-support-3.9.2/lib/rspec/support/source/location.rb +21 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-support-3.9.2/lib/rspec/support/source/node.rb +110 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-support-3.9.2/lib/rspec/support/source/token.rb +87 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-support-3.9.2/lib/rspec/support/spec.rb +81 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-support-3.9.2/lib/rspec/support/spec/deprecation_helpers.rb +64 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-support-3.9.2/lib/rspec/support/spec/formatting_support.rb +9 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-support-3.9.2/lib/rspec/support/spec/in_sub_process.rb +69 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-support-3.9.2/lib/rspec/support/spec/library_wide_checks.rb +150 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-support-3.9.2/lib/rspec/support/spec/shell_out.rb +89 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-support-3.9.2/lib/rspec/support/spec/stderr_splitter.rb +67 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-support-3.9.2/lib/rspec/support/spec/string_matcher.rb +46 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-support-3.9.2/lib/rspec/support/spec/with_isolated_directory.rb +13 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-support-3.9.2/lib/rspec/support/spec/with_isolated_stderr.rb +13 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-support-3.9.2/lib/rspec/support/version.rb +7 -0
- data/vendor/bundle/ruby/2.7.0/gems/rspec-support-3.9.2/lib/rspec/support/warnings.rb +39 -0
- data/vendor/bundle/ruby/2.7.0/specifications/diff-lcs-1.3.gemspec +51 -0
- data/vendor/bundle/ruby/2.7.0/specifications/rake-12.3.3.gemspec +43 -0
- data/vendor/bundle/ruby/2.7.0/specifications/rspec-3.9.0.gemspec +39 -0
- data/vendor/bundle/ruby/2.7.0/specifications/rspec-core-3.9.1.gemspec +53 -0
- data/vendor/bundle/ruby/2.7.0/specifications/rspec-expectations-3.9.0.gemspec +44 -0
- data/vendor/bundle/ruby/2.7.0/specifications/rspec-mocks-3.9.1.gemspec +44 -0
- data/vendor/bundle/ruby/2.7.0/specifications/rspec-support-3.9.2.gemspec +36 -0
- metadata +403 -0
data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/built_in/change.rb
ADDED
@@ -0,0 +1,428 @@
|
|
1
|
+
module RSpec
|
2
|
+
module Matchers
|
3
|
+
module BuiltIn
|
4
|
+
# @api private
|
5
|
+
# Provides the implementation for `change`.
|
6
|
+
# Not intended to be instantiated directly.
|
7
|
+
class Change < BaseMatcher
|
8
|
+
# @api public
|
9
|
+
# Specifies the delta of the expected change.
|
10
|
+
def by(expected_delta)
|
11
|
+
ChangeRelatively.new(change_details, expected_delta, :by) do |actual_delta|
|
12
|
+
values_match?(expected_delta, actual_delta)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
# @api public
|
17
|
+
# Specifies a minimum delta of the expected change.
|
18
|
+
def by_at_least(minimum)
|
19
|
+
ChangeRelatively.new(change_details, minimum, :by_at_least) do |actual_delta|
|
20
|
+
actual_delta >= minimum
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
# @api public
|
25
|
+
# Specifies a maximum delta of the expected change.
|
26
|
+
def by_at_most(maximum)
|
27
|
+
ChangeRelatively.new(change_details, maximum, :by_at_most) do |actual_delta|
|
28
|
+
actual_delta <= maximum
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
# @api public
|
33
|
+
# Specifies the new value you expect.
|
34
|
+
def to(value)
|
35
|
+
ChangeToValue.new(change_details, value)
|
36
|
+
end
|
37
|
+
|
38
|
+
# @api public
|
39
|
+
# Specifies the original value.
|
40
|
+
def from(value)
|
41
|
+
ChangeFromValue.new(change_details, value)
|
42
|
+
end
|
43
|
+
|
44
|
+
# @private
|
45
|
+
def matches?(event_proc)
|
46
|
+
raise_block_syntax_error if block_given?
|
47
|
+
perform_change(event_proc) && change_details.changed?
|
48
|
+
end
|
49
|
+
|
50
|
+
def does_not_match?(event_proc)
|
51
|
+
raise_block_syntax_error if block_given?
|
52
|
+
perform_change(event_proc) && !change_details.changed?
|
53
|
+
end
|
54
|
+
|
55
|
+
# @api private
|
56
|
+
# @return [String]
|
57
|
+
def failure_message
|
58
|
+
"expected #{change_details.value_representation} to have changed, " \
|
59
|
+
"but #{positive_failure_reason}"
|
60
|
+
end
|
61
|
+
|
62
|
+
# @api private
|
63
|
+
# @return [String]
|
64
|
+
def failure_message_when_negated
|
65
|
+
"expected #{change_details.value_representation} not to have changed, " \
|
66
|
+
"but #{negative_failure_reason}"
|
67
|
+
end
|
68
|
+
|
69
|
+
# @api private
|
70
|
+
# @return [String]
|
71
|
+
def description
|
72
|
+
"change #{change_details.value_representation}"
|
73
|
+
end
|
74
|
+
|
75
|
+
# @private
|
76
|
+
def supports_block_expectations?
|
77
|
+
true
|
78
|
+
end
|
79
|
+
|
80
|
+
private
|
81
|
+
|
82
|
+
def initialize(receiver=nil, message=nil, &block)
|
83
|
+
@receiver = receiver
|
84
|
+
@message = message
|
85
|
+
@block = block
|
86
|
+
end
|
87
|
+
|
88
|
+
def change_details
|
89
|
+
@change_details ||= ChangeDetails.new(matcher_name, @receiver, @message, &@block)
|
90
|
+
end
|
91
|
+
|
92
|
+
def perform_change(event_proc)
|
93
|
+
@event_proc = event_proc
|
94
|
+
change_details.perform_change(event_proc) do |actual_before|
|
95
|
+
# pre-compute values derived from the `before` value before the
|
96
|
+
# mutation is applied, in case the specified mutation is mutation
|
97
|
+
# of a single object (rather than a changing what object a method
|
98
|
+
# returns). We need to cache these values before the `before` value
|
99
|
+
# they are based on potentially gets mutated.
|
100
|
+
@actual_before_description = description_of(actual_before)
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
def raise_block_syntax_error
|
105
|
+
raise SyntaxError, "Block not received by the `change` matcher. " \
|
106
|
+
"Perhaps you want to use `{ ... }` instead of do/end?"
|
107
|
+
end
|
108
|
+
|
109
|
+
def positive_failure_reason
|
110
|
+
return "was not given a block" unless Proc === @event_proc
|
111
|
+
"is still #{@actual_before_description}"
|
112
|
+
end
|
113
|
+
|
114
|
+
def negative_failure_reason
|
115
|
+
return "was not given a block" unless Proc === @event_proc
|
116
|
+
"did change from #{@actual_before_description} " \
|
117
|
+
"to #{description_of change_details.actual_after}"
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
# Used to specify a relative change.
|
122
|
+
# @api private
|
123
|
+
class ChangeRelatively < BaseMatcher
|
124
|
+
def initialize(change_details, expected_delta, relativity, &comparer)
|
125
|
+
@change_details = change_details
|
126
|
+
@expected_delta = expected_delta
|
127
|
+
@relativity = relativity
|
128
|
+
@comparer = comparer
|
129
|
+
end
|
130
|
+
|
131
|
+
# @private
|
132
|
+
def failure_message
|
133
|
+
"expected #{@change_details.value_representation} to have changed " \
|
134
|
+
"#{@relativity.to_s.tr('_', ' ')} " \
|
135
|
+
"#{description_of @expected_delta}, but #{failure_reason}"
|
136
|
+
end
|
137
|
+
|
138
|
+
# @private
|
139
|
+
def matches?(event_proc)
|
140
|
+
@event_proc = event_proc
|
141
|
+
@change_details.perform_change(event_proc) && @comparer.call(@change_details.actual_delta)
|
142
|
+
end
|
143
|
+
|
144
|
+
# @private
|
145
|
+
def does_not_match?(_event_proc)
|
146
|
+
raise NotImplementedError, "`expect { }.not_to change " \
|
147
|
+
"{ }.#{@relativity}()` is not supported"
|
148
|
+
end
|
149
|
+
|
150
|
+
# @private
|
151
|
+
def description
|
152
|
+
"change #{@change_details.value_representation} " \
|
153
|
+
"#{@relativity.to_s.tr('_', ' ')} #{description_of @expected_delta}"
|
154
|
+
end
|
155
|
+
|
156
|
+
# @private
|
157
|
+
def supports_block_expectations?
|
158
|
+
true
|
159
|
+
end
|
160
|
+
|
161
|
+
private
|
162
|
+
|
163
|
+
def failure_reason
|
164
|
+
return "was not given a block" unless Proc === @event_proc
|
165
|
+
"was changed by #{description_of @change_details.actual_delta}"
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
# @api private
|
170
|
+
# Base class for specifying a change from and/or to specific values.
|
171
|
+
class SpecificValuesChange < BaseMatcher
|
172
|
+
# @private
|
173
|
+
MATCH_ANYTHING = ::Object.ancestors.last
|
174
|
+
|
175
|
+
def initialize(change_details, from, to)
|
176
|
+
@change_details = change_details
|
177
|
+
@expected_before = from
|
178
|
+
@expected_after = to
|
179
|
+
end
|
180
|
+
|
181
|
+
# @private
|
182
|
+
def matches?(event_proc)
|
183
|
+
perform_change(event_proc) && @change_details.changed? && @matches_before && matches_after?
|
184
|
+
end
|
185
|
+
|
186
|
+
# @private
|
187
|
+
def description
|
188
|
+
"change #{@change_details.value_representation} #{change_description}"
|
189
|
+
end
|
190
|
+
|
191
|
+
# @private
|
192
|
+
def failure_message
|
193
|
+
return not_given_a_block_failure unless Proc === @event_proc
|
194
|
+
return before_value_failure unless @matches_before
|
195
|
+
return did_not_change_failure unless @change_details.changed?
|
196
|
+
after_value_failure
|
197
|
+
end
|
198
|
+
|
199
|
+
# @private
|
200
|
+
def supports_block_expectations?
|
201
|
+
true
|
202
|
+
end
|
203
|
+
|
204
|
+
private
|
205
|
+
|
206
|
+
def perform_change(event_proc)
|
207
|
+
@event_proc = event_proc
|
208
|
+
@change_details.perform_change(event_proc) do |actual_before|
|
209
|
+
# pre-compute values derived from the `before` value before the
|
210
|
+
# mutation is applied, in case the specified mutation is mutation
|
211
|
+
# of a single object (rather than a changing what object a method
|
212
|
+
# returns). We need to cache these values before the `before` value
|
213
|
+
# they are based on potentially gets mutated.
|
214
|
+
@matches_before = values_match?(@expected_before, actual_before)
|
215
|
+
@actual_before_description = description_of(actual_before)
|
216
|
+
end
|
217
|
+
end
|
218
|
+
|
219
|
+
def matches_after?
|
220
|
+
values_match?(@expected_after, @change_details.actual_after)
|
221
|
+
end
|
222
|
+
|
223
|
+
def before_value_failure
|
224
|
+
"expected #{@change_details.value_representation} " \
|
225
|
+
"to have initially been #{description_of @expected_before}, " \
|
226
|
+
"but was #{@actual_before_description}"
|
227
|
+
end
|
228
|
+
|
229
|
+
def after_value_failure
|
230
|
+
"expected #{@change_details.value_representation} " \
|
231
|
+
"to have changed to #{description_of @expected_after}, " \
|
232
|
+
"but is now #{description_of @change_details.actual_after}"
|
233
|
+
end
|
234
|
+
|
235
|
+
def did_not_change_failure
|
236
|
+
"expected #{@change_details.value_representation} " \
|
237
|
+
"to have changed #{change_description}, but did not change"
|
238
|
+
end
|
239
|
+
|
240
|
+
def did_change_failure
|
241
|
+
"expected #{@change_details.value_representation} not to have changed, but " \
|
242
|
+
"did change from #{@actual_before_description} " \
|
243
|
+
"to #{description_of @change_details.actual_after}"
|
244
|
+
end
|
245
|
+
|
246
|
+
def not_given_a_block_failure
|
247
|
+
"expected #{@change_details.value_representation} to have changed " \
|
248
|
+
"#{change_description}, but was not given a block"
|
249
|
+
end
|
250
|
+
end
|
251
|
+
|
252
|
+
# @api private
|
253
|
+
# Used to specify a change from a specific value
|
254
|
+
# (and, optionally, to a specific value).
|
255
|
+
class ChangeFromValue < SpecificValuesChange
|
256
|
+
def initialize(change_details, expected_before)
|
257
|
+
@description_suffix = nil
|
258
|
+
super(change_details, expected_before, MATCH_ANYTHING)
|
259
|
+
end
|
260
|
+
|
261
|
+
# @api public
|
262
|
+
# Specifies the new value you expect.
|
263
|
+
def to(value)
|
264
|
+
@expected_after = value
|
265
|
+
@description_suffix = " to #{description_of value}"
|
266
|
+
self
|
267
|
+
end
|
268
|
+
|
269
|
+
# @private
|
270
|
+
def does_not_match?(event_proc)
|
271
|
+
if @description_suffix
|
272
|
+
raise NotImplementedError, "`expect { }.not_to change { }.to()` " \
|
273
|
+
"is not supported"
|
274
|
+
end
|
275
|
+
|
276
|
+
perform_change(event_proc) && !@change_details.changed? && @matches_before
|
277
|
+
end
|
278
|
+
|
279
|
+
# @private
|
280
|
+
def failure_message_when_negated
|
281
|
+
return not_given_a_block_failure unless Proc === @event_proc
|
282
|
+
return before_value_failure unless @matches_before
|
283
|
+
did_change_failure
|
284
|
+
end
|
285
|
+
|
286
|
+
private
|
287
|
+
|
288
|
+
def change_description
|
289
|
+
"from #{description_of @expected_before}#{@description_suffix}"
|
290
|
+
end
|
291
|
+
end
|
292
|
+
|
293
|
+
# @api private
|
294
|
+
# Used to specify a change to a specific value
|
295
|
+
# (and, optionally, from a specific value).
|
296
|
+
class ChangeToValue < SpecificValuesChange
|
297
|
+
def initialize(change_details, expected_after)
|
298
|
+
@description_suffix = nil
|
299
|
+
super(change_details, MATCH_ANYTHING, expected_after)
|
300
|
+
end
|
301
|
+
|
302
|
+
# @api public
|
303
|
+
# Specifies the original value.
|
304
|
+
def from(value)
|
305
|
+
@expected_before = value
|
306
|
+
@description_suffix = " from #{description_of value}"
|
307
|
+
self
|
308
|
+
end
|
309
|
+
|
310
|
+
# @private
|
311
|
+
def does_not_match?(_event_proc)
|
312
|
+
raise NotImplementedError, "`expect { }.not_to change { }.to()` " \
|
313
|
+
"is not supported"
|
314
|
+
end
|
315
|
+
|
316
|
+
private
|
317
|
+
|
318
|
+
def change_description
|
319
|
+
"to #{description_of @expected_after}#{@description_suffix}"
|
320
|
+
end
|
321
|
+
end
|
322
|
+
|
323
|
+
# @private
|
324
|
+
# Encapsulates the details of the before/after values.
|
325
|
+
#
|
326
|
+
# Note that this class exposes the `actual_after` value, to allow the
|
327
|
+
# matchers above to derive failure messages, etc from the value on demand
|
328
|
+
# as needed, but it intentionally does _not_ expose the `actual_before`
|
329
|
+
# value. Some usages of the `change` matcher mutate a specific object
|
330
|
+
# returned by the value proc, which means that failure message snippets,
|
331
|
+
# etc, which are derived from the `before` value may not be accurate if
|
332
|
+
# they are lazily computed as needed. We must pre-compute them before
|
333
|
+
# applying the change in the `expect` block. To ensure that all `change`
|
334
|
+
# matchers do that properly, we do not expose the `actual_before` value.
|
335
|
+
# Instead, matchers must pass a block to `perform_change`, which yields
|
336
|
+
# the `actual_before` value before applying the change.
|
337
|
+
class ChangeDetails
|
338
|
+
attr_reader :actual_after
|
339
|
+
|
340
|
+
def initialize(matcher_name, receiver=nil, message=nil, &block)
|
341
|
+
if receiver && !message
|
342
|
+
raise(
|
343
|
+
ArgumentError,
|
344
|
+
"`change` requires either an object and message " \
|
345
|
+
"(`change(obj, :msg)`) or a block (`change { }`). " \
|
346
|
+
"You passed an object but no message."
|
347
|
+
)
|
348
|
+
end
|
349
|
+
|
350
|
+
@matcher_name = matcher_name
|
351
|
+
@receiver = receiver
|
352
|
+
@message = message
|
353
|
+
@value_proc = block
|
354
|
+
end
|
355
|
+
|
356
|
+
def value_representation
|
357
|
+
@value_representation ||=
|
358
|
+
if @message
|
359
|
+
"`#{message_notation(@receiver, @message)}`"
|
360
|
+
elsif (value_block_snippet = extract_value_block_snippet)
|
361
|
+
"`#{value_block_snippet}`"
|
362
|
+
else
|
363
|
+
'result'
|
364
|
+
end
|
365
|
+
end
|
366
|
+
|
367
|
+
def perform_change(event_proc)
|
368
|
+
@actual_before = evaluate_value_proc
|
369
|
+
@before_hash = @actual_before.hash
|
370
|
+
yield @actual_before if block_given?
|
371
|
+
|
372
|
+
return false unless Proc === event_proc
|
373
|
+
event_proc.call
|
374
|
+
|
375
|
+
@actual_after = evaluate_value_proc
|
376
|
+
@actual_hash = @actual_after.hash
|
377
|
+
true
|
378
|
+
end
|
379
|
+
|
380
|
+
def changed?
|
381
|
+
# Consider it changed if either:
|
382
|
+
#
|
383
|
+
# - The before/after values are unequal
|
384
|
+
# - The before/after values have different hash values
|
385
|
+
#
|
386
|
+
# The latter case specifically handles the case when the value proc
|
387
|
+
# returns the exact same object, but it has been mutated.
|
388
|
+
#
|
389
|
+
# Note that it is not sufficient to only check the hashes; it is
|
390
|
+
# possible for two values to be unequal (and of different classes)
|
391
|
+
# but to return the same hash value. Also, some objects may change
|
392
|
+
# their hash after being compared with `==`/`!=`.
|
393
|
+
@actual_before != @actual_after || @before_hash != @actual_hash
|
394
|
+
end
|
395
|
+
|
396
|
+
def actual_delta
|
397
|
+
@actual_after - @actual_before
|
398
|
+
end
|
399
|
+
|
400
|
+
private
|
401
|
+
|
402
|
+
def evaluate_value_proc
|
403
|
+
@value_proc ? @value_proc.call : @receiver.__send__(@message)
|
404
|
+
end
|
405
|
+
|
406
|
+
def message_notation(receiver, message)
|
407
|
+
case receiver
|
408
|
+
when Module
|
409
|
+
"#{receiver}.#{message}"
|
410
|
+
else
|
411
|
+
"#{Support.class_of(receiver)}##{message}"
|
412
|
+
end
|
413
|
+
end
|
414
|
+
|
415
|
+
if RSpec::Support::RubyFeatures.ripper_supported?
|
416
|
+
def extract_value_block_snippet
|
417
|
+
return nil unless @value_proc
|
418
|
+
Expectations::BlockSnippetExtractor.try_extracting_single_line_body_of(@value_proc, @matcher_name)
|
419
|
+
end
|
420
|
+
else
|
421
|
+
def extract_value_block_snippet
|
422
|
+
nil
|
423
|
+
end
|
424
|
+
end
|
425
|
+
end
|
426
|
+
end
|
427
|
+
end
|
428
|
+
end
|
data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.0/lib/rspec/matchers/built_in/compound.rb
ADDED
@@ -0,0 +1,276 @@
|
|
1
|
+
module RSpec
|
2
|
+
module Matchers
|
3
|
+
module BuiltIn
|
4
|
+
# @api private
|
5
|
+
# Base class for `and` and `or` compound matchers.
|
6
|
+
class Compound < BaseMatcher
|
7
|
+
# @private
|
8
|
+
attr_reader :matcher_1, :matcher_2, :evaluator
|
9
|
+
|
10
|
+
def initialize(matcher_1, matcher_2)
|
11
|
+
@matcher_1 = matcher_1
|
12
|
+
@matcher_2 = matcher_2
|
13
|
+
end
|
14
|
+
|
15
|
+
# @private
|
16
|
+
def does_not_match?(_actual)
|
17
|
+
raise NotImplementedError, "`expect(...).not_to matcher.#{conjunction} matcher` " \
|
18
|
+
"is not supported, since it creates a bit of an ambiguity. Instead, define negated versions " \
|
19
|
+
"of whatever matchers you wish to negate with `RSpec::Matchers.define_negated_matcher` and " \
|
20
|
+
"use `expect(...).to matcher.#{conjunction} matcher`."
|
21
|
+
end
|
22
|
+
|
23
|
+
# @api private
|
24
|
+
# @return [String]
|
25
|
+
def description
|
26
|
+
"#{matcher_1.description} #{conjunction} #{matcher_2.description}"
|
27
|
+
end
|
28
|
+
|
29
|
+
def supports_block_expectations?
|
30
|
+
matcher_supports_block_expectations?(matcher_1) &&
|
31
|
+
matcher_supports_block_expectations?(matcher_2)
|
32
|
+
end
|
33
|
+
|
34
|
+
def expects_call_stack_jump?
|
35
|
+
NestedEvaluator.matcher_expects_call_stack_jump?(matcher_1) ||
|
36
|
+
NestedEvaluator.matcher_expects_call_stack_jump?(matcher_2)
|
37
|
+
end
|
38
|
+
|
39
|
+
# @api private
|
40
|
+
# @return [Boolean]
|
41
|
+
def diffable?
|
42
|
+
matcher_is_diffable?(matcher_1) || matcher_is_diffable?(matcher_2)
|
43
|
+
end
|
44
|
+
|
45
|
+
# @api private
|
46
|
+
# @return [RSpec::Matchers::ExpectedsForMultipleDiffs]
|
47
|
+
def expected
|
48
|
+
return nil unless evaluator
|
49
|
+
::RSpec::Matchers::ExpectedsForMultipleDiffs.for_many_matchers(diffable_matcher_list)
|
50
|
+
end
|
51
|
+
|
52
|
+
protected
|
53
|
+
|
54
|
+
def diffable_matcher_list
|
55
|
+
list = []
|
56
|
+
list.concat(diffable_matcher_list_for(matcher_1)) unless matcher_1_matches?
|
57
|
+
list.concat(diffable_matcher_list_for(matcher_2)) unless matcher_2_matches?
|
58
|
+
list
|
59
|
+
end
|
60
|
+
|
61
|
+
private
|
62
|
+
|
63
|
+
def initialize_copy(other)
|
64
|
+
@matcher_1 = @matcher_1.clone
|
65
|
+
@matcher_2 = @matcher_2.clone
|
66
|
+
super
|
67
|
+
end
|
68
|
+
|
69
|
+
def match(_expected, actual)
|
70
|
+
evaluator_klass = if supports_block_expectations? && Proc === actual
|
71
|
+
NestedEvaluator
|
72
|
+
else
|
73
|
+
SequentialEvaluator
|
74
|
+
end
|
75
|
+
|
76
|
+
@evaluator = evaluator_klass.new(actual, matcher_1, matcher_2)
|
77
|
+
end
|
78
|
+
|
79
|
+
def indent_multiline_message(message)
|
80
|
+
message.lines.map do |line|
|
81
|
+
line =~ /\S/ ? ' ' + line : line
|
82
|
+
end.join
|
83
|
+
end
|
84
|
+
|
85
|
+
def compound_failure_message
|
86
|
+
"#{indent_multiline_message(matcher_1.failure_message.sub(/\n+\z/, ''))}" \
|
87
|
+
"\n\n...#{conjunction}:" \
|
88
|
+
"\n\n#{indent_multiline_message(matcher_2.failure_message.sub(/\A\n+/, ''))}"
|
89
|
+
end
|
90
|
+
|
91
|
+
def matcher_1_matches?
|
92
|
+
evaluator.matcher_matches?(matcher_1)
|
93
|
+
end
|
94
|
+
|
95
|
+
def matcher_2_matches?
|
96
|
+
evaluator.matcher_matches?(matcher_2)
|
97
|
+
end
|
98
|
+
|
99
|
+
def matcher_supports_block_expectations?(matcher)
|
100
|
+
matcher.supports_block_expectations?
|
101
|
+
rescue NoMethodError
|
102
|
+
false
|
103
|
+
end
|
104
|
+
|
105
|
+
def matcher_is_diffable?(matcher)
|
106
|
+
matcher.diffable?
|
107
|
+
rescue NoMethodError
|
108
|
+
false
|
109
|
+
end
|
110
|
+
|
111
|
+
def diffable_matcher_list_for(matcher)
|
112
|
+
return [] unless matcher_is_diffable?(matcher)
|
113
|
+
return matcher.diffable_matcher_list if Compound === matcher
|
114
|
+
[matcher]
|
115
|
+
end
|
116
|
+
|
117
|
+
# For value expectations, we can evaluate the matchers sequentially.
|
118
|
+
class SequentialEvaluator
|
119
|
+
def initialize(actual, *)
|
120
|
+
@actual = actual
|
121
|
+
end
|
122
|
+
|
123
|
+
def matcher_matches?(matcher)
|
124
|
+
matcher.matches?(@actual)
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
# Normally, we evaluate the matching sequentially. For an expression like
|
129
|
+
# `expect(x).to foo.and bar`, this becomes:
|
130
|
+
#
|
131
|
+
# expect(x).to foo
|
132
|
+
# expect(x).to bar
|
133
|
+
#
|
134
|
+
# For block expectations, we need to nest them instead, so that
|
135
|
+
# `expect { x }.to foo.and bar` becomes:
|
136
|
+
#
|
137
|
+
# expect {
|
138
|
+
# expect { x }.to foo
|
139
|
+
# }.to bar
|
140
|
+
#
|
141
|
+
# This is necessary so that the `expect` block is only executed once.
|
142
|
+
class NestedEvaluator
|
143
|
+
def initialize(actual, matcher_1, matcher_2)
|
144
|
+
@actual = actual
|
145
|
+
@matcher_1 = matcher_1
|
146
|
+
@matcher_2 = matcher_2
|
147
|
+
@match_results = {}
|
148
|
+
|
149
|
+
inner, outer = order_block_matchers
|
150
|
+
|
151
|
+
@match_results[outer] = outer.matches?(Proc.new do |*args|
|
152
|
+
@match_results[inner] = inner.matches?(inner_matcher_block(args))
|
153
|
+
end)
|
154
|
+
end
|
155
|
+
|
156
|
+
def matcher_matches?(matcher)
|
157
|
+
@match_results.fetch(matcher) do
|
158
|
+
raise ArgumentError, "Your #{matcher.description} has no match " \
|
159
|
+
"results, this can occur when an unexpected call stack or " \
|
160
|
+
"local jump occurs. Prehaps one of your matchers needs to " \
|
161
|
+
"declare `expects_call_stack_jump?` as `true`?"
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
165
|
+
private
|
166
|
+
|
167
|
+
# Some block matchers (such as `yield_xyz`) pass args to the `expect` block.
|
168
|
+
# When such a matcher is used as the outer matcher, we need to forward the
|
169
|
+
# the args on to the `expect` block.
|
170
|
+
def inner_matcher_block(outer_args)
|
171
|
+
return @actual if outer_args.empty?
|
172
|
+
|
173
|
+
Proc.new do |*inner_args|
|
174
|
+
unless inner_args.empty?
|
175
|
+
raise ArgumentError, "(#{@matcher_1.description}) and " \
|
176
|
+
"(#{@matcher_2.description}) cannot be combined in a compound expectation " \
|
177
|
+
"since both matchers pass arguments to the block."
|
178
|
+
end
|
179
|
+
|
180
|
+
@actual.call(*outer_args)
|
181
|
+
end
|
182
|
+
end
|
183
|
+
|
184
|
+
# For a matcher like `raise_error` or `throw_symbol`, where the block will jump
|
185
|
+
# up the call stack, we need to order things so that it is the inner matcher.
|
186
|
+
# For example, we need it to be this:
|
187
|
+
#
|
188
|
+
# expect {
|
189
|
+
# expect {
|
190
|
+
# x += 1
|
191
|
+
# raise "boom"
|
192
|
+
# }.to raise_error("boom")
|
193
|
+
# }.to change { x }.by(1)
|
194
|
+
#
|
195
|
+
# ...rather than:
|
196
|
+
#
|
197
|
+
# expect {
|
198
|
+
# expect {
|
199
|
+
# x += 1
|
200
|
+
# raise "boom"
|
201
|
+
# }.to change { x }.by(1)
|
202
|
+
# }.to raise_error("boom")
|
203
|
+
#
|
204
|
+
# In the latter case, the after-block logic in the `change` matcher would never
|
205
|
+
# get executed because the `raise "boom"` line would jump to the `rescue` in the
|
206
|
+
# `raise_error` logic, so only the former case will work properly.
|
207
|
+
#
|
208
|
+
# This method figures out which matcher should be the inner matcher and which
|
209
|
+
# should be the outer matcher.
|
210
|
+
def order_block_matchers
|
211
|
+
return @matcher_1, @matcher_2 unless self.class.matcher_expects_call_stack_jump?(@matcher_2)
|
212
|
+
return @matcher_2, @matcher_1 unless self.class.matcher_expects_call_stack_jump?(@matcher_1)
|
213
|
+
|
214
|
+
raise ArgumentError, "(#{@matcher_1.description}) and " \
|
215
|
+
"(#{@matcher_2.description}) cannot be combined in a compound expectation " \
|
216
|
+
"because they both expect a call stack jump."
|
217
|
+
end
|
218
|
+
|
219
|
+
def self.matcher_expects_call_stack_jump?(matcher)
|
220
|
+
matcher.expects_call_stack_jump?
|
221
|
+
rescue NoMethodError
|
222
|
+
false
|
223
|
+
end
|
224
|
+
end
|
225
|
+
|
226
|
+
# @api public
|
227
|
+
# Matcher used to represent a compound `and` expectation.
|
228
|
+
class And < self
|
229
|
+
# @api private
|
230
|
+
# @return [String]
|
231
|
+
def failure_message
|
232
|
+
if matcher_1_matches?
|
233
|
+
matcher_2.failure_message
|
234
|
+
elsif matcher_2_matches?
|
235
|
+
matcher_1.failure_message
|
236
|
+
else
|
237
|
+
compound_failure_message
|
238
|
+
end
|
239
|
+
end
|
240
|
+
|
241
|
+
private
|
242
|
+
|
243
|
+
def match(*)
|
244
|
+
super
|
245
|
+
matcher_1_matches? && matcher_2_matches?
|
246
|
+
end
|
247
|
+
|
248
|
+
def conjunction
|
249
|
+
"and"
|
250
|
+
end
|
251
|
+
end
|
252
|
+
|
253
|
+
# @api public
|
254
|
+
# Matcher used to represent a compound `or` expectation.
|
255
|
+
class Or < self
|
256
|
+
# @api private
|
257
|
+
# @return [String]
|
258
|
+
def failure_message
|
259
|
+
compound_failure_message
|
260
|
+
end
|
261
|
+
|
262
|
+
private
|
263
|
+
|
264
|
+
def match(*)
|
265
|
+
super
|
266
|
+
matcher_1_matches? || matcher_2_matches?
|
267
|
+
end
|
268
|
+
|
269
|
+
def conjunction
|
270
|
+
"or"
|
271
|
+
end
|
272
|
+
end
|
273
|
+
end
|
274
|
+
end
|
275
|
+
end
|
276
|
+
end
|