coingecko_client 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.
Files changed (407) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +13 -0
  3. data/.rspec +3 -0
  4. data/.travis.yml +6 -0
  5. data/CODE_OF_CONDUCT.md +74 -0
  6. data/Gemfile +7 -0
  7. data/Gemfile.lock +38 -0
  8. data/LICENSE.txt +21 -0
  9. data/README.md +44 -0
  10. data/Rakefile +6 -0
  11. data/bin/console +14 -0
  12. data/bin/setup +8 -0
  13. data/coingecko_client.gemspec +34 -0
  14. data/lib/coingecko_client.rb +61 -0
  15. data/lib/coingecko_client/version.rb +3 -0
  16. data/vendor/bundle/ruby/2.7.0/bin/htmldiff +27 -0
  17. data/vendor/bundle/ruby/2.7.0/bin/ldiff +27 -0
  18. data/vendor/bundle/ruby/2.7.0/bin/rake +27 -0
  19. data/vendor/bundle/ruby/2.7.0/bin/rspec +27 -0
  20. data/vendor/bundle/ruby/2.7.0/bin/ruby_executable_hooks +25 -0
  21. data/vendor/bundle/ruby/2.7.0/cache/diff-lcs-1.4.3.gem +0 -0
  22. data/vendor/bundle/ruby/2.7.0/cache/excon-0.75.0.gem +0 -0
  23. data/vendor/bundle/ruby/2.7.0/cache/rake-12.3.3.gem +0 -0
  24. data/vendor/bundle/ruby/2.7.0/cache/rspec-3.9.0.gem +0 -0
  25. data/vendor/bundle/ruby/2.7.0/cache/rspec-core-3.9.2.gem +0 -0
  26. data/vendor/bundle/ruby/2.7.0/cache/rspec-expectations-3.9.2.gem +0 -0
  27. data/vendor/bundle/ruby/2.7.0/cache/rspec-mocks-3.9.1.gem +0 -0
  28. data/vendor/bundle/ruby/2.7.0/cache/rspec-support-3.9.3.gem +0 -0
  29. data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.4.3/.rspec +1 -0
  30. data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.4.3/Code-of-Conduct.md +74 -0
  31. data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.4.3/Contributing.md +84 -0
  32. data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.4.3/History.md +278 -0
  33. data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.4.3/License.md +39 -0
  34. data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.4.3/Manifest.txt +45 -0
  35. data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.4.3/README.rdoc +84 -0
  36. data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.4.3/Rakefile +57 -0
  37. data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.4.3/autotest/discover.rb +3 -0
  38. data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.4.3/bin/htmldiff +35 -0
  39. data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.4.3/bin/ldiff +9 -0
  40. data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.4.3/docs/COPYING.txt +339 -0
  41. data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.4.3/docs/artistic.txt +127 -0
  42. data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.4.3/lib/diff-lcs.rb +3 -0
  43. data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.4.3/lib/diff/lcs.rb +732 -0
  44. data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.4.3/lib/diff/lcs/array.rb +7 -0
  45. data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.4.3/lib/diff/lcs/backports.rb +9 -0
  46. data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.4.3/lib/diff/lcs/block.rb +37 -0
  47. data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.4.3/lib/diff/lcs/callbacks.rb +325 -0
  48. data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.4.3/lib/diff/lcs/change.rb +174 -0
  49. data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.4.3/lib/diff/lcs/htmldiff.rb +150 -0
  50. data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.4.3/lib/diff/lcs/hunk.rb +291 -0
  51. data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.4.3/lib/diff/lcs/internals.rb +304 -0
  52. data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.4.3/lib/diff/lcs/ldiff.rb +175 -0
  53. data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.4.3/lib/diff/lcs/string.rb +5 -0
  54. data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.4.3/spec/change_spec.rb +89 -0
  55. data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.4.3/spec/diff_spec.rb +51 -0
  56. data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.4.3/spec/fixtures/aX +1 -0
  57. data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.4.3/spec/fixtures/bXaX +1 -0
  58. data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.4.3/spec/fixtures/ds1.csv +50 -0
  59. data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.4.3/spec/fixtures/ds2.csv +51 -0
  60. data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.4.3/spec/fixtures/ldiff/output.diff +4 -0
  61. data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.4.3/spec/fixtures/ldiff/output.diff-c +7 -0
  62. data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.4.3/spec/fixtures/ldiff/output.diff-e +3 -0
  63. data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.4.3/spec/fixtures/ldiff/output.diff-f +3 -0
  64. data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.4.3/spec/fixtures/ldiff/output.diff-u +5 -0
  65. data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.4.3/spec/hunk_spec.rb +72 -0
  66. data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.4.3/spec/issues_spec.rb +98 -0
  67. data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.4.3/spec/lcs_spec.rb +56 -0
  68. data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.4.3/spec/ldiff_spec.rb +86 -0
  69. data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.4.3/spec/patch_spec.rb +416 -0
  70. data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.4.3/spec/sdiff_spec.rb +214 -0
  71. data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.4.3/spec/spec_helper.rb +375 -0
  72. data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.4.3/spec/traverse_balanced_spec.rb +310 -0
  73. data/vendor/bundle/ruby/2.7.0/gems/diff-lcs-1.4.3/spec/traverse_sequences_spec.rb +139 -0
  74. data/vendor/bundle/ruby/2.7.0/gems/excon-0.75.0/CONTRIBUTING.md +23 -0
  75. data/vendor/bundle/ruby/2.7.0/gems/excon-0.75.0/CONTRIBUTORS.md +140 -0
  76. data/vendor/bundle/ruby/2.7.0/gems/excon-0.75.0/LICENSE.md +20 -0
  77. data/vendor/bundle/ruby/2.7.0/gems/excon-0.75.0/README.md +492 -0
  78. data/vendor/bundle/ruby/2.7.0/gems/excon-0.75.0/data/cacert.pem +3466 -0
  79. data/vendor/bundle/ruby/2.7.0/gems/excon-0.75.0/excon.gemspec +43 -0
  80. data/vendor/bundle/ruby/2.7.0/gems/excon-0.75.0/lib/excon.rb +255 -0
  81. data/vendor/bundle/ruby/2.7.0/gems/excon-0.75.0/lib/excon/connection.rb +594 -0
  82. data/vendor/bundle/ruby/2.7.0/gems/excon-0.75.0/lib/excon/constants.rb +169 -0
  83. data/vendor/bundle/ruby/2.7.0/gems/excon-0.75.0/lib/excon/error.rb +229 -0
  84. data/vendor/bundle/ruby/2.7.0/gems/excon-0.75.0/lib/excon/extensions/uri.rb +34 -0
  85. data/vendor/bundle/ruby/2.7.0/gems/excon-0.75.0/lib/excon/headers.rb +84 -0
  86. data/vendor/bundle/ruby/2.7.0/gems/excon-0.75.0/lib/excon/instrumentors/logging_instrumentor.rb +48 -0
  87. data/vendor/bundle/ruby/2.7.0/gems/excon-0.75.0/lib/excon/instrumentors/standard_instrumentor.rb +21 -0
  88. data/vendor/bundle/ruby/2.7.0/gems/excon-0.75.0/lib/excon/middlewares/base.rb +31 -0
  89. data/vendor/bundle/ruby/2.7.0/gems/excon-0.75.0/lib/excon/middlewares/capture_cookies.rb +32 -0
  90. data/vendor/bundle/ruby/2.7.0/gems/excon-0.75.0/lib/excon/middlewares/decompress.rb +37 -0
  91. data/vendor/bundle/ruby/2.7.0/gems/excon-0.75.0/lib/excon/middlewares/escape_path.rb +12 -0
  92. data/vendor/bundle/ruby/2.7.0/gems/excon-0.75.0/lib/excon/middlewares/expects.rb +25 -0
  93. data/vendor/bundle/ruby/2.7.0/gems/excon-0.75.0/lib/excon/middlewares/idempotent.rb +57 -0
  94. data/vendor/bundle/ruby/2.7.0/gems/excon-0.75.0/lib/excon/middlewares/instrumentor.rb +49 -0
  95. data/vendor/bundle/ruby/2.7.0/gems/excon-0.75.0/lib/excon/middlewares/mock.rb +61 -0
  96. data/vendor/bundle/ruby/2.7.0/gems/excon-0.75.0/lib/excon/middlewares/redirect_follower.rb +87 -0
  97. data/vendor/bundle/ruby/2.7.0/gems/excon-0.75.0/lib/excon/middlewares/response_parser.rb +16 -0
  98. data/vendor/bundle/ruby/2.7.0/gems/excon-0.75.0/lib/excon/pretty_printer.rb +39 -0
  99. data/vendor/bundle/ruby/2.7.0/gems/excon-0.75.0/lib/excon/response.rb +231 -0
  100. data/vendor/bundle/ruby/2.7.0/gems/excon-0.75.0/lib/excon/socket.rb +306 -0
  101. data/vendor/bundle/ruby/2.7.0/gems/excon-0.75.0/lib/excon/ssl_socket.rb +184 -0
  102. data/vendor/bundle/ruby/2.7.0/gems/excon-0.75.0/lib/excon/test/plugin/server/exec.rb +23 -0
  103. data/vendor/bundle/ruby/2.7.0/gems/excon-0.75.0/lib/excon/test/plugin/server/puma.rb +20 -0
  104. data/vendor/bundle/ruby/2.7.0/gems/excon-0.75.0/lib/excon/test/plugin/server/unicorn.rb +35 -0
  105. data/vendor/bundle/ruby/2.7.0/gems/excon-0.75.0/lib/excon/test/plugin/server/webrick.rb +23 -0
  106. data/vendor/bundle/ruby/2.7.0/gems/excon-0.75.0/lib/excon/test/server.rb +106 -0
  107. data/vendor/bundle/ruby/2.7.0/gems/excon-0.75.0/lib/excon/unix_socket.rb +41 -0
  108. data/vendor/bundle/ruby/2.7.0/gems/excon-0.75.0/lib/excon/utils.rb +125 -0
  109. data/vendor/bundle/ruby/2.7.0/gems/excon-0.75.0/lib/excon/version.rb +4 -0
  110. data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/CONTRIBUTING.rdoc +43 -0
  111. data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/Gemfile +3 -0
  112. data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/History.rdoc +2344 -0
  113. data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/MIT-LICENSE +21 -0
  114. data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/README.rdoc +156 -0
  115. data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/Rakefile +41 -0
  116. data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/azure-pipelines.yml +11 -0
  117. data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/bin/bundle +105 -0
  118. data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/bin/console +7 -0
  119. data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/bin/rake +29 -0
  120. data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/bin/rdoc +29 -0
  121. data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/bin/rubocop +29 -0
  122. data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/bin/setup +6 -0
  123. data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/doc/command_line_usage.rdoc +158 -0
  124. data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/doc/example/Rakefile1 +38 -0
  125. data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/doc/example/Rakefile2 +35 -0
  126. data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/doc/example/a.c +6 -0
  127. data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/doc/example/b.c +6 -0
  128. data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/doc/example/main.c +11 -0
  129. data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/doc/glossary.rdoc +42 -0
  130. data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/doc/jamis.rb +592 -0
  131. data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/doc/proto_rake.rdoc +127 -0
  132. data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/doc/rake.1 +156 -0
  133. data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/doc/rakefile.rdoc +622 -0
  134. data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/doc/rational.rdoc +151 -0
  135. data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/exe/rake +27 -0
  136. data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake.rb +71 -0
  137. data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/application.rb +824 -0
  138. data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/backtrace.rb +24 -0
  139. data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/clean.rb +78 -0
  140. data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/cloneable.rb +17 -0
  141. data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/cpu_counter.rb +107 -0
  142. data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/default_loader.rb +15 -0
  143. data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/dsl_definition.rb +195 -0
  144. data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/early_time.rb +22 -0
  145. data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/ext/core.rb +26 -0
  146. data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/ext/string.rb +176 -0
  147. data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/file_creation_task.rb +25 -0
  148. data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/file_list.rb +435 -0
  149. data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/file_task.rb +54 -0
  150. data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/file_utils.rb +137 -0
  151. data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/file_utils_ext.rb +145 -0
  152. data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/invocation_chain.rb +57 -0
  153. data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/invocation_exception_mixin.rb +17 -0
  154. data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/late_time.rb +18 -0
  155. data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/linked_list.rb +112 -0
  156. data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/loaders/makefile.rb +54 -0
  157. data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/multi_task.rb +14 -0
  158. data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/name_space.rb +38 -0
  159. data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/packagetask.rb +207 -0
  160. data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/phony.rb +16 -0
  161. data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/private_reader.rb +21 -0
  162. data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/promise.rb +100 -0
  163. data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/pseudo_status.rb +30 -0
  164. data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/rake_module.rb +67 -0
  165. data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/rake_test_loader.rb +27 -0
  166. data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/rule_recursion_overflow_error.rb +20 -0
  167. data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/scope.rb +43 -0
  168. data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/task.rb +413 -0
  169. data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/task_argument_error.rb +8 -0
  170. data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/task_arguments.rb +109 -0
  171. data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/task_manager.rb +324 -0
  172. data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/tasklib.rb +12 -0
  173. data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/testtask.rb +224 -0
  174. data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/thread_history_display.rb +49 -0
  175. data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/thread_pool.rb +163 -0
  176. data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/trace_output.rb +23 -0
  177. data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/version.rb +10 -0
  178. data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/lib/rake/win32.rb +51 -0
  179. data/vendor/bundle/ruby/2.7.0/gems/rake-12.3.3/rake.gemspec +42 -0
  180. data/vendor/bundle/ruby/2.7.0/gems/rspec-3.9.0/LICENSE.md +27 -0
  181. data/vendor/bundle/ruby/2.7.0/gems/rspec-3.9.0/README.md +43 -0
  182. data/vendor/bundle/ruby/2.7.0/gems/rspec-3.9.0/lib/rspec.rb +3 -0
  183. data/vendor/bundle/ruby/2.7.0/gems/rspec-3.9.0/lib/rspec/version.rb +5 -0
  184. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/.document +5 -0
  185. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/.yardopts +8 -0
  186. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/Changelog.md +2291 -0
  187. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/LICENSE.md +26 -0
  188. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/README.md +384 -0
  189. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/exe/rspec +4 -0
  190. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/autorun.rb +3 -0
  191. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core.rb +186 -0
  192. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/backtrace_formatter.rb +65 -0
  193. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/bisect/coordinator.rb +62 -0
  194. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/bisect/example_minimizer.rb +173 -0
  195. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/bisect/fork_runner.rb +135 -0
  196. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/bisect/server.rb +61 -0
  197. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/bisect/shell_command.rb +126 -0
  198. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/bisect/shell_runner.rb +73 -0
  199. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/bisect/utilities.rb +58 -0
  200. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/configuration.rb +2363 -0
  201. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/configuration_options.rb +233 -0
  202. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/did_you_mean.rb +46 -0
  203. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/drb.rb +113 -0
  204. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/dsl.rb +98 -0
  205. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/example.rb +656 -0
  206. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/example_group.rb +900 -0
  207. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/example_status_persister.rb +235 -0
  208. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/filter_manager.rb +231 -0
  209. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/flat_map.rb +20 -0
  210. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/formatters.rb +273 -0
  211. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/formatters/base_bisect_formatter.rb +45 -0
  212. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/formatters/base_formatter.rb +70 -0
  213. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/formatters/base_text_formatter.rb +75 -0
  214. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/formatters/bisect_drb_formatter.rb +29 -0
  215. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/formatters/bisect_progress_formatter.rb +157 -0
  216. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/formatters/console_codes.rb +68 -0
  217. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/formatters/deprecation_formatter.rb +223 -0
  218. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/formatters/documentation_formatter.rb +102 -0
  219. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/formatters/exception_presenter.rb +511 -0
  220. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/formatters/failure_list_formatter.rb +23 -0
  221. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/formatters/fallback_message_formatter.rb +28 -0
  222. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/formatters/helpers.rb +110 -0
  223. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/formatters/html_formatter.rb +153 -0
  224. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/formatters/html_printer.rb +414 -0
  225. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/formatters/html_snippet_extractor.rb +120 -0
  226. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/formatters/json_formatter.rb +102 -0
  227. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/formatters/profile_formatter.rb +68 -0
  228. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/formatters/progress_formatter.rb +29 -0
  229. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/formatters/protocol.rb +182 -0
  230. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/formatters/snippet_extractor.rb +134 -0
  231. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/formatters/syntax_highlighter.rb +91 -0
  232. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/hooks.rb +641 -0
  233. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/invocations.rb +87 -0
  234. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/memoized_helpers.rb +554 -0
  235. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/metadata.rb +498 -0
  236. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/metadata_filter.rb +255 -0
  237. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/minitest_assertions_adapter.rb +31 -0
  238. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/mocking_adapters/flexmock.rb +31 -0
  239. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/mocking_adapters/mocha.rb +57 -0
  240. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/mocking_adapters/null.rb +14 -0
  241. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/mocking_adapters/rr.rb +31 -0
  242. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/mocking_adapters/rspec.rb +32 -0
  243. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/notifications.rb +521 -0
  244. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/option_parser.rb +316 -0
  245. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/ordering.rb +158 -0
  246. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/output_wrapper.rb +29 -0
  247. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/pending.rb +165 -0
  248. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/profiler.rb +34 -0
  249. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/project_initializer.rb +48 -0
  250. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/project_initializer/.rspec +1 -0
  251. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/project_initializer/spec/spec_helper.rb +100 -0
  252. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/rake_task.rb +188 -0
  253. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/reporter.rb +265 -0
  254. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/ruby_project.rb +53 -0
  255. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/runner.rb +204 -0
  256. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/sandbox.rb +37 -0
  257. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/set.rb +54 -0
  258. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/shared_context.rb +55 -0
  259. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/shared_example_group.rb +271 -0
  260. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/shell_escape.rb +49 -0
  261. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/test_unit_assertions_adapter.rb +30 -0
  262. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/version.rb +9 -0
  263. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/warnings.rb +40 -0
  264. data/vendor/bundle/ruby/2.7.0/gems/rspec-core-3.9.2/lib/rspec/core/world.rb +276 -0
  265. data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.2/.document +5 -0
  266. data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.2/.yardopts +6 -0
  267. data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.2/Changelog.md +1191 -0
  268. data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.2/LICENSE.md +25 -0
  269. data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.2/README.md +320 -0
  270. data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.2/lib/rspec/expectations.rb +82 -0
  271. data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.2/lib/rspec/expectations/block_snippet_extractor.rb +253 -0
  272. data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.2/lib/rspec/expectations/configuration.rb +215 -0
  273. data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.2/lib/rspec/expectations/expectation_target.rb +127 -0
  274. data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.2/lib/rspec/expectations/fail_with.rb +39 -0
  275. data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.2/lib/rspec/expectations/failure_aggregator.rb +194 -0
  276. data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.2/lib/rspec/expectations/handler.rb +170 -0
  277. data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.2/lib/rspec/expectations/minitest_integration.rb +58 -0
  278. data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.2/lib/rspec/expectations/syntax.rb +132 -0
  279. data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.2/lib/rspec/expectations/version.rb +8 -0
  280. data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.2/lib/rspec/matchers.rb +1038 -0
  281. data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.2/lib/rspec/matchers/aliased_matcher.rb +116 -0
  282. data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.2/lib/rspec/matchers/built_in.rb +52 -0
  283. data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.2/lib/rspec/matchers/built_in/all.rb +86 -0
  284. data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.2/lib/rspec/matchers/built_in/base_matcher.rb +193 -0
  285. data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.2/lib/rspec/matchers/built_in/be.rb +288 -0
  286. data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.2/lib/rspec/matchers/built_in/be_between.rb +77 -0
  287. data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.2/lib/rspec/matchers/built_in/be_instance_of.rb +26 -0
  288. data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.2/lib/rspec/matchers/built_in/be_kind_of.rb +20 -0
  289. data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.2/lib/rspec/matchers/built_in/be_within.rb +72 -0
  290. data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.2/lib/rspec/matchers/built_in/change.rb +428 -0
  291. data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.2/lib/rspec/matchers/built_in/compound.rb +276 -0
  292. data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.2/lib/rspec/matchers/built_in/contain_exactly.rb +302 -0
  293. data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.2/lib/rspec/matchers/built_in/cover.rb +24 -0
  294. data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.2/lib/rspec/matchers/built_in/eq.rb +40 -0
  295. data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.2/lib/rspec/matchers/built_in/eql.rb +34 -0
  296. data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.2/lib/rspec/matchers/built_in/equal.rb +81 -0
  297. data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.2/lib/rspec/matchers/built_in/exist.rb +90 -0
  298. data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.2/lib/rspec/matchers/built_in/has.rb +103 -0
  299. data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.2/lib/rspec/matchers/built_in/have_attributes.rb +114 -0
  300. data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.2/lib/rspec/matchers/built_in/include.rb +149 -0
  301. data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.2/lib/rspec/matchers/built_in/match.rb +106 -0
  302. data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.2/lib/rspec/matchers/built_in/operators.rb +128 -0
  303. data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.2/lib/rspec/matchers/built_in/output.rb +200 -0
  304. data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.2/lib/rspec/matchers/built_in/raise_error.rb +230 -0
  305. data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.2/lib/rspec/matchers/built_in/respond_to.rb +199 -0
  306. data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.2/lib/rspec/matchers/built_in/satisfy.rb +60 -0
  307. data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.2/lib/rspec/matchers/built_in/start_or_end_with.rb +94 -0
  308. data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.2/lib/rspec/matchers/built_in/throw_symbol.rb +132 -0
  309. data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.2/lib/rspec/matchers/built_in/yield.rb +441 -0
  310. data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.2/lib/rspec/matchers/composable.rb +171 -0
  311. data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.2/lib/rspec/matchers/dsl.rb +540 -0
  312. data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.2/lib/rspec/matchers/english_phrasing.rb +58 -0
  313. data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.2/lib/rspec/matchers/expecteds_for_multiple_diffs.rb +82 -0
  314. data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.2/lib/rspec/matchers/fail_matchers.rb +42 -0
  315. data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.2/lib/rspec/matchers/generated_descriptions.rb +41 -0
  316. data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.2/lib/rspec/matchers/matcher_delegator.rb +35 -0
  317. data/vendor/bundle/ruby/2.7.0/gems/rspec-expectations-3.9.2/lib/rspec/matchers/matcher_protocol.rb +99 -0
  318. data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/.document +5 -0
  319. data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/.yardopts +6 -0
  320. data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/Changelog.md +1133 -0
  321. data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/LICENSE.md +25 -0
  322. data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/README.md +463 -0
  323. data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks.rb +130 -0
  324. data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/any_instance.rb +11 -0
  325. data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/any_instance/chain.rb +111 -0
  326. data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/any_instance/error_generator.rb +31 -0
  327. data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/any_instance/expect_chain_chain.rb +31 -0
  328. data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/any_instance/expectation_chain.rb +50 -0
  329. data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/any_instance/message_chains.rb +83 -0
  330. data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/any_instance/proxy.rb +116 -0
  331. data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/any_instance/recorder.rb +294 -0
  332. data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/any_instance/stub_chain.rb +51 -0
  333. data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/any_instance/stub_chain_chain.rb +23 -0
  334. data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/argument_list_matcher.rb +100 -0
  335. data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/argument_matchers.rb +322 -0
  336. data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/configuration.rb +212 -0
  337. data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/error_generator.rb +369 -0
  338. data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/example_methods.rb +434 -0
  339. data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/instance_method_stasher.rb +146 -0
  340. data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/marshal_extension.rb +41 -0
  341. data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/matchers/expectation_customization.rb +20 -0
  342. data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/matchers/have_received.rb +134 -0
  343. data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/matchers/receive.rb +132 -0
  344. data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/matchers/receive_message_chain.rb +82 -0
  345. data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/matchers/receive_messages.rb +77 -0
  346. data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/message_chain.rb +87 -0
  347. data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/message_expectation.rb +751 -0
  348. data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/method_double.rb +287 -0
  349. data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/method_reference.rb +202 -0
  350. data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/minitest_integration.rb +68 -0
  351. data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/mutate_const.rb +339 -0
  352. data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/object_reference.rb +149 -0
  353. data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/order_group.rb +81 -0
  354. data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/proxy.rb +503 -0
  355. data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/space.rb +238 -0
  356. data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/standalone.rb +3 -0
  357. data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/syntax.rb +325 -0
  358. data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/targets.rb +124 -0
  359. data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/test_double.rb +171 -0
  360. data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/verifying_double.rb +129 -0
  361. data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/verifying_message_expectation.rb +54 -0
  362. data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/verifying_proxy.rb +220 -0
  363. data/vendor/bundle/ruby/2.7.0/gems/rspec-mocks-3.9.1/lib/rspec/mocks/version.rb +9 -0
  364. data/vendor/bundle/ruby/2.7.0/gems/rspec-support-3.9.3/Changelog.md +302 -0
  365. data/vendor/bundle/ruby/2.7.0/gems/rspec-support-3.9.3/LICENSE.md +23 -0
  366. data/vendor/bundle/ruby/2.7.0/gems/rspec-support-3.9.3/README.md +40 -0
  367. data/vendor/bundle/ruby/2.7.0/gems/rspec-support-3.9.3/lib/rspec/support.rb +149 -0
  368. data/vendor/bundle/ruby/2.7.0/gems/rspec-support-3.9.3/lib/rspec/support/caller_filter.rb +83 -0
  369. data/vendor/bundle/ruby/2.7.0/gems/rspec-support-3.9.3/lib/rspec/support/comparable_version.rb +46 -0
  370. data/vendor/bundle/ruby/2.7.0/gems/rspec-support-3.9.3/lib/rspec/support/differ.rb +215 -0
  371. data/vendor/bundle/ruby/2.7.0/gems/rspec-support-3.9.3/lib/rspec/support/directory_maker.rb +63 -0
  372. data/vendor/bundle/ruby/2.7.0/gems/rspec-support-3.9.3/lib/rspec/support/encoded_string.rb +161 -0
  373. data/vendor/bundle/ruby/2.7.0/gems/rspec-support-3.9.3/lib/rspec/support/fuzzy_matcher.rb +48 -0
  374. data/vendor/bundle/ruby/2.7.0/gems/rspec-support-3.9.3/lib/rspec/support/hunk_generator.rb +47 -0
  375. data/vendor/bundle/ruby/2.7.0/gems/rspec-support-3.9.3/lib/rspec/support/matcher_definition.rb +42 -0
  376. data/vendor/bundle/ruby/2.7.0/gems/rspec-support-3.9.3/lib/rspec/support/method_signature_verifier.rb +438 -0
  377. data/vendor/bundle/ruby/2.7.0/gems/rspec-support-3.9.3/lib/rspec/support/mutex.rb +73 -0
  378. data/vendor/bundle/ruby/2.7.0/gems/rspec-support-3.9.3/lib/rspec/support/object_formatter.rb +275 -0
  379. data/vendor/bundle/ruby/2.7.0/gems/rspec-support-3.9.3/lib/rspec/support/recursive_const_methods.rb +76 -0
  380. data/vendor/bundle/ruby/2.7.0/gems/rspec-support-3.9.3/lib/rspec/support/reentrant_mutex.rb +61 -0
  381. data/vendor/bundle/ruby/2.7.0/gems/rspec-support-3.9.3/lib/rspec/support/ruby_features.rb +190 -0
  382. data/vendor/bundle/ruby/2.7.0/gems/rspec-support-3.9.3/lib/rspec/support/source.rb +75 -0
  383. data/vendor/bundle/ruby/2.7.0/gems/rspec-support-3.9.3/lib/rspec/support/source/location.rb +21 -0
  384. data/vendor/bundle/ruby/2.7.0/gems/rspec-support-3.9.3/lib/rspec/support/source/node.rb +110 -0
  385. data/vendor/bundle/ruby/2.7.0/gems/rspec-support-3.9.3/lib/rspec/support/source/token.rb +87 -0
  386. data/vendor/bundle/ruby/2.7.0/gems/rspec-support-3.9.3/lib/rspec/support/spec.rb +81 -0
  387. data/vendor/bundle/ruby/2.7.0/gems/rspec-support-3.9.3/lib/rspec/support/spec/deprecation_helpers.rb +64 -0
  388. data/vendor/bundle/ruby/2.7.0/gems/rspec-support-3.9.3/lib/rspec/support/spec/formatting_support.rb +9 -0
  389. data/vendor/bundle/ruby/2.7.0/gems/rspec-support-3.9.3/lib/rspec/support/spec/in_sub_process.rb +69 -0
  390. data/vendor/bundle/ruby/2.7.0/gems/rspec-support-3.9.3/lib/rspec/support/spec/library_wide_checks.rb +150 -0
  391. data/vendor/bundle/ruby/2.7.0/gems/rspec-support-3.9.3/lib/rspec/support/spec/shell_out.rb +89 -0
  392. data/vendor/bundle/ruby/2.7.0/gems/rspec-support-3.9.3/lib/rspec/support/spec/stderr_splitter.rb +75 -0
  393. data/vendor/bundle/ruby/2.7.0/gems/rspec-support-3.9.3/lib/rspec/support/spec/string_matcher.rb +46 -0
  394. data/vendor/bundle/ruby/2.7.0/gems/rspec-support-3.9.3/lib/rspec/support/spec/with_isolated_directory.rb +13 -0
  395. data/vendor/bundle/ruby/2.7.0/gems/rspec-support-3.9.3/lib/rspec/support/spec/with_isolated_stderr.rb +13 -0
  396. data/vendor/bundle/ruby/2.7.0/gems/rspec-support-3.9.3/lib/rspec/support/version.rb +7 -0
  397. data/vendor/bundle/ruby/2.7.0/gems/rspec-support-3.9.3/lib/rspec/support/warnings.rb +39 -0
  398. data/vendor/bundle/ruby/2.7.0/gems/rspec-support-3.9.3/lib/rspec/support/with_keywords_when_needed.rb +33 -0
  399. data/vendor/bundle/ruby/2.7.0/specifications/diff-lcs-1.4.3.gemspec +50 -0
  400. data/vendor/bundle/ruby/2.7.0/specifications/excon-0.75.0.gemspec +56 -0
  401. data/vendor/bundle/ruby/2.7.0/specifications/rake-12.3.3.gemspec +43 -0
  402. data/vendor/bundle/ruby/2.7.0/specifications/rspec-3.9.0.gemspec +39 -0
  403. data/vendor/bundle/ruby/2.7.0/specifications/rspec-core-3.9.2.gemspec +53 -0
  404. data/vendor/bundle/ruby/2.7.0/specifications/rspec-expectations-3.9.2.gemspec +44 -0
  405. data/vendor/bundle/ruby/2.7.0/specifications/rspec-mocks-3.9.1.gemspec +44 -0
  406. data/vendor/bundle/ruby/2.7.0/specifications/rspec-support-3.9.3.gemspec +36 -0
  407. metadata +480 -0
@@ -0,0 +1,127 @@
1
+ The "Artistic License"
2
+
3
+ Preamble
4
+
5
+ The intent of this document is to state the conditions under which a
6
+ Package may be copied, such that the Copyright Holder maintains some
7
+ semblance of artistic control over the development of the package,
8
+ while giving the users of the package the right to use and distribute
9
+ the Package in a more-or-less customary fashion, plus the right to make
10
+ reasonable modifications.
11
+
12
+ Definitions:
13
+
14
+ "Package" refers to the collection of files distributed by the
15
+ Copyright Holder, and derivatives of that collection of files
16
+ created through textual modification.
17
+
18
+ "Standard Version" refers to such a Package if it has not been
19
+ modified, or has been modified in accordance with the wishes
20
+ of the Copyright Holder as specified below.
21
+
22
+ "Copyright Holder" is whoever is named in the copyright or
23
+ copyrights for the package.
24
+
25
+ "You" is you, if you're thinking about copying or distributing
26
+ this Package.
27
+
28
+ "Reasonable copying fee" is whatever you can justify on the
29
+ basis of media cost, duplication charges, time of people involved,
30
+ and so on. (You will not be required to justify it to the
31
+ Copyright Holder, but only to the computing community at large
32
+ as a market that must bear the fee.)
33
+
34
+ "Freely Available" means that no fee is charged for the item
35
+ itself, though there may be fees involved in handling the item.
36
+ It also means that recipients of the item may redistribute it
37
+ under the same conditions they received it.
38
+
39
+ 1. You may make and give away verbatim copies of the source form of the
40
+ Standard Version of this Package without restriction, provided that you
41
+ duplicate all of the original copyright notices and associated disclaimers.
42
+
43
+ 2. You may apply bug fixes, portability fixes and other modifications
44
+ derived from the Public Domain or from the Copyright Holder. A Package
45
+ modified in such a way shall still be considered the Standard Version.
46
+
47
+ 3. You may otherwise modify your copy of this Package in any way, provided
48
+ that you insert a prominent notice in each changed file stating how and
49
+ when you changed that file, and provided that you do at least ONE of the
50
+ following:
51
+
52
+ a) place your modifications in the Public Domain or otherwise make them
53
+ Freely Available, such as by posting said modifications to Usenet or
54
+ an equivalent medium, or placing the modifications on a major archive
55
+ site such as uunet.uu.net, or by allowing the Copyright Holder to include
56
+ your modifications in the Standard Version of the Package.
57
+
58
+ b) use the modified Package only within your corporation or organization.
59
+
60
+ c) rename any non-standard executables so the names do not conflict
61
+ with standard executables, which must also be provided, and provide
62
+ a separate manual page for each non-standard executable that clearly
63
+ documents how it differs from the Standard Version.
64
+
65
+ d) make other distribution arrangements with the Copyright Holder.
66
+
67
+ 4. You may distribute the programs of this Package in object code or
68
+ executable form, provided that you do at least ONE of the following:
69
+
70
+ a) distribute a Standard Version of the executables and library files,
71
+ together with instructions (in the manual page or equivalent) on where
72
+ to get the Standard Version.
73
+
74
+ b) accompany the distribution with the machine-readable source of
75
+ the Package with your modifications.
76
+
77
+ c) give non-standard executables non-standard names, and clearly
78
+ document the differences in manual pages (or equivalent), together
79
+ with instructions on where to get the Standard Version.
80
+
81
+ d) make other distribution arrangements with the Copyright Holder.
82
+
83
+ 5. You may charge a reasonable copying fee for any distribution of this
84
+ Package. You may charge any fee you choose for support of this
85
+ Package. You may not charge a fee for this Package itself. However,
86
+ you may distribute this Package in aggregate with other (possibly
87
+ commercial) programs as part of a larger (possibly commercial) software
88
+ distribution provided that you do not advertise this Package as a
89
+ product of your own. You may embed this Package's interpreter within
90
+ an executable of yours (by linking); this shall be construed as a mere
91
+ form of aggregation, provided that the complete Standard Version of the
92
+ interpreter is so embedded.
93
+
94
+ 6. The scripts and library files supplied as input to or produced as
95
+ output from the programs of this Package do not automatically fall
96
+ under the copyright of this Package, but belong to whoever generated
97
+ them, and may be sold commercially, and may be aggregated with this
98
+ Package. If such scripts or library files are aggregated with this
99
+ Package via the so-called "undump" or "unexec" methods of producing a
100
+ binary executable image, then distribution of such an image shall
101
+ neither be construed as a distribution of this Package nor shall it
102
+ fall under the restrictions of Paragraphs 3 and 4, provided that you do
103
+ not represent such an executable image as a Standard Version of this
104
+ Package.
105
+
106
+ 7. C subroutines (or comparably compiled subroutines in other
107
+ languages) supplied by you and linked into this Package in order to
108
+ emulate subroutines and variables of the language defined by this
109
+ Package shall not be considered part of this Package, but are the
110
+ equivalent of input as in Paragraph 6, provided these subroutines do
111
+ not change the language in any way that would cause it to fail the
112
+ regression tests for the language.
113
+
114
+ 8. Aggregation of this Package with a commercial distribution is always
115
+ permitted provided that the use of this Package is embedded; that is,
116
+ when no overt attempt is made to make this Package's interfaces visible
117
+ to the end user of the commercial distribution. Such use shall not be
118
+ construed as a distribution of this Package.
119
+
120
+ 9. The name of the Copyright Holder may not be used to endorse or promote
121
+ products derived from this software without specific prior written permission.
122
+
123
+ 10. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
124
+ IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
125
+ WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
126
+
127
+ The End
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'diff/lcs'
@@ -0,0 +1,732 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Diff; end unless defined? Diff # rubocop:disable Style/Documentation
4
+
5
+ # == How Diff Works (by Mark-Jason Dominus)
6
+ #
7
+ # I once read an article written by the authors of +diff+; they said that they
8
+ # hard worked very hard on the algorithm until they found the right one.
9
+ #
10
+ # I think what they ended up using (and I hope someone will correct me, because
11
+ # I am not very confident about this) was the `longest common subsequence'
12
+ # method. In the LCS problem, you have two sequences of items:
13
+ #
14
+ # a b c d f g h j q z
15
+ # a b c d e f g i j k r x y z
16
+ #
17
+ # and you want to find the longest sequence of items that is present in both
18
+ # original sequences in the same order. That is, you want to find a new
19
+ # sequence *S* which can be obtained from the first sequence by deleting some
20
+ # items, and from the second sequence by deleting other items. You also want
21
+ # *S* to be as long as possible. In this case *S* is:
22
+ #
23
+ # a b c d f g j z
24
+ #
25
+ # From there it's only a small step to get diff-like output:
26
+ #
27
+ # e h i k q r x y
28
+ # + - + + - + + +
29
+ #
30
+ # This module solves the LCS problem. It also includes a canned function to
31
+ # generate +diff+-like output.
32
+ #
33
+ # It might seem from the example above that the LCS of two sequences is always
34
+ # pretty obvious, but that's not always the case, especially when the two
35
+ # sequences have many repeated elements. For example, consider
36
+ #
37
+ # a x b y c z p d q
38
+ # a b c a x b y c z
39
+ #
40
+ # A naive approach might start by matching up the +a+ and +b+ that appear at
41
+ # the beginning of each sequence, like this:
42
+ #
43
+ # a x b y c z p d q
44
+ # a b c a b y c z
45
+ #
46
+ # This finds the common subsequence +a b c z+. But actually, the LCS is +a x b
47
+ # y c z+:
48
+ #
49
+ # a x b y c z p d q
50
+ # a b c a x b y c z
51
+ module Diff::LCS
52
+ VERSION = '1.4.3'
53
+ end
54
+
55
+ require 'diff/lcs/callbacks'
56
+ require 'diff/lcs/internals'
57
+
58
+ module Diff::LCS # rubocop:disable Style/Documentation
59
+ # Returns an Array containing the longest common subsequence(s) between
60
+ # +self+ and +other+. See Diff::LCS#lcs.
61
+ #
62
+ # lcs = seq1.lcs(seq2)
63
+ def lcs(other, &block) #:yields self[i] if there are matched subsequences:
64
+ Diff::LCS.lcs(self, other, &block)
65
+ end
66
+
67
+ # Returns the difference set between +self+ and +other+. See Diff::LCS#diff.
68
+ def diff(other, callbacks = nil, &block)
69
+ Diff::LCS.diff(self, other, callbacks, &block)
70
+ end
71
+
72
+ # Returns the balanced ("side-by-side") difference set between +self+ and
73
+ # +other+. See Diff::LCS#sdiff.
74
+ def sdiff(other, callbacks = nil, &block)
75
+ Diff::LCS.sdiff(self, other, callbacks, &block)
76
+ end
77
+
78
+ # Traverses the discovered longest common subsequences between +self+ and
79
+ # +other+. See Diff::LCS#traverse_sequences.
80
+ def traverse_sequences(other, callbacks = nil, &block)
81
+ traverse_sequences(self, other, callbacks || Diff::LCS::SequenceCallbacks, &block)
82
+ end
83
+
84
+ # Traverses the discovered longest common subsequences between +self+ and
85
+ # +other+ using the alternate, balanced algorithm. See
86
+ # Diff::LCS#traverse_balanced.
87
+ def traverse_balanced(other, callbacks = nil, &block)
88
+ traverse_balanced(self, other, callbacks || Diff::LCS::BalancedCallbacks, &block)
89
+ end
90
+
91
+ # Attempts to patch +self+ with the provided +patchset+. A new sequence based
92
+ # on +self+ and the +patchset+ will be created. See Diff::LCS#patch. Attempts
93
+ # to autodiscover the direction of the patch.
94
+ def patch(patchset)
95
+ Diff::LCS.patch(self, patchset)
96
+ end
97
+ alias unpatch patch
98
+
99
+ # Attempts to patch +self+ with the provided +patchset+. A new sequence based
100
+ # on +self+ and the +patchset+ will be created. See Diff::LCS#patch. Does no
101
+ # patch direction autodiscovery.
102
+ def patch!(patchset)
103
+ Diff::LCS.patch!(self, patchset)
104
+ end
105
+
106
+ # Attempts to unpatch +self+ with the provided +patchset+. A new sequence
107
+ # based on +self+ and the +patchset+ will be created. See Diff::LCS#unpatch.
108
+ # Does no patch direction autodiscovery.
109
+ def unpatch!(patchset)
110
+ Diff::LCS.unpatch!(self, patchset)
111
+ end
112
+
113
+ # Attempts to patch +self+ with the provided +patchset+, using #patch!. If
114
+ # the sequence this is used on supports #replace, the value of +self+ will be
115
+ # replaced. See Diff::LCS#patch. Does no patch direction autodiscovery.
116
+ def patch_me(patchset)
117
+ if respond_to? :replace
118
+ replace(patch!(patchset))
119
+ else
120
+ patch!(patchset)
121
+ end
122
+ end
123
+
124
+ # Attempts to unpatch +self+ with the provided +patchset+, using #unpatch!.
125
+ # If the sequence this is used on supports #replace, the value of +self+ will
126
+ # be replaced. See Diff::LCS#unpatch. Does no patch direction autodiscovery.
127
+ def unpatch_me(patchset)
128
+ if respond_to? :replace
129
+ replace(unpatch!(patchset))
130
+ else
131
+ unpatch!(patchset)
132
+ end
133
+ end
134
+ end
135
+
136
+ class << Diff::LCS
137
+ def lcs(seq1, seq2, &block) #:yields seq1[i] for each matched:
138
+ matches = Diff::LCS::Internals.lcs(seq1, seq2)
139
+ ret = []
140
+ string = seq1.kind_of? String
141
+ matches.each_with_index do |_e, i|
142
+ next if matches[i].nil?
143
+
144
+ v = string ? seq1[i, 1] : seq1[i]
145
+ v = block[v] if block
146
+ ret << v
147
+ end
148
+ ret
149
+ end
150
+ alias LCS lcs
151
+
152
+ # #diff computes the smallest set of additions and deletions necessary to
153
+ # turn the first sequence into the second, and returns a description of these
154
+ # changes.
155
+ #
156
+ # See Diff::LCS::DiffCallbacks for the default behaviour. An alternate
157
+ # behaviour may be implemented with Diff::LCS::ContextDiffCallbacks. If a
158
+ # Class argument is provided for +callbacks+, #diff will attempt to
159
+ # initialise it. If the +callbacks+ object (possibly initialised) responds to
160
+ # #finish, it will be called.
161
+ def diff(seq1, seq2, callbacks = nil, &block) # :yields diff changes:
162
+ diff_traversal(:diff, seq1, seq2, callbacks || Diff::LCS::DiffCallbacks, &block)
163
+ end
164
+
165
+ # #sdiff computes all necessary components to show two sequences and their
166
+ # minimized differences side by side, just like the Unix utility
167
+ # <em>sdiff</em> does:
168
+ #
169
+ # old < -
170
+ # same same
171
+ # before | after
172
+ # - > new
173
+ #
174
+ # See Diff::LCS::SDiffCallbacks for the default behaviour. An alternate
175
+ # behaviour may be implemented with Diff::LCS::ContextDiffCallbacks. If a
176
+ # Class argument is provided for +callbacks+, #diff will attempt to
177
+ # initialise it. If the +callbacks+ object (possibly initialised) responds to
178
+ # #finish, it will be called.
179
+ #
180
+ # Each element of a returned array is a Diff::LCS::ContextChange object,
181
+ # which can be implicitly converted to an array.
182
+ #
183
+ # Diff::LCS.sdiff(a, b).each do |action, (old_pos, old_element), (new_pos, new_element)|
184
+ # case action
185
+ # when '!'
186
+ # # replace
187
+ # when '-'
188
+ # # delete
189
+ # when '+'
190
+ # # insert
191
+ # end
192
+ # end
193
+ def sdiff(seq1, seq2, callbacks = nil, &block) #:yields diff changes:
194
+ diff_traversal(:sdiff, seq1, seq2, callbacks || Diff::LCS::SDiffCallbacks, &block)
195
+ end
196
+
197
+ # #traverse_sequences is the most general facility provided by this module;
198
+ # #diff and #lcs are implemented as calls to it.
199
+ #
200
+ # The arguments to #traverse_sequences are the two sequences to traverse, and
201
+ # a callback object, like this:
202
+ #
203
+ # traverse_sequences(seq1, seq2, Diff::LCS::ContextDiffCallbacks.new)
204
+ #
205
+ # == Callback Methods
206
+ #
207
+ # Optional callback methods are <em>emphasized</em>.
208
+ #
209
+ # callbacks#match:: Called when +a+ and +b+ are pointing to
210
+ # common elements in +A+ and +B+.
211
+ # callbacks#discard_a:: Called when +a+ is pointing to an
212
+ # element not in +B+.
213
+ # callbacks#discard_b:: Called when +b+ is pointing to an
214
+ # element not in +A+.
215
+ # <em>callbacks#finished_a</em>:: Called when +a+ has reached the end of
216
+ # sequence +A+.
217
+ # <em>callbacks#finished_b</em>:: Called when +b+ has reached the end of
218
+ # sequence +B+.
219
+ #
220
+ # == Algorithm
221
+ #
222
+ # a---+
223
+ # v
224
+ # A = a b c e h j l m n p
225
+ # B = b c d e f j k l m r s t
226
+ # ^
227
+ # b---+
228
+ #
229
+ # If there are two arrows (+a+ and +b+) pointing to elements of sequences +A+
230
+ # and +B+, the arrows will initially point to the first elements of their
231
+ # respective sequences. #traverse_sequences will advance the arrows through
232
+ # the sequences one element at a time, calling a method on the user-specified
233
+ # callback object before each advance. It will advance the arrows in such a
234
+ # way that if there are elements <tt>A[i]</tt> and <tt>B[j]</tt> which are
235
+ # both equal and part of the longest common subsequence, there will be some
236
+ # moment during the execution of #traverse_sequences when arrow +a+ is
237
+ # pointing to <tt>A[i]</tt> and arrow +b+ is pointing to <tt>B[j]</tt>. When
238
+ # this happens, #traverse_sequences will call <tt>callbacks#match</tt> and
239
+ # then it will advance both arrows.
240
+ #
241
+ # Otherwise, one of the arrows is pointing to an element of its sequence that
242
+ # is not part of the longest common subsequence. #traverse_sequences will
243
+ # advance that arrow and will call <tt>callbacks#discard_a</tt> or
244
+ # <tt>callbacks#discard_b</tt>, depending on which arrow it advanced. If both
245
+ # arrows point to elements that are not part of the longest common
246
+ # subsequence, then #traverse_sequences will advance one of them and call the
247
+ # appropriate callback, but it is not specified which it will call.
248
+ #
249
+ # The methods for <tt>callbacks#match</tt>, <tt>callbacks#discard_a</tt>, and
250
+ # <tt>callbacks#discard_b</tt> are invoked with an event comprising the
251
+ # action ("=", "+", or "-", respectively), the indicies +i+ and +j+, and the
252
+ # elements <tt>A[i]</tt> and <tt>B[j]</tt>. Return values are discarded by
253
+ # #traverse_sequences.
254
+ #
255
+ # === End of Sequences
256
+ #
257
+ # If arrow +a+ reaches the end of its sequence before arrow +b+ does,
258
+ # #traverse_sequence will try to call <tt>callbacks#finished_a</tt> with the
259
+ # last index and element of +A+ (<tt>A[-1]</tt>) and the current index and
260
+ # element of +B+ (<tt>B[j]</tt>). If <tt>callbacks#finished_a</tt> does not
261
+ # exist, then <tt>callbacks#discard_b</tt> will be called on each element of
262
+ # +B+ until the end of the sequence is reached (the call will be done with
263
+ # <tt>A[-1]</tt> and <tt>B[j]</tt> for each element).
264
+ #
265
+ # If +b+ reaches the end of +B+ before +a+ reaches the end of +A+,
266
+ # <tt>callbacks#finished_b</tt> will be called with the current index and
267
+ # element of +A+ (<tt>A[i]</tt>) and the last index and element of +B+
268
+ # (<tt>A[-1]</tt>). Again, if <tt>callbacks#finished_b</tt> does not exist on
269
+ # the callback object, then <tt>callbacks#discard_a</tt> will be called on
270
+ # each element of +A+ until the end of the sequence is reached (<tt>A[i]</tt>
271
+ # and <tt>B[-1]</tt>).
272
+ #
273
+ # There is a chance that one additional <tt>callbacks#discard_a</tt> or
274
+ # <tt>callbacks#discard_b</tt> will be called after the end of the sequence
275
+ # is reached, if +a+ has not yet reached the end of +A+ or +b+ has not yet
276
+ # reached the end of +B+.
277
+ def traverse_sequences(seq1, seq2, callbacks = Diff::LCS::SequenceCallbacks) #:yields change events:
278
+ callbacks ||= Diff::LCS::SequenceCallbacks
279
+ matches = Diff::LCS::Internals.lcs(seq1, seq2)
280
+
281
+ run_finished_a = run_finished_b = false
282
+ string = seq1.kind_of?(String)
283
+
284
+ a_size = seq1.size
285
+ b_size = seq2.size
286
+ ai = bj = 0
287
+
288
+ (0..matches.size).each do |i|
289
+ b_line = matches[i]
290
+
291
+ ax = string ? seq1[i, 1] : seq1[i]
292
+ bx = string ? seq2[bj, 1] : seq2[bj]
293
+
294
+ if b_line.nil?
295
+ unless ax.nil? or (string and ax.empty?)
296
+ event = Diff::LCS::ContextChange.new('-', i, ax, bj, bx)
297
+ event = yield event if block_given?
298
+ callbacks.discard_a(event)
299
+ end
300
+ else
301
+ loop do
302
+ break unless bj < b_line
303
+
304
+ bx = string ? seq2[bj, 1] : seq2[bj]
305
+ event = Diff::LCS::ContextChange.new('+', i, ax, bj, bx)
306
+ event = yield event if block_given?
307
+ callbacks.discard_b(event)
308
+ bj += 1
309
+ end
310
+ bx = string ? seq2[bj, 1] : seq2[bj]
311
+ event = Diff::LCS::ContextChange.new('=', i, ax, bj, bx)
312
+ event = yield event if block_given?
313
+ callbacks.match(event)
314
+ bj += 1
315
+ end
316
+ ai = i
317
+ end
318
+ ai += 1
319
+
320
+ # The last entry (if any) processed was a match. +ai+ and +bj+ point just
321
+ # past the last matching lines in their sequences.
322
+ while (ai < a_size) or (bj < b_size)
323
+ # last A?
324
+ if ai == a_size and bj < b_size
325
+ if callbacks.respond_to?(:finished_a) and !run_finished_a
326
+ ax = string ? seq1[-1, 1] : seq1[-1]
327
+ bx = string ? seq2[bj, 1] : seq2[bj]
328
+ event = Diff::LCS::ContextChange.new('>', (a_size - 1), ax, bj, bx)
329
+ event = yield event if block_given?
330
+ callbacks.finished_a(event)
331
+ run_finished_a = true
332
+ else
333
+ ax = string ? seq1[ai, 1] : seq1[ai]
334
+ loop do
335
+ bx = string ? seq2[bj, 1] : seq2[bj]
336
+ event = Diff::LCS::ContextChange.new('+', ai, ax, bj, bx)
337
+ event = yield event if block_given?
338
+ callbacks.discard_b(event)
339
+ bj += 1
340
+ break unless bj < b_size
341
+ end
342
+ end
343
+ end
344
+
345
+ # last B?
346
+ if bj == b_size and ai < a_size
347
+ if callbacks.respond_to?(:finished_b) and !run_finished_b
348
+ ax = string ? seq1[ai, 1] : seq1[ai]
349
+ bx = string ? seq2[-1, 1] : seq2[-1]
350
+ event = Diff::LCS::ContextChange.new('<', ai, ax, (b_size - 1), bx)
351
+ event = yield event if block_given?
352
+ callbacks.finished_b(event)
353
+ run_finished_b = true
354
+ else
355
+ bx = string ? seq2[bj, 1] : seq2[bj]
356
+ loop do
357
+ ax = string ? seq1[ai, 1] : seq1[ai]
358
+ event = Diff::LCS::ContextChange.new('-', ai, ax, bj, bx)
359
+ event = yield event if block_given?
360
+ callbacks.discard_a(event)
361
+ ai += 1
362
+ break unless bj < b_size
363
+ end
364
+ end
365
+ end
366
+
367
+ if ai < a_size
368
+ ax = string ? seq1[ai, 1] : seq1[ai]
369
+ bx = string ? seq2[bj, 1] : seq2[bj]
370
+ event = Diff::LCS::ContextChange.new('-', ai, ax, bj, bx)
371
+ event = yield event if block_given?
372
+ callbacks.discard_a(event)
373
+ ai += 1
374
+ end
375
+
376
+ next unless bj < b_size
377
+
378
+ ax = string ? seq1[ai, 1] : seq1[ai]
379
+ bx = string ? seq2[bj, 1] : seq2[bj]
380
+ event = Diff::LCS::ContextChange.new('+', ai, ax, bj, bx)
381
+ event = yield event if block_given?
382
+ callbacks.discard_b(event)
383
+ bj += 1
384
+ end
385
+ end
386
+
387
+ # #traverse_balanced is an alternative to #traverse_sequences. It uses a
388
+ # different algorithm to iterate through the entries in the computed longest
389
+ # common subsequence. Instead of viewing the changes as insertions or
390
+ # deletions from one of the sequences, #traverse_balanced will report
391
+ # <em>changes</em> between the sequences.
392
+ #
393
+ # The arguments to #traverse_balanced are the two sequences to traverse and a
394
+ # callback object, like this:
395
+ #
396
+ # traverse_balanced(seq1, seq2, Diff::LCS::ContextDiffCallbacks.new)
397
+ #
398
+ # #sdiff is implemented with #traverse_balanced.
399
+ #
400
+ # == Callback Methods
401
+ #
402
+ # Optional callback methods are <em>emphasized</em>.
403
+ #
404
+ # callbacks#match:: Called when +a+ and +b+ are pointing to
405
+ # common elements in +A+ and +B+.
406
+ # callbacks#discard_a:: Called when +a+ is pointing to an
407
+ # element not in +B+.
408
+ # callbacks#discard_b:: Called when +b+ is pointing to an
409
+ # element not in +A+.
410
+ # <em>callbacks#change</em>:: Called when +a+ and +b+ are pointing to
411
+ # the same relative position, but
412
+ # <tt>A[a]</tt> and <tt>B[b]</tt> are not
413
+ # the same; a <em>change</em> has
414
+ # occurred.
415
+ #
416
+ # #traverse_balanced might be a bit slower than #traverse_sequences,
417
+ # noticable only while processing huge amounts of data.
418
+ #
419
+ # == Algorithm
420
+ #
421
+ # a---+
422
+ # v
423
+ # A = a b c e h j l m n p
424
+ # B = b c d e f j k l m r s t
425
+ # ^
426
+ # b---+
427
+ #
428
+ # === Matches
429
+ #
430
+ # If there are two arrows (+a+ and +b+) pointing to elements of sequences +A+
431
+ # and +B+, the arrows will initially point to the first elements of their
432
+ # respective sequences. #traverse_sequences will advance the arrows through
433
+ # the sequences one element at a time, calling a method on the user-specified
434
+ # callback object before each advance. It will advance the arrows in such a
435
+ # way that if there are elements <tt>A[i]</tt> and <tt>B[j]</tt> which are
436
+ # both equal and part of the longest common subsequence, there will be some
437
+ # moment during the execution of #traverse_sequences when arrow +a+ is
438
+ # pointing to <tt>A[i]</tt> and arrow +b+ is pointing to <tt>B[j]</tt>. When
439
+ # this happens, #traverse_sequences will call <tt>callbacks#match</tt> and
440
+ # then it will advance both arrows.
441
+ #
442
+ # === Discards
443
+ #
444
+ # Otherwise, one of the arrows is pointing to an element of its sequence that
445
+ # is not part of the longest common subsequence. #traverse_sequences will
446
+ # advance that arrow and will call <tt>callbacks#discard_a</tt> or
447
+ # <tt>callbacks#discard_b</tt>, depending on which arrow it advanced.
448
+ #
449
+ # === Changes
450
+ #
451
+ # If both +a+ and +b+ point to elements that are not part of the longest
452
+ # common subsequence, then #traverse_sequences will try to call
453
+ # <tt>callbacks#change</tt> and advance both arrows. If
454
+ # <tt>callbacks#change</tt> is not implemented, then
455
+ # <tt>callbacks#discard_a</tt> and <tt>callbacks#discard_b</tt> will be
456
+ # called in turn.
457
+ #
458
+ # The methods for <tt>callbacks#match</tt>, <tt>callbacks#discard_a</tt>,
459
+ # <tt>callbacks#discard_b</tt>, and <tt>callbacks#change</tt> are invoked
460
+ # with an event comprising the action ("=", "+", "-", or "!", respectively),
461
+ # the indicies +i+ and +j+, and the elements <tt>A[i]</tt> and <tt>B[j]</tt>.
462
+ # Return values are discarded by #traverse_balanced.
463
+ #
464
+ # === Context
465
+ #
466
+ # Note that +i+ and +j+ may not be the same index position, even if +a+ and
467
+ # +b+ are considered to be pointing to matching or changed elements.
468
+ def traverse_balanced(seq1, seq2, callbacks = Diff::LCS::BalancedCallbacks)
469
+ matches = Diff::LCS::Internals.lcs(seq1, seq2)
470
+ a_size = seq1.size
471
+ b_size = seq2.size
472
+ ai = bj = mb = 0
473
+ ma = -1
474
+ string = seq1.kind_of?(String)
475
+
476
+ # Process all the lines in the match vector.
477
+ loop do
478
+ # Find next match indices +ma+ and +mb+
479
+ loop do
480
+ ma += 1
481
+ break unless ma < matches.size and matches[ma].nil?
482
+ end
483
+
484
+ break if ma >= matches.size # end of matches?
485
+
486
+ mb = matches[ma]
487
+
488
+ # Change(seq2)
489
+ while (ai < ma) or (bj < mb)
490
+ ax = string ? seq1[ai, 1] : seq1[ai]
491
+ bx = string ? seq2[bj, 1] : seq2[bj]
492
+
493
+ case [(ai < ma), (bj < mb)]
494
+ when [true, true]
495
+ if callbacks.respond_to?(:change)
496
+ event = Diff::LCS::ContextChange.new('!', ai, ax, bj, bx)
497
+ event = yield event if block_given?
498
+ callbacks.change(event)
499
+ ai += 1
500
+ else
501
+ event = Diff::LCS::ContextChange.new('-', ai, ax, bj, bx)
502
+ event = yield event if block_given?
503
+ callbacks.discard_a(event)
504
+ ai += 1
505
+ ax = string ? seq1[ai, 1] : seq1[ai]
506
+ event = Diff::LCS::ContextChange.new('+', ai, ax, bj, bx)
507
+ event = yield event if block_given?
508
+ callbacks.discard_b(event)
509
+ end
510
+
511
+ bj += 1
512
+ when [true, false]
513
+ event = Diff::LCS::ContextChange.new('-', ai, ax, bj, bx)
514
+ event = yield event if block_given?
515
+ callbacks.discard_a(event)
516
+ ai += 1
517
+ when [false, true]
518
+ event = Diff::LCS::ContextChange.new('+', ai, ax, bj, bx)
519
+ event = yield event if block_given?
520
+ callbacks.discard_b(event)
521
+ bj += 1
522
+ end
523
+ end
524
+
525
+ # Match
526
+ ax = string ? seq1[ai, 1] : seq1[ai]
527
+ bx = string ? seq2[bj, 1] : seq2[bj]
528
+ event = Diff::LCS::ContextChange.new('=', ai, ax, bj, bx)
529
+ event = yield event if block_given?
530
+ callbacks.match(event)
531
+ ai += 1
532
+ bj += 1
533
+ end
534
+
535
+ while (ai < a_size) or (bj < b_size)
536
+ ax = string ? seq1[ai, 1] : seq1[ai]
537
+ bx = string ? seq2[bj, 1] : seq2[bj]
538
+
539
+ case [(ai < a_size), (bj < b_size)]
540
+ when [true, true]
541
+ if callbacks.respond_to?(:change)
542
+ event = Diff::LCS::ContextChange.new('!', ai, ax, bj, bx)
543
+ event = yield event if block_given?
544
+ callbacks.change(event)
545
+ ai += 1
546
+ else
547
+ event = Diff::LCS::ContextChange.new('-', ai, ax, bj, bx)
548
+ event = yield event if block_given?
549
+ callbacks.discard_a(event)
550
+ ai += 1
551
+ ax = string ? seq1[ai, 1] : seq1[ai]
552
+ event = Diff::LCS::ContextChange.new('+', ai, ax, bj, bx)
553
+ event = yield event if block_given?
554
+ callbacks.discard_b(event)
555
+ end
556
+
557
+ bj += 1
558
+ when [true, false]
559
+ event = Diff::LCS::ContextChange.new('-', ai, ax, bj, bx)
560
+ event = yield event if block_given?
561
+ callbacks.discard_a(event)
562
+ ai += 1
563
+ when [false, true]
564
+ event = Diff::LCS::ContextChange.new('+', ai, ax, bj, bx)
565
+ event = yield event if block_given?
566
+ callbacks.discard_b(event)
567
+ bj += 1
568
+ end
569
+ end
570
+ end
571
+
572
+ PATCH_MAP = { #:nodoc:
573
+ :patch => { '+' => '+', '-' => '-', '!' => '!', '=' => '=' }.freeze,
574
+ :unpatch => { '+' => '-', '-' => '+', '!' => '!', '=' => '=' }.freeze
575
+ }.freeze
576
+
577
+ # Applies a +patchset+ to the sequence +src+ according to the +direction+
578
+ # (<tt>:patch</tt> or <tt>:unpatch</tt>), producing a new sequence.
579
+ #
580
+ # If the +direction+ is not specified, Diff::LCS::patch will attempt to
581
+ # discover the direction of the +patchset+.
582
+ #
583
+ # A +patchset+ can be considered to apply forward (<tt>:patch</tt>) if the
584
+ # following expression is true:
585
+ #
586
+ # patch(s1, diff(s1, s2)) -> s2
587
+ #
588
+ # A +patchset+ can be considered to apply backward (<tt>:unpatch</tt>) if the
589
+ # following expression is true:
590
+ #
591
+ # patch(s2, diff(s1, s2)) -> s1
592
+ #
593
+ # If the +patchset+ contains no changes, the +src+ value will be returned as
594
+ # either <tt>src.dup</tt> or +src+. A +patchset+ can be deemed as having no
595
+ # changes if the following predicate returns true:
596
+ #
597
+ # patchset.empty? or
598
+ # patchset.flatten(1).all? { |change| change.unchanged? }
599
+ #
600
+ # === Patchsets
601
+ #
602
+ # A +patchset+ is always an enumerable sequence of changes, hunks of changes,
603
+ # or a mix of the two. A hunk of changes is an enumerable sequence of
604
+ # changes:
605
+ #
606
+ # [ # patchset
607
+ # # change
608
+ # [ # hunk
609
+ # # change
610
+ # ]
611
+ # ]
612
+ #
613
+ # The +patch+ method accepts <tt>patchset</tt>s that are enumerable sequences
614
+ # containing either Diff::LCS::Change objects (or a subclass) or the array
615
+ # representations of those objects. Prior to application, array
616
+ # representations of Diff::LCS::Change objects will be reified.
617
+ def patch(src, patchset, direction = nil)
618
+ # Normalize the patchset.
619
+ has_changes, patchset = Diff::LCS::Internals.analyze_patchset(patchset)
620
+
621
+ return src.respond_to?(:dup) ? src.dup : src unless has_changes
622
+
623
+ string = src.kind_of?(String)
624
+ # Start with a new empty type of the source's class
625
+ res = src.class.new
626
+
627
+ direction ||= Diff::LCS::Internals.intuit_diff_direction(src, patchset)
628
+
629
+ ai = bj = 0
630
+
631
+ patch_map = PATCH_MAP[direction]
632
+
633
+ patchset.each do |change|
634
+ # Both Change and ContextChange support #action
635
+ action = patch_map[change.action]
636
+
637
+ case change
638
+ when Diff::LCS::ContextChange
639
+ case direction
640
+ when :patch
641
+ el = change.new_element
642
+ op = change.old_position
643
+ np = change.new_position
644
+ when :unpatch
645
+ el = change.old_element
646
+ op = change.new_position
647
+ np = change.old_position
648
+ end
649
+
650
+ case action
651
+ when '-' # Remove details from the old string
652
+ while ai < op
653
+ res << (string ? src[ai, 1] : src[ai])
654
+ ai += 1
655
+ bj += 1
656
+ end
657
+ ai += 1
658
+ when '+'
659
+ while bj < np
660
+ res << (string ? src[ai, 1] : src[ai])
661
+ ai += 1
662
+ bj += 1
663
+ end
664
+
665
+ res << el
666
+ bj += 1
667
+ when '='
668
+ # This only appears in sdiff output with the SDiff callback.
669
+ # Therefore, we only need to worry about dealing with a single
670
+ # element.
671
+ res << el
672
+
673
+ ai += 1
674
+ bj += 1
675
+ when '!'
676
+ while ai < op
677
+ res << (string ? src[ai, 1] : src[ai])
678
+ ai += 1
679
+ bj += 1
680
+ end
681
+
682
+ bj += 1
683
+ ai += 1
684
+
685
+ res << el
686
+ end
687
+ when Diff::LCS::Change
688
+ case action
689
+ when '-'
690
+ while ai < change.position
691
+ res << (string ? src[ai, 1] : src[ai])
692
+ ai += 1
693
+ bj += 1
694
+ end
695
+ ai += 1
696
+ when '+'
697
+ while bj < change.position
698
+ res << (string ? src[ai, 1] : src[ai])
699
+ ai += 1
700
+ bj += 1
701
+ end
702
+
703
+ bj += 1
704
+
705
+ res << change.element
706
+ end
707
+ end
708
+ end
709
+
710
+ while ai < src.size
711
+ res << (string ? src[ai, 1] : src[ai])
712
+ ai += 1
713
+ bj += 1
714
+ end
715
+
716
+ res
717
+ end
718
+
719
+ # Given a set of patchset, convert the current version to the prior version.
720
+ # Does no auto-discovery.
721
+ def unpatch!(src, patchset)
722
+ patch(src, patchset, :unpatch)
723
+ end
724
+
725
+ # Given a set of patchset, convert the current version to the next version.
726
+ # Does no auto-discovery.
727
+ def patch!(src, patchset)
728
+ patch(src, patchset, :patch)
729
+ end
730
+ end
731
+
732
+ require 'diff/lcs/backports'