bibtex_to_scrapbox 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 (627) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +19 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +5 -0
  5. data/CODE_OF_CONDUCT.md +74 -0
  6. data/Gemfile +6 -0
  7. data/LICENSE +22 -0
  8. data/README.md +43 -0
  9. data/Rakefile +6 -0
  10. data/bibtex_to_scrapbox.gemspec +29 -0
  11. data/bin/console +14 -0
  12. data/bin/setup +8 -0
  13. data/exe/bibtex_to_scrapbox +7 -0
  14. data/gems/bin/htmldiff +29 -0
  15. data/gems/bin/ldiff +29 -0
  16. data/gems/bin/rake +27 -0
  17. data/gems/bin/rspec +27 -0
  18. data/gems/bin/thor +27 -0
  19. data/gems/extensions/x86_64-darwin-16/2.4.0-static/unicode-0.4.4.4/gem.build_complete +0 -0
  20. data/gems/extensions/x86_64-darwin-16/2.4.0-static/unicode-0.4.4.4/gem_make.out +288 -0
  21. data/gems/extensions/x86_64-darwin-16/2.4.0-static/unicode-0.4.4.4/unicode/unicode_native.bundle +0 -0
  22. data/gems/gems/bibtex-ruby-4.4.4/Gemfile +66 -0
  23. data/gems/gems/bibtex-ruby-4.4.4/Guardfile +22 -0
  24. data/gems/gems/bibtex-ruby-4.4.4/History.txt +306 -0
  25. data/gems/gems/bibtex-ruby-4.4.4/LICENSE +621 -0
  26. data/gems/gems/bibtex-ruby-4.4.4/Manifest +100 -0
  27. data/gems/gems/bibtex-ruby-4.4.4/README.md +615 -0
  28. data/gems/gems/bibtex-ruby-4.4.4/Rakefile +123 -0
  29. data/gems/gems/bibtex-ruby-4.4.4/bibtex-ruby.gemspec +38 -0
  30. data/gems/gems/bibtex-ruby-4.4.4/examples/bib2html.rb +42 -0
  31. data/gems/gems/bibtex-ruby-4.4.4/examples/bib2yaml.rb +12 -0
  32. data/gems/gems/bibtex-ruby-4.4.4/examples/markdown.bib +39 -0
  33. data/gems/gems/bibtex-ruby-4.4.4/features/bibtex.feature +96 -0
  34. data/gems/gems/bibtex-ruby-4.4.4/features/entries.feature +67 -0
  35. data/gems/gems/bibtex-ruby-4.4.4/features/issues/braced_strings.feature +48 -0
  36. data/gems/gems/bibtex-ruby-4.4.4/features/issues/crossref.feature +62 -0
  37. data/gems/gems/bibtex-ruby-4.4.4/features/issues/latex_filter.feature +171 -0
  38. data/gems/gems/bibtex-ruby-4.4.4/features/issues/multiline_strings.feature +14 -0
  39. data/gems/gems/bibtex-ruby-4.4.4/features/issues/name_parsing.feature +19 -0
  40. data/gems/gems/bibtex-ruby-4.4.4/features/issues/non_ascii_default_keys.feature +20 -0
  41. data/gems/gems/bibtex-ruby-4.4.4/features/issues/non_ascii_keys.feature +17 -0
  42. data/gems/gems/bibtex-ruby-4.4.4/features/issues/number_keys.feature +45 -0
  43. data/gems/gems/bibtex-ruby-4.4.4/features/issues/parse_months.feature +43 -0
  44. data/gems/gems/bibtex-ruby-4.4.4/features/issues/slash_keys.feature +21 -0
  45. data/gems/gems/bibtex-ruby-4.4.4/features/issues/trailing_comma.feature +21 -0
  46. data/gems/gems/bibtex-ruby-4.4.4/features/issues/whitespace_keys.feature +23 -0
  47. data/gems/gems/bibtex-ruby-4.4.4/features/names.feature +86 -0
  48. data/gems/gems/bibtex-ruby-4.4.4/features/preambles.feature +27 -0
  49. data/gems/gems/bibtex-ruby-4.4.4/features/query.feature +102 -0
  50. data/gems/gems/bibtex-ruby-4.4.4/features/replacement.feature +68 -0
  51. data/gems/gems/bibtex-ruby-4.4.4/features/step_definitions/bibtex_steps.rb +119 -0
  52. data/gems/gems/bibtex-ruby-4.4.4/features/step_definitions/name_steps.rb +18 -0
  53. data/gems/gems/bibtex-ruby-4.4.4/features/strings.feature +53 -0
  54. data/gems/gems/bibtex-ruby-4.4.4/features/support/env.rb +21 -0
  55. data/gems/gems/bibtex-ruby-4.4.4/lib/bibtex.rb +83 -0
  56. data/gems/gems/bibtex-ruby-4.4.4/lib/bibtex/bibliography.rb +594 -0
  57. data/gems/gems/bibtex-ruby-4.4.4/lib/bibtex/bibliography/rdf_converter.rb +27 -0
  58. data/gems/gems/bibtex-ruby-4.4.4/lib/bibtex/bibtex.y +141 -0
  59. data/gems/gems/bibtex-ruby-4.4.4/lib/bibtex/compatibility.rb +25 -0
  60. data/gems/gems/bibtex-ruby-4.4.4/lib/bibtex/elements.rb +376 -0
  61. data/gems/gems/bibtex-ruby-4.4.4/lib/bibtex/entry.rb +690 -0
  62. data/gems/gems/bibtex-ruby-4.4.4/lib/bibtex/entry/bibtexml_converter.rb +44 -0
  63. data/gems/gems/bibtex-ruby-4.4.4/lib/bibtex/entry/citeproc_converter.rb +164 -0
  64. data/gems/gems/bibtex-ruby-4.4.4/lib/bibtex/entry/rdf_converter.rb +588 -0
  65. data/gems/gems/bibtex-ruby-4.4.4/lib/bibtex/error.rb +49 -0
  66. data/gems/gems/bibtex-ruby-4.4.4/lib/bibtex/extensions.rb +25 -0
  67. data/gems/gems/bibtex-ruby-4.4.4/lib/bibtex/filters.rb +55 -0
  68. data/gems/gems/bibtex-ruby-4.4.4/lib/bibtex/filters/latex.rb +13 -0
  69. data/gems/gems/bibtex-ruby-4.4.4/lib/bibtex/filters/linebreaks.rb +11 -0
  70. data/gems/gems/bibtex-ruby-4.4.4/lib/bibtex/lexer.rb +358 -0
  71. data/gems/gems/bibtex-ruby-4.4.4/lib/bibtex/name_parser.rb +563 -0
  72. data/gems/gems/bibtex-ruby-4.4.4/lib/bibtex/names.rb +315 -0
  73. data/gems/gems/bibtex-ruby-4.4.4/lib/bibtex/names.y +267 -0
  74. data/gems/gems/bibtex-ruby-4.4.4/lib/bibtex/parser.rb +474 -0
  75. data/gems/gems/bibtex-ruby-4.4.4/lib/bibtex/replaceable.rb +52 -0
  76. data/gems/gems/bibtex-ruby-4.4.4/lib/bibtex/ruby.rb +1 -0
  77. data/gems/gems/bibtex-ruby-4.4.4/lib/bibtex/utilities.rb +59 -0
  78. data/gems/gems/bibtex-ruby-4.4.4/lib/bibtex/value.rb +305 -0
  79. data/gems/gems/bibtex-ruby-4.4.4/lib/bibtex/version.rb +28 -0
  80. data/gems/gems/bibtex-ruby-4.4.4/test/benchmark.rb +84 -0
  81. data/gems/gems/bibtex-ruby-4.4.4/test/bibtex/entry/test_rdf_converter.rb +341 -0
  82. data/gems/gems/bibtex-ruby-4.4.4/test/bibtex/test_bibliography.rb +446 -0
  83. data/gems/gems/bibtex-ruby-4.4.4/test/bibtex/test_elements.rb +64 -0
  84. data/gems/gems/bibtex-ruby-4.4.4/test/bibtex/test_entry.rb +698 -0
  85. data/gems/gems/bibtex-ruby-4.4.4/test/bibtex/test_filters.rb +36 -0
  86. data/gems/gems/bibtex-ruby-4.4.4/test/bibtex/test_lexer.rb +42 -0
  87. data/gems/gems/bibtex-ruby-4.4.4/test/bibtex/test_name_parser.rb +29 -0
  88. data/gems/gems/bibtex-ruby-4.4.4/test/bibtex/test_names.rb +168 -0
  89. data/gems/gems/bibtex-ruby-4.4.4/test/bibtex/test_parser.rb +210 -0
  90. data/gems/gems/bibtex-ruby-4.4.4/test/bibtex/test_string.rb +83 -0
  91. data/gems/gems/bibtex-ruby-4.4.4/test/bibtex/test_utilities.rb +34 -0
  92. data/gems/gems/bibtex-ruby-4.4.4/test/bibtex/test_value.rb +189 -0
  93. data/gems/gems/bibtex-ruby-4.4.4/test/fixtures/bibdesk.bib +50 -0
  94. data/gems/gems/bibtex-ruby-4.4.4/test/fixtures/comment.bib +15 -0
  95. data/gems/gems/bibtex-ruby-4.4.4/test/fixtures/decoret.bib +83 -0
  96. data/gems/gems/bibtex-ruby-4.4.4/test/fixtures/empty.bib +0 -0
  97. data/gems/gems/bibtex-ruby-4.4.4/test/fixtures/entry.bib +24 -0
  98. data/gems/gems/bibtex-ruby-4.4.4/test/fixtures/errors.bib +67 -0
  99. data/gems/gems/bibtex-ruby-4.4.4/test/fixtures/no_bibtex.bib +9 -0
  100. data/gems/gems/bibtex-ruby-4.4.4/test/fixtures/preamble.bib +12 -0
  101. data/gems/gems/bibtex-ruby-4.4.4/test/fixtures/roundtrip.bib +11 -0
  102. data/gems/gems/bibtex-ruby-4.4.4/test/helper.rb +43 -0
  103. data/gems/gems/bibtex-ruby-4.4.4/test/macruby.d +21 -0
  104. data/gems/gems/bibtex-ruby-4.4.4/test/macruby.rb +22 -0
  105. data/gems/gems/bibtex-ruby-4.4.4/test/profile.rb +28 -0
  106. data/gems/gems/bibtex-ruby-4.4.4/test/test_bibtex.rb +127 -0
  107. data/gems/gems/bibtex-ruby-4.4.4/test/test_export.rb +33 -0
  108. data/gems/gems/diff-lcs-1.3/.rspec +1 -0
  109. data/gems/gems/diff-lcs-1.3/Code-of-Conduct.md +74 -0
  110. data/gems/gems/diff-lcs-1.3/Contributing.md +83 -0
  111. data/gems/gems/diff-lcs-1.3/History.md +220 -0
  112. data/gems/gems/diff-lcs-1.3/License.md +39 -0
  113. data/gems/gems/diff-lcs-1.3/Manifest.txt +37 -0
  114. data/gems/gems/diff-lcs-1.3/README.rdoc +84 -0
  115. data/gems/gems/diff-lcs-1.3/Rakefile +57 -0
  116. data/gems/gems/diff-lcs-1.3/autotest/discover.rb +1 -0
  117. data/gems/gems/diff-lcs-1.3/bin/htmldiff +32 -0
  118. data/gems/gems/diff-lcs-1.3/bin/ldiff +6 -0
  119. data/gems/gems/diff-lcs-1.3/docs/COPYING.txt +339 -0
  120. data/gems/gems/diff-lcs-1.3/docs/artistic.txt +127 -0
  121. data/gems/gems/diff-lcs-1.3/lib/diff-lcs.rb +3 -0
  122. data/gems/gems/diff-lcs-1.3/lib/diff/lcs.rb +725 -0
  123. data/gems/gems/diff-lcs-1.3/lib/diff/lcs/array.rb +7 -0
  124. data/gems/gems/diff-lcs-1.3/lib/diff/lcs/block.rb +37 -0
  125. data/gems/gems/diff-lcs-1.3/lib/diff/lcs/callbacks.rb +322 -0
  126. data/gems/gems/diff-lcs-1.3/lib/diff/lcs/change.rb +181 -0
  127. data/gems/gems/diff-lcs-1.3/lib/diff/lcs/htmldiff.rb +149 -0
  128. data/gems/gems/diff-lcs-1.3/lib/diff/lcs/hunk.rb +276 -0
  129. data/gems/gems/diff-lcs-1.3/lib/diff/lcs/internals.rb +307 -0
  130. data/gems/gems/diff-lcs-1.3/lib/diff/lcs/ldiff.rb +167 -0
  131. data/gems/gems/diff-lcs-1.3/lib/diff/lcs/string.rb +5 -0
  132. data/gems/gems/diff-lcs-1.3/spec/change_spec.rb +65 -0
  133. data/gems/gems/diff-lcs-1.3/spec/diff_spec.rb +47 -0
  134. data/gems/gems/diff-lcs-1.3/spec/fixtures/ds1.csv +50 -0
  135. data/gems/gems/diff-lcs-1.3/spec/fixtures/ds2.csv +51 -0
  136. data/gems/gems/diff-lcs-1.3/spec/hunk_spec.rb +72 -0
  137. data/gems/gems/diff-lcs-1.3/spec/issues_spec.rb +49 -0
  138. data/gems/gems/diff-lcs-1.3/spec/lcs_spec.rb +56 -0
  139. data/gems/gems/diff-lcs-1.3/spec/ldiff_spec.rb +47 -0
  140. data/gems/gems/diff-lcs-1.3/spec/patch_spec.rb +422 -0
  141. data/gems/gems/diff-lcs-1.3/spec/sdiff_spec.rb +214 -0
  142. data/gems/gems/diff-lcs-1.3/spec/spec_helper.rb +321 -0
  143. data/gems/gems/diff-lcs-1.3/spec/traverse_balanced_spec.rb +310 -0
  144. data/gems/gems/diff-lcs-1.3/spec/traverse_sequences_spec.rb +139 -0
  145. data/gems/gems/latex-decode-0.2.2/.gitignore +6 -0
  146. data/gems/gems/latex-decode-0.2.2/.travis.yml +18 -0
  147. data/gems/gems/latex-decode-0.2.2/Gemfile +21 -0
  148. data/gems/gems/latex-decode-0.2.2/LICENSE +621 -0
  149. data/gems/gems/latex-decode-0.2.2/README.md +65 -0
  150. data/gems/gems/latex-decode-0.2.2/Rakefile +41 -0
  151. data/gems/gems/latex-decode-0.2.2/cucumber.yml +1 -0
  152. data/gems/gems/latex-decode-0.2.2/features/brackets.feature +11 -0
  153. data/gems/gems/latex-decode-0.2.2/features/diacritics.feature +40 -0
  154. data/gems/gems/latex-decode-0.2.2/features/greek.feature +13 -0
  155. data/gems/gems/latex-decode-0.2.2/features/maths.feature +9 -0
  156. data/gems/gems/latex-decode-0.2.2/features/non-latex.feature +15 -0
  157. data/gems/gems/latex-decode-0.2.2/features/punctuation.feature +50 -0
  158. data/gems/gems/latex-decode-0.2.2/features/special_characters.feature +21 -0
  159. data/gems/gems/latex-decode-0.2.2/features/step_definitions/latex.rb +7 -0
  160. data/gems/gems/latex-decode-0.2.2/features/support/env.rb +14 -0
  161. data/gems/gems/latex-decode-0.2.2/features/symbols.feature +21 -0
  162. data/gems/gems/latex-decode-0.2.2/features/umlauts.feature +11 -0
  163. data/gems/gems/latex-decode-0.2.2/latex-decode.gemspec +33 -0
  164. data/gems/gems/latex-decode-0.2.2/lib/latex/decode.rb +54 -0
  165. data/gems/gems/latex-decode-0.2.2/lib/latex/decode/accents.rb +36 -0
  166. data/gems/gems/latex-decode-0.2.2/lib/latex/decode/base.rb +62 -0
  167. data/gems/gems/latex-decode-0.2.2/lib/latex/decode/compatibility.rb +89 -0
  168. data/gems/gems/latex-decode-0.2.2/lib/latex/decode/diacritics.rb +46 -0
  169. data/gems/gems/latex-decode-0.2.2/lib/latex/decode/greek.rb +61 -0
  170. data/gems/gems/latex-decode-0.2.2/lib/latex/decode/maths.rb +21 -0
  171. data/gems/gems/latex-decode-0.2.2/lib/latex/decode/punctuation.rb +59 -0
  172. data/gems/gems/latex-decode-0.2.2/lib/latex/decode/symbols.rb +225 -0
  173. data/gems/gems/latex-decode-0.2.2/lib/latex/decode/version.rb +5 -0
  174. data/gems/gems/rake-10.5.0/.autotest +7 -0
  175. data/gems/gems/rake-10.5.0/.rubocop.yml +27 -0
  176. data/gems/gems/rake-10.5.0/.togglerc +7 -0
  177. data/gems/gems/rake-10.5.0/CONTRIBUTING.rdoc +38 -0
  178. data/gems/gems/rake-10.5.0/History.rdoc +659 -0
  179. data/gems/gems/rake-10.5.0/MIT-LICENSE +21 -0
  180. data/gems/gems/rake-10.5.0/Manifest.txt +166 -0
  181. data/gems/gems/rake-10.5.0/README.rdoc +139 -0
  182. data/gems/gems/rake-10.5.0/Rakefile +81 -0
  183. data/gems/gems/rake-10.5.0/bin/rake +33 -0
  184. data/gems/gems/rake-10.5.0/doc/command_line_usage.rdoc +158 -0
  185. data/gems/gems/rake-10.5.0/doc/example/Rakefile1 +38 -0
  186. data/gems/gems/rake-10.5.0/doc/example/Rakefile2 +35 -0
  187. data/gems/gems/rake-10.5.0/doc/example/a.c +6 -0
  188. data/gems/gems/rake-10.5.0/doc/example/b.c +6 -0
  189. data/gems/gems/rake-10.5.0/doc/example/main.c +11 -0
  190. data/gems/gems/rake-10.5.0/doc/glossary.rdoc +42 -0
  191. data/gems/gems/rake-10.5.0/doc/jamis.rb +591 -0
  192. data/gems/gems/rake-10.5.0/doc/proto_rake.rdoc +127 -0
  193. data/gems/gems/rake-10.5.0/doc/rake.1 +141 -0
  194. data/gems/gems/rake-10.5.0/doc/rakefile.rdoc +624 -0
  195. data/gems/gems/rake-10.5.0/doc/rational.rdoc +151 -0
  196. data/gems/gems/rake-10.5.0/doc/release_notes/rake-0.4.14.rdoc +23 -0
  197. data/gems/gems/rake-10.5.0/doc/release_notes/rake-0.4.15.rdoc +35 -0
  198. data/gems/gems/rake-10.5.0/doc/release_notes/rake-0.5.0.rdoc +53 -0
  199. data/gems/gems/rake-10.5.0/doc/release_notes/rake-0.5.3.rdoc +78 -0
  200. data/gems/gems/rake-10.5.0/doc/release_notes/rake-0.5.4.rdoc +46 -0
  201. data/gems/gems/rake-10.5.0/doc/release_notes/rake-0.6.0.rdoc +141 -0
  202. data/gems/gems/rake-10.5.0/doc/release_notes/rake-0.7.0.rdoc +119 -0
  203. data/gems/gems/rake-10.5.0/doc/release_notes/rake-0.7.1.rdoc +59 -0
  204. data/gems/gems/rake-10.5.0/doc/release_notes/rake-0.7.2.rdoc +121 -0
  205. data/gems/gems/rake-10.5.0/doc/release_notes/rake-0.7.3.rdoc +47 -0
  206. data/gems/gems/rake-10.5.0/doc/release_notes/rake-0.8.0.rdoc +114 -0
  207. data/gems/gems/rake-10.5.0/doc/release_notes/rake-0.8.2.rdoc +165 -0
  208. data/gems/gems/rake-10.5.0/doc/release_notes/rake-0.8.3.rdoc +112 -0
  209. data/gems/gems/rake-10.5.0/doc/release_notes/rake-0.8.4.rdoc +147 -0
  210. data/gems/gems/rake-10.5.0/doc/release_notes/rake-0.8.5.rdoc +53 -0
  211. data/gems/gems/rake-10.5.0/doc/release_notes/rake-0.8.6.rdoc +37 -0
  212. data/gems/gems/rake-10.5.0/doc/release_notes/rake-0.8.7.rdoc +55 -0
  213. data/gems/gems/rake-10.5.0/doc/release_notes/rake-0.9.0.rdoc +112 -0
  214. data/gems/gems/rake-10.5.0/doc/release_notes/rake-0.9.1.rdoc +52 -0
  215. data/gems/gems/rake-10.5.0/doc/release_notes/rake-0.9.2.2.rdoc +55 -0
  216. data/gems/gems/rake-10.5.0/doc/release_notes/rake-0.9.2.rdoc +49 -0
  217. data/gems/gems/rake-10.5.0/doc/release_notes/rake-0.9.3.rdoc +102 -0
  218. data/gems/gems/rake-10.5.0/doc/release_notes/rake-0.9.4.rdoc +60 -0
  219. data/gems/gems/rake-10.5.0/doc/release_notes/rake-0.9.5.rdoc +55 -0
  220. data/gems/gems/rake-10.5.0/doc/release_notes/rake-0.9.6.rdoc +64 -0
  221. data/gems/gems/rake-10.5.0/doc/release_notes/rake-10.0.0.rdoc +178 -0
  222. data/gems/gems/rake-10.5.0/doc/release_notes/rake-10.0.1.rdoc +58 -0
  223. data/gems/gems/rake-10.5.0/doc/release_notes/rake-10.0.2.rdoc +53 -0
  224. data/gems/gems/rake-10.5.0/doc/release_notes/rake-10.0.3.rdoc +191 -0
  225. data/gems/gems/rake-10.5.0/doc/release_notes/rake-10.1.0.rdoc +61 -0
  226. data/gems/gems/rake-10.5.0/lib/rake.rb +79 -0
  227. data/gems/gems/rake-10.5.0/lib/rake/alt_system.rb +110 -0
  228. data/gems/gems/rake-10.5.0/lib/rake/application.rb +790 -0
  229. data/gems/gems/rake-10.5.0/lib/rake/backtrace.rb +23 -0
  230. data/gems/gems/rake-10.5.0/lib/rake/clean.rb +76 -0
  231. data/gems/gems/rake-10.5.0/lib/rake/cloneable.rb +16 -0
  232. data/gems/gems/rake-10.5.0/lib/rake/contrib/.document +1 -0
  233. data/gems/gems/rake-10.5.0/lib/rake/contrib/compositepublisher.rb +21 -0
  234. data/gems/gems/rake-10.5.0/lib/rake/contrib/ftptools.rb +137 -0
  235. data/gems/gems/rake-10.5.0/lib/rake/contrib/publisher.rb +81 -0
  236. data/gems/gems/rake-10.5.0/lib/rake/contrib/rubyforgepublisher.rb +18 -0
  237. data/gems/gems/rake-10.5.0/lib/rake/contrib/sshpublisher.rb +61 -0
  238. data/gems/gems/rake-10.5.0/lib/rake/contrib/sys.rb +4 -0
  239. data/gems/gems/rake-10.5.0/lib/rake/cpu_counter.rb +125 -0
  240. data/gems/gems/rake-10.5.0/lib/rake/default_loader.rb +14 -0
  241. data/gems/gems/rake-10.5.0/lib/rake/dsl_definition.rb +201 -0
  242. data/gems/gems/rake-10.5.0/lib/rake/early_time.rb +21 -0
  243. data/gems/gems/rake-10.5.0/lib/rake/ext/core.rb +25 -0
  244. data/gems/gems/rake-10.5.0/lib/rake/ext/module.rb +2 -0
  245. data/gems/gems/rake-10.5.0/lib/rake/ext/pathname.rb +25 -0
  246. data/gems/gems/rake-10.5.0/lib/rake/ext/string.rb +175 -0
  247. data/gems/gems/rake-10.5.0/lib/rake/ext/time.rb +18 -0
  248. data/gems/gems/rake-10.5.0/lib/rake/file_creation_task.rb +24 -0
  249. data/gems/gems/rake-10.5.0/lib/rake/file_list.rb +428 -0
  250. data/gems/gems/rake-10.5.0/lib/rake/file_task.rb +46 -0
  251. data/gems/gems/rake-10.5.0/lib/rake/file_utils.rb +128 -0
  252. data/gems/gems/rake-10.5.0/lib/rake/file_utils_ext.rb +144 -0
  253. data/gems/gems/rake-10.5.0/lib/rake/gempackagetask.rb +4 -0
  254. data/gems/gems/rake-10.5.0/lib/rake/invocation_chain.rb +56 -0
  255. data/gems/gems/rake-10.5.0/lib/rake/invocation_exception_mixin.rb +16 -0
  256. data/gems/gems/rake-10.5.0/lib/rake/late_time.rb +17 -0
  257. data/gems/gems/rake-10.5.0/lib/rake/linked_list.rb +103 -0
  258. data/gems/gems/rake-10.5.0/lib/rake/loaders/makefile.rb +53 -0
  259. data/gems/gems/rake-10.5.0/lib/rake/multi_task.rb +13 -0
  260. data/gems/gems/rake-10.5.0/lib/rake/name_space.rb +38 -0
  261. data/gems/gems/rake-10.5.0/lib/rake/packagetask.rb +199 -0
  262. data/gems/gems/rake-10.5.0/lib/rake/pathmap.rb +3 -0
  263. data/gems/gems/rake-10.5.0/lib/rake/phony.rb +15 -0
  264. data/gems/gems/rake-10.5.0/lib/rake/private_reader.rb +20 -0
  265. data/gems/gems/rake-10.5.0/lib/rake/promise.rb +99 -0
  266. data/gems/gems/rake-10.5.0/lib/rake/pseudo_status.rb +29 -0
  267. data/gems/gems/rake-10.5.0/lib/rake/rake_module.rb +38 -0
  268. data/gems/gems/rake-10.5.0/lib/rake/rake_test_loader.rb +22 -0
  269. data/gems/gems/rake-10.5.0/lib/rake/rdoctask.rb +4 -0
  270. data/gems/gems/rake-10.5.0/lib/rake/ruby182_test_unit_fix.rb +29 -0
  271. data/gems/gems/rake-10.5.0/lib/rake/rule_recursion_overflow_error.rb +20 -0
  272. data/gems/gems/rake-10.5.0/lib/rake/runtest.rb +27 -0
  273. data/gems/gems/rake-10.5.0/lib/rake/scope.rb +42 -0
  274. data/gems/gems/rake-10.5.0/lib/rake/task.rb +383 -0
  275. data/gems/gems/rake-10.5.0/lib/rake/task_argument_error.rb +7 -0
  276. data/gems/gems/rake-10.5.0/lib/rake/task_arguments.rb +98 -0
  277. data/gems/gems/rake-10.5.0/lib/rake/task_manager.rb +307 -0
  278. data/gems/gems/rake-10.5.0/lib/rake/tasklib.rb +24 -0
  279. data/gems/gems/rake-10.5.0/lib/rake/testtask.rb +213 -0
  280. data/gems/gems/rake-10.5.0/lib/rake/thread_history_display.rb +48 -0
  281. data/gems/gems/rake-10.5.0/lib/rake/thread_pool.rb +164 -0
  282. data/gems/gems/rake-10.5.0/lib/rake/trace_output.rb +22 -0
  283. data/gems/gems/rake-10.5.0/lib/rake/version.rb +7 -0
  284. data/gems/gems/rake-10.5.0/lib/rake/win32.rb +56 -0
  285. data/gems/gems/rake-10.5.0/rakelib/publish.rake +20 -0
  286. data/gems/gems/rake-10.5.0/rakelib/test_times.rake +25 -0
  287. data/gems/gems/rake-10.5.0/test/file_creation.rb +34 -0
  288. data/gems/gems/rake-10.5.0/test/helper.rb +129 -0
  289. data/gems/gems/rake-10.5.0/test/support/rakefile_definitions.rb +478 -0
  290. data/gems/gems/rake-10.5.0/test/support/ruby_runner.rb +34 -0
  291. data/gems/gems/rake-10.5.0/test/test_private_reader.rb +42 -0
  292. data/gems/gems/rake-10.5.0/test/test_rake.rb +40 -0
  293. data/gems/gems/rake-10.5.0/test/test_rake_application.rb +643 -0
  294. data/gems/gems/rake-10.5.0/test/test_rake_application_options.rb +468 -0
  295. data/gems/gems/rake-10.5.0/test/test_rake_backtrace.rb +119 -0
  296. data/gems/gems/rake-10.5.0/test/test_rake_clean.rb +61 -0
  297. data/gems/gems/rake-10.5.0/test/test_rake_cpu_counter.rb +68 -0
  298. data/gems/gems/rake-10.5.0/test/test_rake_definitions.rb +84 -0
  299. data/gems/gems/rake-10.5.0/test/test_rake_directory_task.rb +76 -0
  300. data/gems/gems/rake-10.5.0/test/test_rake_dsl.rb +40 -0
  301. data/gems/gems/rake-10.5.0/test/test_rake_early_time.rb +31 -0
  302. data/gems/gems/rake-10.5.0/test/test_rake_extension.rb +59 -0
  303. data/gems/gems/rake-10.5.0/test/test_rake_file_creation_task.rb +56 -0
  304. data/gems/gems/rake-10.5.0/test/test_rake_file_list.rb +670 -0
  305. data/gems/gems/rake-10.5.0/test/test_rake_file_list_path_map.rb +8 -0
  306. data/gems/gems/rake-10.5.0/test/test_rake_file_task.rb +197 -0
  307. data/gems/gems/rake-10.5.0/test/test_rake_file_utils.rb +314 -0
  308. data/gems/gems/rake-10.5.0/test/test_rake_ftp_file.rb +74 -0
  309. data/gems/gems/rake-10.5.0/test/test_rake_functional.rb +482 -0
  310. data/gems/gems/rake-10.5.0/test/test_rake_invocation_chain.rb +64 -0
  311. data/gems/gems/rake-10.5.0/test/test_rake_late_time.rb +18 -0
  312. data/gems/gems/rake-10.5.0/test/test_rake_linked_list.rb +84 -0
  313. data/gems/gems/rake-10.5.0/test/test_rake_makefile_loader.rb +46 -0
  314. data/gems/gems/rake-10.5.0/test/test_rake_multi_task.rb +64 -0
  315. data/gems/gems/rake-10.5.0/test/test_rake_name_space.rb +57 -0
  316. data/gems/gems/rake-10.5.0/test/test_rake_package_task.rb +79 -0
  317. data/gems/gems/rake-10.5.0/test/test_rake_path_map.rb +168 -0
  318. data/gems/gems/rake-10.5.0/test/test_rake_path_map_explode.rb +34 -0
  319. data/gems/gems/rake-10.5.0/test/test_rake_path_map_partial.rb +18 -0
  320. data/gems/gems/rake-10.5.0/test/test_rake_pathname_extensions.rb +15 -0
  321. data/gems/gems/rake-10.5.0/test/test_rake_pseudo_status.rb +21 -0
  322. data/gems/gems/rake-10.5.0/test/test_rake_rake_test_loader.rb +20 -0
  323. data/gems/gems/rake-10.5.0/test/test_rake_reduce_compat.rb +26 -0
  324. data/gems/gems/rake-10.5.0/test/test_rake_require.rb +40 -0
  325. data/gems/gems/rake-10.5.0/test/test_rake_rules.rb +388 -0
  326. data/gems/gems/rake-10.5.0/test/test_rake_scope.rb +44 -0
  327. data/gems/gems/rake-10.5.0/test/test_rake_task.rb +393 -0
  328. data/gems/gems/rake-10.5.0/test/test_rake_task_argument_parsing.rb +119 -0
  329. data/gems/gems/rake-10.5.0/test/test_rake_task_arguments.rb +127 -0
  330. data/gems/gems/rake-10.5.0/test/test_rake_task_lib.rb +9 -0
  331. data/gems/gems/rake-10.5.0/test/test_rake_task_manager.rb +178 -0
  332. data/gems/gems/rake-10.5.0/test/test_rake_task_manager_argument_resolution.rb +19 -0
  333. data/gems/gems/rake-10.5.0/test/test_rake_task_with_arguments.rb +172 -0
  334. data/gems/gems/rake-10.5.0/test/test_rake_test_task.rb +146 -0
  335. data/gems/gems/rake-10.5.0/test/test_rake_thread_pool.rb +145 -0
  336. data/gems/gems/rake-10.5.0/test/test_rake_top_level_functions.rb +71 -0
  337. data/gems/gems/rake-10.5.0/test/test_rake_win32.rb +72 -0
  338. data/gems/gems/rake-10.5.0/test/test_thread_history_display.rb +101 -0
  339. data/gems/gems/rake-10.5.0/test/test_trace_output.rb +52 -0
  340. data/gems/gems/rspec-3.6.0/LICENSE.md +27 -0
  341. data/gems/gems/rspec-3.6.0/README.md +39 -0
  342. data/gems/gems/rspec-3.6.0/lib/rspec.rb +3 -0
  343. data/gems/gems/rspec-3.6.0/lib/rspec/version.rb +5 -0
  344. data/gems/gems/rspec-core-3.6.0/.document +5 -0
  345. data/gems/gems/rspec-core-3.6.0/.yardopts +8 -0
  346. data/gems/gems/rspec-core-3.6.0/Changelog.md +2167 -0
  347. data/gems/gems/rspec-core-3.6.0/LICENSE.md +26 -0
  348. data/gems/gems/rspec-core-3.6.0/README.md +384 -0
  349. data/gems/gems/rspec-core-3.6.0/exe/rspec +4 -0
  350. data/gems/gems/rspec-core-3.6.0/lib/rspec/autorun.rb +3 -0
  351. data/gems/gems/rspec-core-3.6.0/lib/rspec/core.rb +185 -0
  352. data/gems/gems/rspec-core-3.6.0/lib/rspec/core/backtrace_formatter.rb +65 -0
  353. data/gems/gems/rspec-core-3.6.0/lib/rspec/core/bisect/coordinator.rb +66 -0
  354. data/gems/gems/rspec-core-3.6.0/lib/rspec/core/bisect/example_minimizer.rb +169 -0
  355. data/gems/gems/rspec-core-3.6.0/lib/rspec/core/bisect/runner.rb +169 -0
  356. data/gems/gems/rspec-core-3.6.0/lib/rspec/core/bisect/server.rb +70 -0
  357. data/gems/gems/rspec-core-3.6.0/lib/rspec/core/configuration.rb +2177 -0
  358. data/gems/gems/rspec-core-3.6.0/lib/rspec/core/configuration_options.rb +196 -0
  359. data/gems/gems/rspec-core-3.6.0/lib/rspec/core/drb.rb +113 -0
  360. data/gems/gems/rspec-core-3.6.0/lib/rspec/core/dsl.rb +98 -0
  361. data/gems/gems/rspec-core-3.6.0/lib/rspec/core/example.rb +653 -0
  362. data/gems/gems/rspec-core-3.6.0/lib/rspec/core/example_group.rb +883 -0
  363. data/gems/gems/rspec-core-3.6.0/lib/rspec/core/example_status_persister.rb +235 -0
  364. data/gems/gems/rspec-core-3.6.0/lib/rspec/core/filter_manager.rb +231 -0
  365. data/gems/gems/rspec-core-3.6.0/lib/rspec/core/flat_map.rb +20 -0
  366. data/gems/gems/rspec-core-3.6.0/lib/rspec/core/formatters.rb +265 -0
  367. data/gems/gems/rspec-core-3.6.0/lib/rspec/core/formatters/base_formatter.rb +70 -0
  368. data/gems/gems/rspec-core-3.6.0/lib/rspec/core/formatters/base_text_formatter.rb +75 -0
  369. data/gems/gems/rspec-core-3.6.0/lib/rspec/core/formatters/bisect_formatter.rb +69 -0
  370. data/gems/gems/rspec-core-3.6.0/lib/rspec/core/formatters/bisect_progress_formatter.rb +144 -0
  371. data/gems/gems/rspec-core-3.6.0/lib/rspec/core/formatters/console_codes.rb +68 -0
  372. data/gems/gems/rspec-core-3.6.0/lib/rspec/core/formatters/deprecation_formatter.rb +223 -0
  373. data/gems/gems/rspec-core-3.6.0/lib/rspec/core/formatters/documentation_formatter.rb +70 -0
  374. data/gems/gems/rspec-core-3.6.0/lib/rspec/core/formatters/exception_presenter.rb +496 -0
  375. data/gems/gems/rspec-core-3.6.0/lib/rspec/core/formatters/fallback_message_formatter.rb +28 -0
  376. data/gems/gems/rspec-core-3.6.0/lib/rspec/core/formatters/helpers.rb +110 -0
  377. data/gems/gems/rspec-core-3.6.0/lib/rspec/core/formatters/html_formatter.rb +153 -0
  378. data/gems/gems/rspec-core-3.6.0/lib/rspec/core/formatters/html_printer.rb +414 -0
  379. data/gems/gems/rspec-core-3.6.0/lib/rspec/core/formatters/html_snippet_extractor.rb +118 -0
  380. data/gems/gems/rspec-core-3.6.0/lib/rspec/core/formatters/json_formatter.rb +101 -0
  381. data/gems/gems/rspec-core-3.6.0/lib/rspec/core/formatters/profile_formatter.rb +68 -0
  382. data/gems/gems/rspec-core-3.6.0/lib/rspec/core/formatters/progress_formatter.rb +29 -0
  383. data/gems/gems/rspec-core-3.6.0/lib/rspec/core/formatters/protocol.rb +182 -0
  384. data/gems/gems/rspec-core-3.6.0/lib/rspec/core/formatters/snippet_extractor.rb +134 -0
  385. data/gems/gems/rspec-core-3.6.0/lib/rspec/core/formatters/syntax_highlighter.rb +91 -0
  386. data/gems/gems/rspec-core-3.6.0/lib/rspec/core/hooks.rb +624 -0
  387. data/gems/gems/rspec-core-3.6.0/lib/rspec/core/invocations.rb +85 -0
  388. data/gems/gems/rspec-core-3.6.0/lib/rspec/core/memoized_helpers.rb +535 -0
  389. data/gems/gems/rspec-core-3.6.0/lib/rspec/core/metadata.rb +499 -0
  390. data/gems/gems/rspec-core-3.6.0/lib/rspec/core/metadata_filter.rb +255 -0
  391. data/gems/gems/rspec-core-3.6.0/lib/rspec/core/minitest_assertions_adapter.rb +31 -0
  392. data/gems/gems/rspec-core-3.6.0/lib/rspec/core/mocking_adapters/flexmock.rb +31 -0
  393. data/gems/gems/rspec-core-3.6.0/lib/rspec/core/mocking_adapters/mocha.rb +57 -0
  394. data/gems/gems/rspec-core-3.6.0/lib/rspec/core/mocking_adapters/null.rb +14 -0
  395. data/gems/gems/rspec-core-3.6.0/lib/rspec/core/mocking_adapters/rr.rb +31 -0
  396. data/gems/gems/rspec-core-3.6.0/lib/rspec/core/mocking_adapters/rspec.rb +32 -0
  397. data/gems/gems/rspec-core-3.6.0/lib/rspec/core/notifications.rb +514 -0
  398. data/gems/gems/rspec-core-3.6.0/lib/rspec/core/option_parser.rb +309 -0
  399. data/gems/gems/rspec-core-3.6.0/lib/rspec/core/ordering.rb +158 -0
  400. data/gems/gems/rspec-core-3.6.0/lib/rspec/core/output_wrapper.rb +29 -0
  401. data/gems/gems/rspec-core-3.6.0/lib/rspec/core/pending.rb +165 -0
  402. data/gems/gems/rspec-core-3.6.0/lib/rspec/core/profiler.rb +32 -0
  403. data/gems/gems/rspec-core-3.6.0/lib/rspec/core/project_initializer.rb +48 -0
  404. data/gems/gems/rspec-core-3.6.0/lib/rspec/core/project_initializer/.rspec +1 -0
  405. data/gems/gems/rspec-core-3.6.0/lib/rspec/core/project_initializer/spec/spec_helper.rb +100 -0
  406. data/gems/gems/rspec-core-3.6.0/lib/rspec/core/rake_task.rb +168 -0
  407. data/gems/gems/rspec-core-3.6.0/lib/rspec/core/reporter.rb +260 -0
  408. data/gems/gems/rspec-core-3.6.0/lib/rspec/core/ruby_project.rb +53 -0
  409. data/gems/gems/rspec-core-3.6.0/lib/rspec/core/runner.rb +193 -0
  410. data/gems/gems/rspec-core-3.6.0/lib/rspec/core/sandbox.rb +37 -0
  411. data/gems/gems/rspec-core-3.6.0/lib/rspec/core/set.rb +54 -0
  412. data/gems/gems/rspec-core-3.6.0/lib/rspec/core/shared_context.rb +55 -0
  413. data/gems/gems/rspec-core-3.6.0/lib/rspec/core/shared_example_group.rb +271 -0
  414. data/gems/gems/rspec-core-3.6.0/lib/rspec/core/shell_escape.rb +49 -0
  415. data/gems/gems/rspec-core-3.6.0/lib/rspec/core/test_unit_assertions_adapter.rb +30 -0
  416. data/gems/gems/rspec-core-3.6.0/lib/rspec/core/version.rb +9 -0
  417. data/gems/gems/rspec-core-3.6.0/lib/rspec/core/warnings.rb +40 -0
  418. data/gems/gems/rspec-core-3.6.0/lib/rspec/core/world.rb +264 -0
  419. data/gems/gems/rspec-expectations-3.6.0/.document +5 -0
  420. data/gems/gems/rspec-expectations-3.6.0/.yardopts +6 -0
  421. data/gems/gems/rspec-expectations-3.6.0/Changelog.md +1072 -0
  422. data/gems/gems/rspec-expectations-3.6.0/LICENSE.md +25 -0
  423. data/gems/gems/rspec-expectations-3.6.0/README.md +305 -0
  424. data/gems/gems/rspec-expectations-3.6.0/lib/rspec/expectations.rb +82 -0
  425. data/gems/gems/rspec-expectations-3.6.0/lib/rspec/expectations/block_snippet_extractor.rb +253 -0
  426. data/gems/gems/rspec-expectations-3.6.0/lib/rspec/expectations/configuration.rb +201 -0
  427. data/gems/gems/rspec-expectations-3.6.0/lib/rspec/expectations/expectation_target.rb +127 -0
  428. data/gems/gems/rspec-expectations-3.6.0/lib/rspec/expectations/fail_with.rb +39 -0
  429. data/gems/gems/rspec-expectations-3.6.0/lib/rspec/expectations/failure_aggregator.rb +194 -0
  430. data/gems/gems/rspec-expectations-3.6.0/lib/rspec/expectations/handler.rb +170 -0
  431. data/gems/gems/rspec-expectations-3.6.0/lib/rspec/expectations/minitest_integration.rb +58 -0
  432. data/gems/gems/rspec-expectations-3.6.0/lib/rspec/expectations/syntax.rb +132 -0
  433. data/gems/gems/rspec-expectations-3.6.0/lib/rspec/expectations/version.rb +8 -0
  434. data/gems/gems/rspec-expectations-3.6.0/lib/rspec/matchers.rb +1025 -0
  435. data/gems/gems/rspec-expectations-3.6.0/lib/rspec/matchers/aliased_matcher.rb +116 -0
  436. data/gems/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in.rb +52 -0
  437. data/gems/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/all.rb +85 -0
  438. data/gems/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/base_matcher.rb +193 -0
  439. data/gems/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/be.rb +288 -0
  440. data/gems/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/be_between.rb +77 -0
  441. data/gems/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/be_instance_of.rb +22 -0
  442. data/gems/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/be_kind_of.rb +16 -0
  443. data/gems/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/be_within.rb +72 -0
  444. data/gems/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/change.rb +387 -0
  445. data/gems/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/compound.rb +272 -0
  446. data/gems/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/contain_exactly.rb +301 -0
  447. data/gems/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/cover.rb +24 -0
  448. data/gems/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/eq.rb +40 -0
  449. data/gems/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/eql.rb +34 -0
  450. data/gems/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/equal.rb +81 -0
  451. data/gems/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/exist.rb +90 -0
  452. data/gems/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/has.rb +103 -0
  453. data/gems/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/have_attributes.rb +114 -0
  454. data/gems/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/include.rb +143 -0
  455. data/gems/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/match.rb +106 -0
  456. data/gems/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/operators.rb +128 -0
  457. data/gems/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/output.rb +200 -0
  458. data/gems/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/raise_error.rb +230 -0
  459. data/gems/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/respond_to.rb +165 -0
  460. data/gems/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/satisfy.rb +60 -0
  461. data/gems/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/start_or_end_with.rb +94 -0
  462. data/gems/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/throw_symbol.rb +132 -0
  463. data/gems/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/yield.rb +432 -0
  464. data/gems/gems/rspec-expectations-3.6.0/lib/rspec/matchers/composable.rb +169 -0
  465. data/gems/gems/rspec-expectations-3.6.0/lib/rspec/matchers/dsl.rb +527 -0
  466. data/gems/gems/rspec-expectations-3.6.0/lib/rspec/matchers/english_phrasing.rb +58 -0
  467. data/gems/gems/rspec-expectations-3.6.0/lib/rspec/matchers/expecteds_for_multiple_diffs.rb +73 -0
  468. data/gems/gems/rspec-expectations-3.6.0/lib/rspec/matchers/fail_matchers.rb +42 -0
  469. data/gems/gems/rspec-expectations-3.6.0/lib/rspec/matchers/generated_descriptions.rb +42 -0
  470. data/gems/gems/rspec-expectations-3.6.0/lib/rspec/matchers/matcher_delegator.rb +35 -0
  471. data/gems/gems/rspec-expectations-3.6.0/lib/rspec/matchers/matcher_protocol.rb +99 -0
  472. data/gems/gems/rspec-mocks-3.6.0/.document +5 -0
  473. data/gems/gems/rspec-mocks-3.6.0/.yardopts +6 -0
  474. data/gems/gems/rspec-mocks-3.6.0/Changelog.md +1073 -0
  475. data/gems/gems/rspec-mocks-3.6.0/LICENSE.md +25 -0
  476. data/gems/gems/rspec-mocks-3.6.0/README.md +460 -0
  477. data/gems/gems/rspec-mocks-3.6.0/lib/rspec/mocks.rb +130 -0
  478. data/gems/gems/rspec-mocks-3.6.0/lib/rspec/mocks/any_instance.rb +11 -0
  479. data/gems/gems/rspec-mocks-3.6.0/lib/rspec/mocks/any_instance/chain.rb +110 -0
  480. data/gems/gems/rspec-mocks-3.6.0/lib/rspec/mocks/any_instance/error_generator.rb +31 -0
  481. data/gems/gems/rspec-mocks-3.6.0/lib/rspec/mocks/any_instance/expect_chain_chain.rb +31 -0
  482. data/gems/gems/rspec-mocks-3.6.0/lib/rspec/mocks/any_instance/expectation_chain.rb +50 -0
  483. data/gems/gems/rspec-mocks-3.6.0/lib/rspec/mocks/any_instance/message_chains.rb +83 -0
  484. data/gems/gems/rspec-mocks-3.6.0/lib/rspec/mocks/any_instance/proxy.rb +116 -0
  485. data/gems/gems/rspec-mocks-3.6.0/lib/rspec/mocks/any_instance/recorder.rb +289 -0
  486. data/gems/gems/rspec-mocks-3.6.0/lib/rspec/mocks/any_instance/stub_chain.rb +51 -0
  487. data/gems/gems/rspec-mocks-3.6.0/lib/rspec/mocks/any_instance/stub_chain_chain.rb +23 -0
  488. data/gems/gems/rspec-mocks-3.6.0/lib/rspec/mocks/argument_list_matcher.rb +100 -0
  489. data/gems/gems/rspec-mocks-3.6.0/lib/rspec/mocks/argument_matchers.rb +320 -0
  490. data/gems/gems/rspec-mocks-3.6.0/lib/rspec/mocks/configuration.rb +212 -0
  491. data/gems/gems/rspec-mocks-3.6.0/lib/rspec/mocks/error_generator.rb +369 -0
  492. data/gems/gems/rspec-mocks-3.6.0/lib/rspec/mocks/example_methods.rb +434 -0
  493. data/gems/gems/rspec-mocks-3.6.0/lib/rspec/mocks/instance_method_stasher.rb +146 -0
  494. data/gems/gems/rspec-mocks-3.6.0/lib/rspec/mocks/marshal_extension.rb +41 -0
  495. data/gems/gems/rspec-mocks-3.6.0/lib/rspec/mocks/matchers/expectation_customization.rb +20 -0
  496. data/gems/gems/rspec-mocks-3.6.0/lib/rspec/mocks/matchers/have_received.rb +130 -0
  497. data/gems/gems/rspec-mocks-3.6.0/lib/rspec/mocks/matchers/receive.rb +132 -0
  498. data/gems/gems/rspec-mocks-3.6.0/lib/rspec/mocks/matchers/receive_message_chain.rb +82 -0
  499. data/gems/gems/rspec-mocks-3.6.0/lib/rspec/mocks/matchers/receive_messages.rb +77 -0
  500. data/gems/gems/rspec-mocks-3.6.0/lib/rspec/mocks/message_chain.rb +87 -0
  501. data/gems/gems/rspec-mocks-3.6.0/lib/rspec/mocks/message_expectation.rb +740 -0
  502. data/gems/gems/rspec-mocks-3.6.0/lib/rspec/mocks/method_double.rb +287 -0
  503. data/gems/gems/rspec-mocks-3.6.0/lib/rspec/mocks/method_reference.rb +202 -0
  504. data/gems/gems/rspec-mocks-3.6.0/lib/rspec/mocks/minitest_integration.rb +68 -0
  505. data/gems/gems/rspec-mocks-3.6.0/lib/rspec/mocks/mutate_const.rb +339 -0
  506. data/gems/gems/rspec-mocks-3.6.0/lib/rspec/mocks/object_reference.rb +149 -0
  507. data/gems/gems/rspec-mocks-3.6.0/lib/rspec/mocks/order_group.rb +81 -0
  508. data/gems/gems/rspec-mocks-3.6.0/lib/rspec/mocks/proxy.rb +484 -0
  509. data/gems/gems/rspec-mocks-3.6.0/lib/rspec/mocks/space.rb +238 -0
  510. data/gems/gems/rspec-mocks-3.6.0/lib/rspec/mocks/standalone.rb +3 -0
  511. data/gems/gems/rspec-mocks-3.6.0/lib/rspec/mocks/syntax.rb +325 -0
  512. data/gems/gems/rspec-mocks-3.6.0/lib/rspec/mocks/targets.rb +124 -0
  513. data/gems/gems/rspec-mocks-3.6.0/lib/rspec/mocks/test_double.rb +171 -0
  514. data/gems/gems/rspec-mocks-3.6.0/lib/rspec/mocks/verifying_double.rb +129 -0
  515. data/gems/gems/rspec-mocks-3.6.0/lib/rspec/mocks/verifying_message_expectation.rb +54 -0
  516. data/gems/gems/rspec-mocks-3.6.0/lib/rspec/mocks/verifying_proxy.rb +220 -0
  517. data/gems/gems/rspec-mocks-3.6.0/lib/rspec/mocks/version.rb +9 -0
  518. data/gems/gems/rspec-support-3.6.0/Changelog.md +211 -0
  519. data/gems/gems/rspec-support-3.6.0/LICENSE.md +23 -0
  520. data/gems/gems/rspec-support-3.6.0/README.md +40 -0
  521. data/gems/gems/rspec-support-3.6.0/lib/rspec/support.rb +139 -0
  522. data/gems/gems/rspec-support-3.6.0/lib/rspec/support/caller_filter.rb +83 -0
  523. data/gems/gems/rspec-support-3.6.0/lib/rspec/support/comparable_version.rb +46 -0
  524. data/gems/gems/rspec-support-3.6.0/lib/rspec/support/differ.rb +215 -0
  525. data/gems/gems/rspec-support-3.6.0/lib/rspec/support/directory_maker.rb +63 -0
  526. data/gems/gems/rspec-support-3.6.0/lib/rspec/support/encoded_string.rb +165 -0
  527. data/gems/gems/rspec-support-3.6.0/lib/rspec/support/fuzzy_matcher.rb +48 -0
  528. data/gems/gems/rspec-support-3.6.0/lib/rspec/support/hunk_generator.rb +47 -0
  529. data/gems/gems/rspec-support-3.6.0/lib/rspec/support/matcher_definition.rb +42 -0
  530. data/gems/gems/rspec-support-3.6.0/lib/rspec/support/method_signature_verifier.rb +392 -0
  531. data/gems/gems/rspec-support-3.6.0/lib/rspec/support/mutex.rb +73 -0
  532. data/gems/gems/rspec-support-3.6.0/lib/rspec/support/object_formatter.rb +268 -0
  533. data/gems/gems/rspec-support-3.6.0/lib/rspec/support/recursive_const_methods.rb +76 -0
  534. data/gems/gems/rspec-support-3.6.0/lib/rspec/support/reentrant_mutex.rb +53 -0
  535. data/gems/gems/rspec-support-3.6.0/lib/rspec/support/ruby_features.rb +162 -0
  536. data/gems/gems/rspec-support-3.6.0/lib/rspec/support/source.rb +75 -0
  537. data/gems/gems/rspec-support-3.6.0/lib/rspec/support/source/location.rb +21 -0
  538. data/gems/gems/rspec-support-3.6.0/lib/rspec/support/source/node.rb +107 -0
  539. data/gems/gems/rspec-support-3.6.0/lib/rspec/support/source/token.rb +87 -0
  540. data/gems/gems/rspec-support-3.6.0/lib/rspec/support/spec.rb +81 -0
  541. data/gems/gems/rspec-support-3.6.0/lib/rspec/support/spec/deprecation_helpers.rb +64 -0
  542. data/gems/gems/rspec-support-3.6.0/lib/rspec/support/spec/formatting_support.rb +9 -0
  543. data/gems/gems/rspec-support-3.6.0/lib/rspec/support/spec/in_sub_process.rb +69 -0
  544. data/gems/gems/rspec-support-3.6.0/lib/rspec/support/spec/library_wide_checks.rb +150 -0
  545. data/gems/gems/rspec-support-3.6.0/lib/rspec/support/spec/shell_out.rb +84 -0
  546. data/gems/gems/rspec-support-3.6.0/lib/rspec/support/spec/stderr_splitter.rb +63 -0
  547. data/gems/gems/rspec-support-3.6.0/lib/rspec/support/spec/string_matcher.rb +46 -0
  548. data/gems/gems/rspec-support-3.6.0/lib/rspec/support/spec/with_isolated_directory.rb +13 -0
  549. data/gems/gems/rspec-support-3.6.0/lib/rspec/support/spec/with_isolated_stderr.rb +13 -0
  550. data/gems/gems/rspec-support-3.6.0/lib/rspec/support/version.rb +7 -0
  551. data/gems/gems/rspec-support-3.6.0/lib/rspec/support/warnings.rb +39 -0
  552. data/gems/gems/thor-0.19.4/.document +5 -0
  553. data/gems/gems/thor-0.19.4/CHANGELOG.md +163 -0
  554. data/gems/gems/thor-0.19.4/CONTRIBUTING.md +15 -0
  555. data/gems/gems/thor-0.19.4/LICENSE.md +20 -0
  556. data/gems/gems/thor-0.19.4/README.md +47 -0
  557. data/gems/gems/thor-0.19.4/bin/thor +6 -0
  558. data/gems/gems/thor-0.19.4/lib/thor.rb +492 -0
  559. data/gems/gems/thor-0.19.4/lib/thor/actions.rb +318 -0
  560. data/gems/gems/thor-0.19.4/lib/thor/actions/create_file.rb +103 -0
  561. data/gems/gems/thor-0.19.4/lib/thor/actions/create_link.rb +59 -0
  562. data/gems/gems/thor-0.19.4/lib/thor/actions/directory.rb +118 -0
  563. data/gems/gems/thor-0.19.4/lib/thor/actions/empty_directory.rb +135 -0
  564. data/gems/gems/thor-0.19.4/lib/thor/actions/file_manipulation.rb +327 -0
  565. data/gems/gems/thor-0.19.4/lib/thor/actions/inject_into_file.rb +103 -0
  566. data/gems/gems/thor-0.19.4/lib/thor/base.rb +656 -0
  567. data/gems/gems/thor-0.19.4/lib/thor/command.rb +133 -0
  568. data/gems/gems/thor-0.19.4/lib/thor/core_ext/hash_with_indifferent_access.rb +85 -0
  569. data/gems/gems/thor-0.19.4/lib/thor/core_ext/io_binary_read.rb +12 -0
  570. data/gems/gems/thor-0.19.4/lib/thor/core_ext/ordered_hash.rb +129 -0
  571. data/gems/gems/thor-0.19.4/lib/thor/error.rb +32 -0
  572. data/gems/gems/thor-0.19.4/lib/thor/group.rb +281 -0
  573. data/gems/gems/thor-0.19.4/lib/thor/invocation.rb +177 -0
  574. data/gems/gems/thor-0.19.4/lib/thor/line_editor.rb +17 -0
  575. data/gems/gems/thor-0.19.4/lib/thor/line_editor/basic.rb +35 -0
  576. data/gems/gems/thor-0.19.4/lib/thor/line_editor/readline.rb +88 -0
  577. data/gems/gems/thor-0.19.4/lib/thor/parser.rb +4 -0
  578. data/gems/gems/thor-0.19.4/lib/thor/parser/argument.rb +70 -0
  579. data/gems/gems/thor-0.19.4/lib/thor/parser/arguments.rb +175 -0
  580. data/gems/gems/thor-0.19.4/lib/thor/parser/option.rb +146 -0
  581. data/gems/gems/thor-0.19.4/lib/thor/parser/options.rb +220 -0
  582. data/gems/gems/thor-0.19.4/lib/thor/rake_compat.rb +71 -0
  583. data/gems/gems/thor-0.19.4/lib/thor/runner.rb +322 -0
  584. data/gems/gems/thor-0.19.4/lib/thor/shell.rb +81 -0
  585. data/gems/gems/thor-0.19.4/lib/thor/shell/basic.rb +436 -0
  586. data/gems/gems/thor-0.19.4/lib/thor/shell/color.rb +149 -0
  587. data/gems/gems/thor-0.19.4/lib/thor/shell/html.rb +126 -0
  588. data/gems/gems/thor-0.19.4/lib/thor/util.rb +268 -0
  589. data/gems/gems/thor-0.19.4/lib/thor/version.rb +3 -0
  590. data/gems/gems/thor-0.19.4/thor.gemspec +21 -0
  591. data/gems/gems/unicode-0.4.4.4/README +156 -0
  592. data/gems/gems/unicode-0.4.4.4/Rakefile +103 -0
  593. data/gems/gems/unicode-0.4.4.4/ext/unicode/.sitearchdir.-.unicode.time +0 -0
  594. data/gems/gems/unicode-0.4.4.4/ext/unicode/Makefile +264 -0
  595. data/gems/gems/unicode-0.4.4.4/ext/unicode/extconf.rb +3 -0
  596. data/gems/gems/unicode-0.4.4.4/ext/unicode/unicode.c +1325 -0
  597. data/gems/gems/unicode-0.4.4.4/ext/unicode/unicode.o +0 -0
  598. data/gems/gems/unicode-0.4.4.4/ext/unicode/unicode_native.bundle +0 -0
  599. data/gems/gems/unicode-0.4.4.4/ext/unicode/unidata.map +24555 -0
  600. data/gems/gems/unicode-0.4.4.4/ext/unicode/ustring.c +208 -0
  601. data/gems/gems/unicode-0.4.4.4/ext/unicode/ustring.h +48 -0
  602. data/gems/gems/unicode-0.4.4.4/ext/unicode/ustring.o +0 -0
  603. data/gems/gems/unicode-0.4.4.4/ext/unicode/wstring.c +257 -0
  604. data/gems/gems/unicode-0.4.4.4/ext/unicode/wstring.h +43 -0
  605. data/gems/gems/unicode-0.4.4.4/ext/unicode/wstring.o +0 -0
  606. data/gems/gems/unicode-0.4.4.4/lib/unicode.rb +6 -0
  607. data/gems/gems/unicode-0.4.4.4/lib/unicode/unicode_native.bundle +0 -0
  608. data/gems/gems/unicode-0.4.4.4/test/test.rb +69 -0
  609. data/gems/gems/unicode-0.4.4.4/tools/README +7 -0
  610. data/gems/gems/unicode-0.4.4.4/tools/mkunidata.rb +293 -0
  611. data/gems/gems/unicode-0.4.4.4/tools/normtest.rb +111 -0
  612. data/gems/gems/unicode-0.4.4.4/unicode.gemspec +30 -0
  613. data/gems/specifications/bibtex-ruby-4.4.4.gemspec +32 -0
  614. data/gems/specifications/diff-lcs-1.3.gemspec +61 -0
  615. data/gems/specifications/latex-decode-0.2.2.gemspec +35 -0
  616. data/gems/specifications/rake-10.5.0.gemspec +43 -0
  617. data/gems/specifications/rspec-3.6.0.gemspec +42 -0
  618. data/gems/specifications/rspec-core-3.6.0.gemspec +62 -0
  619. data/gems/specifications/rspec-expectations-3.6.0.gemspec +50 -0
  620. data/gems/specifications/rspec-mocks-3.6.0.gemspec +50 -0
  621. data/gems/specifications/rspec-support-3.6.0.gemspec +41 -0
  622. data/gems/specifications/thor-0.19.4.gemspec +35 -0
  623. data/gems/specifications/unicode-0.4.4.4.gemspec +25 -0
  624. data/lib/bibtex_to_scrapbox.rb +67 -0
  625. data/lib/bibtex_to_scrapbox/version.rb +3 -0
  626. data/lib/cli.rb +23 -0
  627. metadata +740 -0
@@ -0,0 +1,170 @@
1
+ module RSpec
2
+ module Expectations
3
+ # @private
4
+ module ExpectationHelper
5
+ def self.check_message(msg)
6
+ unless msg.nil? || msg.respond_to?(:to_str) || msg.respond_to?(:call)
7
+ ::Kernel.warn [
8
+ "WARNING: ignoring the provided expectation message argument (",
9
+ msg.inspect,
10
+ ") since it is not a string or a proc."
11
+ ].join
12
+ end
13
+ end
14
+
15
+ # Returns an RSpec-3+ compatible matcher, wrapping a legacy one
16
+ # in an adapter if necessary.
17
+ #
18
+ # @private
19
+ def self.modern_matcher_from(matcher)
20
+ LegacyMatcherAdapter::RSpec2.wrap(matcher) ||
21
+ LegacyMatcherAdapter::RSpec1.wrap(matcher) || matcher
22
+ end
23
+
24
+ def self.with_matcher(handler, matcher, message)
25
+ check_message(message)
26
+ matcher = modern_matcher_from(matcher)
27
+ yield matcher
28
+ ensure
29
+ ::RSpec::Matchers.last_expectation_handler = handler
30
+ ::RSpec::Matchers.last_matcher = matcher
31
+ end
32
+
33
+ def self.handle_failure(matcher, message, failure_message_method)
34
+ message = message.call if message.respond_to?(:call)
35
+ message ||= matcher.__send__(failure_message_method)
36
+
37
+ if matcher.respond_to?(:diffable?) && matcher.diffable?
38
+ ::RSpec::Expectations.fail_with message, matcher.expected, matcher.actual
39
+ else
40
+ ::RSpec::Expectations.fail_with message
41
+ end
42
+ end
43
+ end
44
+
45
+ # @private
46
+ class PositiveExpectationHandler
47
+ def self.handle_matcher(actual, initial_matcher, message=nil, &block)
48
+ ExpectationHelper.with_matcher(self, initial_matcher, message) do |matcher|
49
+ return ::RSpec::Matchers::BuiltIn::PositiveOperatorMatcher.new(actual) unless initial_matcher
50
+ matcher.matches?(actual, &block) || ExpectationHelper.handle_failure(matcher, message, :failure_message)
51
+ end
52
+ end
53
+
54
+ def self.verb
55
+ "should"
56
+ end
57
+
58
+ def self.should_method
59
+ :should
60
+ end
61
+
62
+ def self.opposite_should_method
63
+ :should_not
64
+ end
65
+ end
66
+
67
+ # @private
68
+ class NegativeExpectationHandler
69
+ def self.handle_matcher(actual, initial_matcher, message=nil, &block)
70
+ ExpectationHelper.with_matcher(self, initial_matcher, message) do |matcher|
71
+ return ::RSpec::Matchers::BuiltIn::NegativeOperatorMatcher.new(actual) unless initial_matcher
72
+ does_not_match?(matcher, actual, &block) || ExpectationHelper.handle_failure(matcher, message, :failure_message_when_negated)
73
+ end
74
+ end
75
+
76
+ def self.does_not_match?(matcher, actual, &block)
77
+ if matcher.respond_to?(:does_not_match?)
78
+ matcher.does_not_match?(actual, &block)
79
+ else
80
+ !matcher.matches?(actual, &block)
81
+ end
82
+ end
83
+
84
+ def self.verb
85
+ "should not"
86
+ end
87
+
88
+ def self.should_method
89
+ :should_not
90
+ end
91
+
92
+ def self.opposite_should_method
93
+ :should
94
+ end
95
+ end
96
+
97
+ # Wraps a matcher written against one of the legacy protocols in
98
+ # order to present the current protocol.
99
+ #
100
+ # @private
101
+ class LegacyMatcherAdapter < Matchers::MatcherDelegator
102
+ def initialize(matcher)
103
+ super
104
+ ::RSpec.warn_deprecation(<<-EOS.gsub(/^\s+\|/, ''), :type => "legacy_matcher")
105
+ |#{matcher.class.name || matcher.inspect} implements a legacy RSpec matcher
106
+ |protocol. For the current protocol you should expose the failure messages
107
+ |via the `failure_message` and `failure_message_when_negated` methods.
108
+ |(Used from #{CallerFilter.first_non_rspec_line})
109
+ EOS
110
+ end
111
+
112
+ def self.wrap(matcher)
113
+ new(matcher) if interface_matches?(matcher)
114
+ end
115
+
116
+ # Starting in RSpec 1.2 (and continuing through all 2.x releases),
117
+ # the failure message protocol was:
118
+ # * `failure_message_for_should`
119
+ # * `failure_message_for_should_not`
120
+ # @private
121
+ class RSpec2 < self
122
+ def failure_message
123
+ base_matcher.failure_message_for_should
124
+ end
125
+
126
+ def failure_message_when_negated
127
+ base_matcher.failure_message_for_should_not
128
+ end
129
+
130
+ def self.interface_matches?(matcher)
131
+ (
132
+ !matcher.respond_to?(:failure_message) &&
133
+ matcher.respond_to?(:failure_message_for_should)
134
+ ) || (
135
+ !matcher.respond_to?(:failure_message_when_negated) &&
136
+ matcher.respond_to?(:failure_message_for_should_not)
137
+ )
138
+ end
139
+ end
140
+
141
+ # Before RSpec 1.2, the failure message protocol was:
142
+ # * `failure_message`
143
+ # * `negative_failure_message`
144
+ # @private
145
+ class RSpec1 < self
146
+ def failure_message
147
+ base_matcher.failure_message
148
+ end
149
+
150
+ def failure_message_when_negated
151
+ base_matcher.negative_failure_message
152
+ end
153
+
154
+ # Note: `failure_message` is part of the RSpec 3 protocol
155
+ # (paired with `failure_message_when_negated`), so we don't check
156
+ # for `failure_message` here.
157
+ def self.interface_matches?(matcher)
158
+ !matcher.respond_to?(:failure_message_when_negated) &&
159
+ matcher.respond_to?(:negative_failure_message)
160
+ end
161
+ end
162
+ end
163
+
164
+ # RSpec 3.0 was released with the class name misspelled. For SemVer compatibility,
165
+ # we will provide this misspelled alias until 4.0.
166
+ # @deprecated Use LegacyMatcherAdapter instead.
167
+ # @private
168
+ LegacyMacherAdapter = LegacyMatcherAdapter
169
+ end
170
+ end
@@ -0,0 +1,58 @@
1
+ require 'rspec/expectations'
2
+
3
+ Minitest::Test.class_eval do
4
+ include ::RSpec::Matchers
5
+
6
+ # This `expect` will only be called if the user is using Minitest < 5.6
7
+ # or if they are _not_ using Minitest::Spec on 5.6+. Minitest::Spec on 5.6+
8
+ # defines its own `expect` and will have the assertions incremented via our
9
+ # definitions of `to`/`not_to`/`to_not` below.
10
+ def expect(*a, &b)
11
+ self.assertions += 1
12
+ super
13
+ end
14
+
15
+ # Convert a `MultipleExpectationsNotMetError` to a `Minitest::Assertion` error so
16
+ # it gets counted in minitest's summary stats as a failure rather than an error.
17
+ # It would be nice to make `MultipleExpectationsNotMetError` subclass
18
+ # `Minitest::Assertion`, but Minitest's implementation does not treat subclasses
19
+ # the same, so this is the best we can do.
20
+ def aggregate_failures(*args, &block)
21
+ super
22
+ rescue RSpec::Expectations::MultipleExpectationsNotMetError => e
23
+ assertion_failed = Minitest::Assertion.new(e.message)
24
+ assertion_failed.set_backtrace e.backtrace
25
+ raise assertion_failed
26
+ end
27
+ end
28
+
29
+ # Older versions of Minitest (e.g. before 5.6) do not define
30
+ # `Minitest::Expectation`.
31
+ if defined?(::Minitest::Expectation)
32
+ Minitest::Expectation.class_eval do
33
+ include RSpec::Expectations::ExpectationTarget::InstanceMethods
34
+
35
+ def to(*args)
36
+ ctx.assertions += 1
37
+ super
38
+ end
39
+
40
+ def not_to(*args)
41
+ ctx.assertions += 1
42
+ super
43
+ end
44
+
45
+ def to_not(*args)
46
+ ctx.assertions += 1
47
+ super
48
+ end
49
+ end
50
+ end
51
+
52
+ module RSpec
53
+ module Expectations
54
+ remove_const :ExpectationNotMetError
55
+ # Exception raised when an expectation fails.
56
+ ExpectationNotMetError = ::Minitest::Assertion
57
+ end
58
+ end
@@ -0,0 +1,132 @@
1
+ module RSpec
2
+ module Expectations
3
+ # @api private
4
+ # Provides methods for enabling and disabling the available
5
+ # syntaxes provided by rspec-expectations.
6
+ module Syntax
7
+ module_function
8
+
9
+ # @api private
10
+ # Determines where we add `should` and `should_not`.
11
+ def default_should_host
12
+ @default_should_host ||= ::Object.ancestors.last
13
+ end
14
+
15
+ # @api private
16
+ # Instructs rspec-expectations to warn on first usage of `should` or `should_not`.
17
+ # Enabled by default. This is largely here to facilitate testing.
18
+ def warn_about_should!
19
+ @warn_about_should = true
20
+ end
21
+
22
+ # @api private
23
+ # Generates a deprecation warning for the given method if no warning
24
+ # has already been issued.
25
+ def warn_about_should_unless_configured(method_name)
26
+ return unless @warn_about_should
27
+
28
+ RSpec.deprecate(
29
+ "Using `#{method_name}` from rspec-expectations' old `:should` syntax without explicitly enabling the syntax",
30
+ :replacement => "the new `:expect` syntax or explicitly enable `:should` with `config.expect_with(:rspec) { |c| c.syntax = :should }`"
31
+ )
32
+
33
+ @warn_about_should = false
34
+ end
35
+
36
+ # @api private
37
+ # Enables the `should` syntax.
38
+ def enable_should(syntax_host=default_should_host)
39
+ @warn_about_should = false if syntax_host == default_should_host
40
+ return if should_enabled?(syntax_host)
41
+
42
+ syntax_host.module_exec do
43
+ def should(matcher=nil, message=nil, &block)
44
+ ::RSpec::Expectations::Syntax.warn_about_should_unless_configured(::Kernel.__method__)
45
+ ::RSpec::Expectations::PositiveExpectationHandler.handle_matcher(self, matcher, message, &block)
46
+ end
47
+
48
+ def should_not(matcher=nil, message=nil, &block)
49
+ ::RSpec::Expectations::Syntax.warn_about_should_unless_configured(::Kernel.__method__)
50
+ ::RSpec::Expectations::NegativeExpectationHandler.handle_matcher(self, matcher, message, &block)
51
+ end
52
+ end
53
+ end
54
+
55
+ # @api private
56
+ # Disables the `should` syntax.
57
+ def disable_should(syntax_host=default_should_host)
58
+ return unless should_enabled?(syntax_host)
59
+
60
+ syntax_host.module_exec do
61
+ undef should
62
+ undef should_not
63
+ end
64
+ end
65
+
66
+ # @api private
67
+ # Enables the `expect` syntax.
68
+ def enable_expect(syntax_host=::RSpec::Matchers)
69
+ return if expect_enabled?(syntax_host)
70
+
71
+ syntax_host.module_exec do
72
+ def expect(value=::RSpec::Expectations::ExpectationTarget::UndefinedValue, &block)
73
+ ::RSpec::Expectations::ExpectationTarget.for(value, block)
74
+ end
75
+ end
76
+ end
77
+
78
+ # @api private
79
+ # Disables the `expect` syntax.
80
+ def disable_expect(syntax_host=::RSpec::Matchers)
81
+ return unless expect_enabled?(syntax_host)
82
+
83
+ syntax_host.module_exec do
84
+ undef expect
85
+ end
86
+ end
87
+
88
+ # @api private
89
+ # Indicates whether or not the `should` syntax is enabled.
90
+ def should_enabled?(syntax_host=default_should_host)
91
+ syntax_host.method_defined?(:should)
92
+ end
93
+
94
+ # @api private
95
+ # Indicates whether or not the `expect` syntax is enabled.
96
+ def expect_enabled?(syntax_host=::RSpec::Matchers)
97
+ syntax_host.method_defined?(:expect)
98
+ end
99
+ end
100
+ end
101
+ end
102
+
103
+ if defined?(BasicObject)
104
+ # The legacy `:should` syntax adds the following methods directly to
105
+ # `BasicObject` so that they are available off of any object. Note, however,
106
+ # that this syntax does not always play nice with delegate/proxy objects.
107
+ # We recommend you use the non-monkeypatching `:expect` syntax instead.
108
+ class BasicObject
109
+ # @method should
110
+ # Passes if `matcher` returns true. Available on every `Object`.
111
+ # @example
112
+ # actual.should eq expected
113
+ # actual.should match /expression/
114
+ # @param [Matcher]
115
+ # matcher
116
+ # @param [String] message optional message to display when the expectation fails
117
+ # @return [Boolean] true if the expectation succeeds (else raises)
118
+ # @note This is only available when you have enabled the `:should` syntax.
119
+ # @see RSpec::Matchers
120
+
121
+ # @method should_not
122
+ # Passes if `matcher` returns false. Available on every `Object`.
123
+ # @example
124
+ # actual.should_not eq expected
125
+ # @param [Matcher]
126
+ # matcher
127
+ # @param [String] message optional message to display when the expectation fails
128
+ # @return [Boolean] false if the negative expectation succeeds (else raises)
129
+ # @note This is only available when you have enabled the `:should` syntax.
130
+ # @see RSpec::Matchers
131
+ end
132
+ end
@@ -0,0 +1,8 @@
1
+ module RSpec
2
+ module Expectations
3
+ # @private
4
+ module Version
5
+ STRING = '3.6.0'
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,1025 @@
1
+ require 'rspec/support'
2
+ RSpec::Support.require_rspec_support 'matcher_definition'
3
+ RSpec::Support.define_optimized_require_for_rspec(:matchers) { |f| require_relative(f) }
4
+
5
+ %w[
6
+ english_phrasing
7
+ composable
8
+ built_in
9
+ generated_descriptions
10
+ dsl
11
+ matcher_delegator
12
+ aliased_matcher
13
+ expecteds_for_multiple_diffs
14
+ ].each { |file| RSpec::Support.require_rspec_matchers(file) }
15
+
16
+ # RSpec's top level namespace. All of rspec-expectations is contained
17
+ # in the `RSpec::Expectations` and `RSpec::Matchers` namespaces.
18
+ module RSpec
19
+ # RSpec::Matchers provides a number of useful matchers we use to define
20
+ # expectations. Any object that implements the [matcher protocol](Matchers/MatcherProtocol)
21
+ # can be used as a matcher.
22
+ #
23
+ # ## Predicates
24
+ #
25
+ # In addition to matchers that are defined explicitly, RSpec will create
26
+ # custom matchers on the fly for any arbitrary predicate, giving your specs a
27
+ # much more natural language feel.
28
+ #
29
+ # A Ruby predicate is a method that ends with a "?" and returns true or false.
30
+ # Common examples are `empty?`, `nil?`, and `instance_of?`.
31
+ #
32
+ # All you need to do is write `expect(..).to be_` followed by the predicate
33
+ # without the question mark, and RSpec will figure it out from there.
34
+ # For example:
35
+ #
36
+ # expect([]).to be_empty # => [].empty?() | passes
37
+ # expect([]).not_to be_empty # => [].empty?() | fails
38
+ #
39
+ # In addtion to prefixing the predicate matchers with "be_", you can also use "be_a_"
40
+ # and "be_an_", making your specs read much more naturally:
41
+ #
42
+ # expect("a string").to be_an_instance_of(String) # =>"a string".instance_of?(String) # passes
43
+ #
44
+ # expect(3).to be_a_kind_of(Integer) # => 3.kind_of?(Numeric) | passes
45
+ # expect(3).to be_a_kind_of(Numeric) # => 3.kind_of?(Numeric) | passes
46
+ # expect(3).to be_an_instance_of(Integer) # => 3.instance_of?(Integer) | passes
47
+ # expect(3).not_to be_an_instance_of(Numeric) # => 3.instance_of?(Numeric) | fails
48
+ #
49
+ # RSpec will also create custom matchers for predicates like `has_key?`. To
50
+ # use this feature, just state that the object should have_key(:key) and RSpec will
51
+ # call has_key?(:key) on the target. For example:
52
+ #
53
+ # expect(:a => "A").to have_key(:a)
54
+ # expect(:a => "A").to have_key(:b) # fails
55
+ #
56
+ # You can use this feature to invoke any predicate that begins with "has_", whether it is
57
+ # part of the Ruby libraries (like `Hash#has_key?`) or a method you wrote on your own class.
58
+ #
59
+ # Note that RSpec does not provide composable aliases for these dynamic predicate
60
+ # matchers. You can easily define your own aliases, though:
61
+ #
62
+ # RSpec::Matchers.alias_matcher :a_user_who_is_an_admin, :be_an_admin
63
+ # expect(user_list).to include(a_user_who_is_an_admin)
64
+ #
65
+ # ## Alias Matchers
66
+ #
67
+ # With {RSpec::Matchers.alias_matcher}, you can easily create an
68
+ # alternate name for a given matcher.
69
+ #
70
+ # The description will also change according to the new name:
71
+ #
72
+ # RSpec::Matchers.alias_matcher :a_list_that_sums_to, :sum_to
73
+ # sum_to(3).description # => "sum to 3"
74
+ # a_list_that_sums_to(3).description # => "a list that sums to 3"
75
+ #
76
+ # or you can specify a custom description like this:
77
+ #
78
+ # RSpec::Matchers.alias_matcher :a_list_sorted_by, :be_sorted_by do |description|
79
+ # description.sub("be sorted by", "a list sorted by")
80
+ # end
81
+ #
82
+ # be_sorted_by(:age).description # => "be sorted by age"
83
+ # a_list_sorted_by(:age).description # => "a list sorted by age"
84
+ #
85
+ # ## Custom Matchers
86
+ #
87
+ # When you find that none of the stock matchers provide a natural feeling
88
+ # expectation, you can very easily write your own using RSpec's matcher DSL
89
+ # or writing one from scratch.
90
+ #
91
+ # ### Matcher DSL
92
+ #
93
+ # Imagine that you are writing a game in which players can be in various
94
+ # zones on a virtual board. To specify that bob should be in zone 4, you
95
+ # could say:
96
+ #
97
+ # expect(bob.current_zone).to eql(Zone.new("4"))
98
+ #
99
+ # But you might find it more expressive to say:
100
+ #
101
+ # expect(bob).to be_in_zone("4")
102
+ #
103
+ # and/or
104
+ #
105
+ # expect(bob).not_to be_in_zone("3")
106
+ #
107
+ # You can create such a matcher like so:
108
+ #
109
+ # RSpec::Matchers.define :be_in_zone do |zone|
110
+ # match do |player|
111
+ # player.in_zone?(zone)
112
+ # end
113
+ # end
114
+ #
115
+ # This will generate a <tt>be_in_zone</tt> method that returns a matcher
116
+ # with logical default messages for failures. You can override the failure
117
+ # messages and the generated description as follows:
118
+ #
119
+ # RSpec::Matchers.define :be_in_zone do |zone|
120
+ # match do |player|
121
+ # player.in_zone?(zone)
122
+ # end
123
+ #
124
+ # failure_message do |player|
125
+ # # generate and return the appropriate string.
126
+ # end
127
+ #
128
+ # failure_message_when_negated do |player|
129
+ # # generate and return the appropriate string.
130
+ # end
131
+ #
132
+ # description do
133
+ # # generate and return the appropriate string.
134
+ # end
135
+ # end
136
+ #
137
+ # Each of the message-generation methods has access to the block arguments
138
+ # passed to the <tt>create</tt> method (in this case, <tt>zone</tt>). The
139
+ # failure message methods (<tt>failure_message</tt> and
140
+ # <tt>failure_message_when_negated</tt>) are passed the actual value (the
141
+ # receiver of <tt>expect(..)</tt> or <tt>expect(..).not_to</tt>).
142
+ #
143
+ # ### Custom Matcher from scratch
144
+ #
145
+ # You could also write a custom matcher from scratch, as follows:
146
+ #
147
+ # class BeInZone
148
+ # def initialize(expected)
149
+ # @expected = expected
150
+ # end
151
+ #
152
+ # def matches?(target)
153
+ # @target = target
154
+ # @target.current_zone.eql?(Zone.new(@expected))
155
+ # end
156
+ #
157
+ # def failure_message
158
+ # "expected #{@target.inspect} to be in Zone #{@expected}"
159
+ # end
160
+ #
161
+ # def failure_message_when_negated
162
+ # "expected #{@target.inspect} not to be in Zone #{@expected}"
163
+ # end
164
+ # end
165
+ #
166
+ # ... and a method like this:
167
+ #
168
+ # def be_in_zone(expected)
169
+ # BeInZone.new(expected)
170
+ # end
171
+ #
172
+ # And then expose the method to your specs. This is normally done
173
+ # by including the method and the class in a module, which is then
174
+ # included in your spec:
175
+ #
176
+ # module CustomGameMatchers
177
+ # class BeInZone
178
+ # # ...
179
+ # end
180
+ #
181
+ # def be_in_zone(expected)
182
+ # # ...
183
+ # end
184
+ # end
185
+ #
186
+ # describe "Player behaviour" do
187
+ # include CustomGameMatchers
188
+ # # ...
189
+ # end
190
+ #
191
+ # or you can include in globally in a spec_helper.rb file <tt>require</tt>d
192
+ # from your spec file(s):
193
+ #
194
+ # RSpec::configure do |config|
195
+ # config.include(CustomGameMatchers)
196
+ # end
197
+ #
198
+ # ### Making custom matchers composable
199
+ #
200
+ # RSpec's built-in matchers are designed to be composed, in expressions like:
201
+ #
202
+ # expect(["barn", 2.45]).to contain_exactly(
203
+ # a_value_within(0.1).of(2.5),
204
+ # a_string_starting_with("bar")
205
+ # )
206
+ #
207
+ # Custom matchers can easily participate in composed matcher expressions like these.
208
+ # Include {RSpec::Matchers::Composable} in your custom matcher to make it support
209
+ # being composed (matchers defined using the DSL have this included automatically).
210
+ # Within your matcher's `matches?` method (or the `match` block, if using the DSL),
211
+ # use `values_match?(expected, actual)` rather than `expected == actual`.
212
+ # Under the covers, `values_match?` is able to match arbitrary
213
+ # nested data structures containing a mix of both matchers and non-matcher objects.
214
+ # It uses `===` and `==` to perform the matching, considering the values to
215
+ # match if either returns `true`. The `Composable` mixin also provides some helper
216
+ # methods for surfacing the matcher descriptions within your matcher's description
217
+ # or failure messages.
218
+ #
219
+ # RSpec's built-in matchers each have a number of aliases that rephrase the matcher
220
+ # from a verb phrase (such as `be_within`) to a noun phrase (such as `a_value_within`),
221
+ # which reads better when the matcher is passed as an argument in a composed matcher
222
+ # expressions, and also uses the noun-phrase wording in the matcher's `description`,
223
+ # for readable failure messages. You can alias your custom matchers in similar fashion
224
+ # using {RSpec::Matchers.alias_matcher}.
225
+ #
226
+ # ## Negated Matchers
227
+ #
228
+ # Sometimes if you want to test for the opposite using a more descriptive name
229
+ # instead of using `not_to`, you can use {RSpec::Matchers.define_negated_matcher}:
230
+ #
231
+ # RSpec::Matchers.define_negated_matcher :exclude, :include
232
+ # include(1, 2).description # => "include 1 and 2"
233
+ # exclude(1, 2).description # => "exclude 1 and 2"
234
+ #
235
+ # While the most obvious negated form may be to add a `not_` prefix,
236
+ # the failure messages you get with that form can be confusing (e.g.
237
+ # "expected [actual] to not [verb], but did not"). We've found it works
238
+ # best to find a more positive name for the negated form, such as
239
+ # `avoid_changing` rather than `not_change`.
240
+ #
241
+ module Matchers
242
+ extend ::RSpec::Matchers::DSL
243
+
244
+ # @!method self.alias_matcher(new_name, old_name, options={}, &description_override)
245
+ # Extended from {RSpec::Matchers::DSL#alias_matcher}.
246
+
247
+ # @!method self.define(name, &declarations)
248
+ # Extended from {RSpec::Matchers::DSL#define}.
249
+
250
+ # @!method self.define_negated_matcher(negated_name, base_name, &description_override)
251
+ # Extended from {RSpec::Matchers::DSL#define_negated_matcher}.
252
+
253
+ # @method expect
254
+ # Supports `expect(actual).to matcher` syntax by wrapping `actual` in an
255
+ # `ExpectationTarget`.
256
+ # @example
257
+ # expect(actual).to eq(expected)
258
+ # expect(actual).not_to eq(expected)
259
+ # @return [ExpectationTarget]
260
+ # @see ExpectationTarget#to
261
+ # @see ExpectationTarget#not_to
262
+
263
+ # Allows multiple expectations in the provided block to fail, and then
264
+ # aggregates them into a single exception, rather than aborting on the
265
+ # first expectation failure like normal. This allows you to see all
266
+ # failures from an entire set of expectations without splitting each
267
+ # off into its own example (which may slow things down if the example
268
+ # setup is expensive).
269
+ #
270
+ # @param label [String] label for this aggregation block, which will be
271
+ # included in the aggregated exception message.
272
+ # @param metadata [Hash] additional metadata about this failure aggregation
273
+ # block. If multiple expectations fail, it will be exposed from the
274
+ # {Expectations::MultipleExpectationsNotMetError} exception. Mostly
275
+ # intended for internal RSpec use but you can use it as well.
276
+ # @yield Block containing as many expectation as you want. The block is
277
+ # simply yielded to, so you can trust that anything that works outside
278
+ # the block should work within it.
279
+ # @raise [Expectations::MultipleExpectationsNotMetError] raised when
280
+ # multiple expectations fail.
281
+ # @raise [Expectations::ExpectationNotMetError] raised when a single
282
+ # expectation fails.
283
+ # @raise [Exception] other sorts of exceptions will be raised as normal.
284
+ #
285
+ # @example
286
+ # aggregate_failures("verifying response") do
287
+ # expect(response.status).to eq(200)
288
+ # expect(response.headers).to include("Content-Type" => "text/plain")
289
+ # expect(response.body).to include("Success")
290
+ # end
291
+ #
292
+ # @note The implementation of this feature uses a thread-local variable,
293
+ # which means that if you have an expectation failure in another thread,
294
+ # it'll abort like normal.
295
+ def aggregate_failures(label=nil, metadata={}, &block)
296
+ Expectations::FailureAggregator.new(label, metadata).aggregate(&block)
297
+ end
298
+
299
+ # @!macro [attach] alias_matcher
300
+ # @!parse
301
+ # alias $1 $2
302
+
303
+ # Passes if actual is truthy (anything but false or nil)
304
+ def be_truthy
305
+ BuiltIn::BeTruthy.new
306
+ end
307
+ alias_matcher :a_truthy_value, :be_truthy
308
+
309
+ # Passes if actual is falsey (false or nil)
310
+ def be_falsey
311
+ BuiltIn::BeFalsey.new
312
+ end
313
+ alias_matcher :be_falsy, :be_falsey
314
+ alias_matcher :a_falsey_value, :be_falsey
315
+ alias_matcher :a_falsy_value, :be_falsey
316
+
317
+ # Passes if actual is nil
318
+ def be_nil
319
+ BuiltIn::BeNil.new
320
+ end
321
+ alias_matcher :a_nil_value, :be_nil
322
+
323
+ # @example
324
+ # expect(actual).to be_truthy
325
+ # expect(actual).to be_falsey
326
+ # expect(actual).to be_nil
327
+ # expect(actual).to be_[arbitrary_predicate](*args)
328
+ # expect(actual).not_to be_nil
329
+ # expect(actual).not_to be_[arbitrary_predicate](*args)
330
+ #
331
+ # Given true, false, or nil, will pass if actual value is true, false or
332
+ # nil (respectively). Given no args means the caller should satisfy an if
333
+ # condition (to be or not to be).
334
+ #
335
+ # Predicates are any Ruby method that ends in a "?" and returns true or
336
+ # false. Given be_ followed by arbitrary_predicate (without the "?"),
337
+ # RSpec will match convert that into a query against the target object.
338
+ #
339
+ # The arbitrary_predicate feature will handle any predicate prefixed with
340
+ # "be_an_" (e.g. be_an_instance_of), "be_a_" (e.g. be_a_kind_of) or "be_"
341
+ # (e.g. be_empty), letting you choose the prefix that best suits the
342
+ # predicate.
343
+ def be(*args)
344
+ args.empty? ? Matchers::BuiltIn::Be.new : equal(*args)
345
+ end
346
+ alias_matcher :a_value, :be, :klass => AliasedMatcherWithOperatorSupport
347
+
348
+ # passes if target.kind_of?(klass)
349
+ def be_a(klass)
350
+ be_a_kind_of(klass)
351
+ end
352
+ alias_method :be_an, :be_a
353
+
354
+ # Passes if actual.instance_of?(expected)
355
+ #
356
+ # @example
357
+ # expect(5).to be_an_instance_of(Integer)
358
+ # expect(5).not_to be_an_instance_of(Numeric)
359
+ # expect(5).not_to be_an_instance_of(Float)
360
+ def be_an_instance_of(expected)
361
+ BuiltIn::BeAnInstanceOf.new(expected)
362
+ end
363
+ alias_method :be_instance_of, :be_an_instance_of
364
+ alias_matcher :an_instance_of, :be_an_instance_of
365
+
366
+ # Passes if actual.kind_of?(expected)
367
+ #
368
+ # @example
369
+ # expect(5).to be_a_kind_of(Integer)
370
+ # expect(5).to be_a_kind_of(Numeric)
371
+ # expect(5).not_to be_a_kind_of(Float)
372
+ def be_a_kind_of(expected)
373
+ BuiltIn::BeAKindOf.new(expected)
374
+ end
375
+ alias_method :be_kind_of, :be_a_kind_of
376
+ alias_matcher :a_kind_of, :be_a_kind_of
377
+
378
+ # Passes if actual.between?(min, max). Works with any Comparable object,
379
+ # including String, Symbol, Time, or Numeric (Fixnum, Bignum, Integer,
380
+ # Float, Complex, and Rational).
381
+ #
382
+ # By default, `be_between` is inclusive (i.e. passes when given either the max or min value),
383
+ # but you can make it `exclusive` by chaining that off the matcher.
384
+ #
385
+ # @example
386
+ # expect(5).to be_between(1, 10)
387
+ # expect(11).not_to be_between(1, 10)
388
+ # expect(10).not_to be_between(1, 10).exclusive
389
+ def be_between(min, max)
390
+ BuiltIn::BeBetween.new(min, max)
391
+ end
392
+ alias_matcher :a_value_between, :be_between
393
+
394
+ # Passes if actual == expected +/- delta
395
+ #
396
+ # @example
397
+ # expect(result).to be_within(0.5).of(3.0)
398
+ # expect(result).not_to be_within(0.5).of(3.0)
399
+ def be_within(delta)
400
+ BuiltIn::BeWithin.new(delta)
401
+ end
402
+ alias_matcher :a_value_within, :be_within
403
+ alias_matcher :within, :be_within
404
+
405
+ # Applied to a proc, specifies that its execution will cause some value to
406
+ # change.
407
+ #
408
+ # @param [Object] receiver
409
+ # @param [Symbol] message the message to send the receiver
410
+ #
411
+ # You can either pass <tt>receiver</tt> and <tt>message</tt>, or a block,
412
+ # but not both.
413
+ #
414
+ # When passing a block, it must use the `{ ... }` format, not
415
+ # do/end, as `{ ... }` binds to the `change` method, whereas do/end
416
+ # would errantly bind to the `expect(..).to` or `expect(...).not_to` method.
417
+ #
418
+ # You can chain any of the following off of the end to specify details
419
+ # about the change:
420
+ #
421
+ # * `from`
422
+ # * `to`
423
+ #
424
+ # or any one of:
425
+ #
426
+ # * `by`
427
+ # * `by_at_least`
428
+ # * `by_at_most`
429
+ #
430
+ # @example
431
+ # expect {
432
+ # team.add_player(player)
433
+ # }.to change(roster, :count)
434
+ #
435
+ # expect {
436
+ # team.add_player(player)
437
+ # }.to change(roster, :count).by(1)
438
+ #
439
+ # expect {
440
+ # team.add_player(player)
441
+ # }.to change(roster, :count).by_at_least(1)
442
+ #
443
+ # expect {
444
+ # team.add_player(player)
445
+ # }.to change(roster, :count).by_at_most(1)
446
+ #
447
+ # string = "string"
448
+ # expect {
449
+ # string.reverse!
450
+ # }.to change { string }.from("string").to("gnirts")
451
+ #
452
+ # string = "string"
453
+ # expect {
454
+ # string
455
+ # }.not_to change { string }.from("string")
456
+ #
457
+ # expect {
458
+ # person.happy_birthday
459
+ # }.to change(person, :birthday).from(32).to(33)
460
+ #
461
+ # expect {
462
+ # employee.develop_great_new_social_networking_app
463
+ # }.to change(employee, :title).from("Mail Clerk").to("CEO")
464
+ #
465
+ # expect {
466
+ # doctor.leave_office
467
+ # }.to change(doctor, :sign).from(/is in/).to(/is out/)
468
+ #
469
+ # user = User.new(:type => "admin")
470
+ # expect {
471
+ # user.symbolize_type
472
+ # }.to change(user, :type).from(String).to(Symbol)
473
+ #
474
+ # == Notes
475
+ #
476
+ # Evaluates `receiver.message` or `block` before and after it
477
+ # evaluates the block passed to `expect`.
478
+ #
479
+ # `expect( ... ).not_to change` supports the form that specifies `from`
480
+ # (which specifies what you expect the starting, unchanged value to be)
481
+ # but does not support forms with subsequent calls to `by`, `by_at_least`,
482
+ # `by_at_most` or `to`.
483
+ def change(receiver=nil, message=nil, &block)
484
+ BuiltIn::Change.new(receiver, message, &block)
485
+ end
486
+ alias_matcher :a_block_changing, :change
487
+ alias_matcher :changing, :change
488
+
489
+ # Passes if actual contains all of the expected regardless of order.
490
+ # This works for collections. Pass in multiple args and it will only
491
+ # pass if all args are found in collection.
492
+ #
493
+ # @note This is also available using the `=~` operator with `should`,
494
+ # but `=~` is not supported with `expect`.
495
+ #
496
+ # @example
497
+ # expect([1, 2, 3]).to contain_exactly(1, 2, 3)
498
+ # expect([1, 2, 3]).to contain_exactly(1, 3, 2)
499
+ #
500
+ # @see #match_array
501
+ def contain_exactly(*items)
502
+ BuiltIn::ContainExactly.new(items)
503
+ end
504
+ alias_matcher :a_collection_containing_exactly, :contain_exactly
505
+ alias_matcher :containing_exactly, :contain_exactly
506
+
507
+ # Passes if actual covers expected. This works for
508
+ # Ranges. You can also pass in multiple args
509
+ # and it will only pass if all args are found in Range.
510
+ #
511
+ # @example
512
+ # expect(1..10).to cover(5)
513
+ # expect(1..10).to cover(4, 6)
514
+ # expect(1..10).to cover(4, 6, 11) # fails
515
+ # expect(1..10).not_to cover(11)
516
+ # expect(1..10).not_to cover(5) # fails
517
+ #
518
+ # ### Warning:: Ruby >= 1.9 only
519
+ def cover(*values)
520
+ BuiltIn::Cover.new(*values)
521
+ end
522
+ alias_matcher :a_range_covering, :cover
523
+ alias_matcher :covering, :cover
524
+
525
+ # Matches if the actual value ends with the expected value(s). In the case
526
+ # of a string, matches against the last `expected.length` characters of the
527
+ # actual string. In the case of an array, matches against the last
528
+ # `expected.length` elements of the actual array.
529
+ #
530
+ # @example
531
+ # expect("this string").to end_with "string"
532
+ # expect([0, 1, 2, 3, 4]).to end_with 4
533
+ # expect([0, 2, 3, 4, 4]).to end_with 3, 4
534
+ def end_with(*expected)
535
+ BuiltIn::EndWith.new(*expected)
536
+ end
537
+ alias_matcher :a_collection_ending_with, :end_with
538
+ alias_matcher :a_string_ending_with, :end_with
539
+ alias_matcher :ending_with, :end_with
540
+
541
+ # Passes if <tt>actual == expected</tt>.
542
+ #
543
+ # See http://www.ruby-doc.org/core/classes/Object.html#M001057 for more
544
+ # information about equality in Ruby.
545
+ #
546
+ # @example
547
+ # expect(5).to eq(5)
548
+ # expect(5).not_to eq(3)
549
+ def eq(expected)
550
+ BuiltIn::Eq.new(expected)
551
+ end
552
+ alias_matcher :an_object_eq_to, :eq
553
+ alias_matcher :eq_to, :eq
554
+
555
+ # Passes if `actual.eql?(expected)`
556
+ #
557
+ # See http://www.ruby-doc.org/core/classes/Object.html#M001057 for more
558
+ # information about equality in Ruby.
559
+ #
560
+ # @example
561
+ # expect(5).to eql(5)
562
+ # expect(5).not_to eql(3)
563
+ def eql(expected)
564
+ BuiltIn::Eql.new(expected)
565
+ end
566
+ alias_matcher :an_object_eql_to, :eql
567
+ alias_matcher :eql_to, :eql
568
+
569
+ # Passes if <tt>actual.equal?(expected)</tt> (object identity).
570
+ #
571
+ # See http://www.ruby-doc.org/core/classes/Object.html#M001057 for more
572
+ # information about equality in Ruby.
573
+ #
574
+ # @example
575
+ # expect(5).to equal(5) # Integers are equal
576
+ # expect("5").not_to equal("5") # Strings that look the same are not the same object
577
+ def equal(expected)
578
+ BuiltIn::Equal.new(expected)
579
+ end
580
+ alias_matcher :an_object_equal_to, :equal
581
+ alias_matcher :equal_to, :equal
582
+
583
+ # Passes if `actual.exist?` or `actual.exists?`
584
+ #
585
+ # @example
586
+ # expect(File).to exist("path/to/file")
587
+ def exist(*args)
588
+ BuiltIn::Exist.new(*args)
589
+ end
590
+ alias_matcher :an_object_existing, :exist
591
+ alias_matcher :existing, :exist
592
+
593
+ # Passes if actual's attribute values match the expected attributes hash.
594
+ # This works no matter how you define your attribute readers.
595
+ #
596
+ # @example
597
+ # Person = Struct.new(:name, :age)
598
+ # person = Person.new("Bob", 32)
599
+ #
600
+ # expect(person).to have_attributes(:name => "Bob", :age => 32)
601
+ # expect(person).to have_attributes(:name => a_string_starting_with("B"), :age => (a_value > 30) )
602
+ #
603
+ # @note It will fail if actual doesn't respond to any of the expected attributes.
604
+ #
605
+ # @example
606
+ # expect(person).to have_attributes(:color => "red")
607
+ def have_attributes(expected)
608
+ BuiltIn::HaveAttributes.new(expected)
609
+ end
610
+ alias_matcher :an_object_having_attributes, :have_attributes
611
+ alias_matcher :having_attributes, :have_attributes
612
+
613
+ # Passes if actual includes expected. This works for
614
+ # collections and Strings. You can also pass in multiple args
615
+ # and it will only pass if all args are found in collection.
616
+ #
617
+ # @example
618
+ # expect([1,2,3]).to include(3)
619
+ # expect([1,2,3]).to include(2,3)
620
+ # expect([1,2,3]).to include(2,3,4) # fails
621
+ # expect([1,2,3]).not_to include(4)
622
+ # expect("spread").to include("read")
623
+ # expect("spread").not_to include("red")
624
+ # expect(:a => 1, :b => 2).to include(:a)
625
+ # expect(:a => 1, :b => 2).to include(:a, :b)
626
+ # expect(:a => 1, :b => 2).to include(:a => 1)
627
+ # expect(:a => 1, :b => 2).to include(:b => 2, :a => 1)
628
+ # expect(:a => 1, :b => 2).to include(:c) # fails
629
+ # expect(:a => 1, :b => 2).not_to include(:a => 2)
630
+ def include(*expected)
631
+ BuiltIn::Include.new(*expected)
632
+ end
633
+ alias_matcher :a_collection_including, :include
634
+ alias_matcher :a_string_including, :include
635
+ alias_matcher :a_hash_including, :include
636
+ alias_matcher :including, :include
637
+
638
+ # Passes if the provided matcher passes when checked against all
639
+ # elements of the collection.
640
+ #
641
+ # @example
642
+ # expect([1, 3, 5]).to all be_odd
643
+ # expect([1, 3, 6]).to all be_odd # fails
644
+ #
645
+ # @note The negative form `not_to all` is not supported. Instead
646
+ # use `not_to include` or pass a negative form of a matcher
647
+ # as the argument (e.g. `all exclude(:foo)`).
648
+ #
649
+ # @note You can also use this with compound matchers as well.
650
+ #
651
+ # @example
652
+ # expect([1, 3, 5]).to all( be_odd.and be_an(Integer) )
653
+ def all(expected)
654
+ BuiltIn::All.new(expected)
655
+ end
656
+
657
+ # Given a `Regexp` or `String`, passes if `actual.match(pattern)`
658
+ # Given an arbitrary nested data structure (e.g. arrays and hashes),
659
+ # matches if `expected === actual` || `actual == expected` for each
660
+ # pair of elements.
661
+ #
662
+ # @example
663
+ # expect(email).to match(/^([^\s]+)((?:[-a-z0-9]+\.)+[a-z]{2,})$/i)
664
+ # expect(email).to match("@example.com")
665
+ #
666
+ # @example
667
+ # hash = {
668
+ # :a => {
669
+ # :b => ["foo", 5],
670
+ # :c => { :d => 2.05 }
671
+ # }
672
+ # }
673
+ #
674
+ # expect(hash).to match(
675
+ # :a => {
676
+ # :b => a_collection_containing_exactly(
677
+ # a_string_starting_with("f"),
678
+ # an_instance_of(Integer)
679
+ # ),
680
+ # :c => { :d => (a_value < 3) }
681
+ # }
682
+ # )
683
+ #
684
+ # @note The `match_regex` alias is deprecated and is not recommended for use.
685
+ # It was added in 2.12.1 to facilitate its use from within custom
686
+ # matchers (due to how the custom matcher DSL was evaluated in 2.x,
687
+ # `match` could not be used there), but is no longer needed in 3.x.
688
+ def match(expected)
689
+ BuiltIn::Match.new(expected)
690
+ end
691
+ alias_matcher :match_regex, :match
692
+ alias_matcher :an_object_matching, :match
693
+ alias_matcher :a_string_matching, :match
694
+ alias_matcher :matching, :match
695
+
696
+ # An alternate form of `contain_exactly` that accepts
697
+ # the expected contents as a single array arg rather
698
+ # that splatted out as individual items.
699
+ #
700
+ # @example
701
+ # expect(results).to contain_exactly(1, 2)
702
+ # # is identical to:
703
+ # expect(results).to match_array([1, 2])
704
+ #
705
+ # @see #contain_exactly
706
+ def match_array(items)
707
+ contain_exactly(*items)
708
+ end
709
+
710
+ # With no arg, passes if the block outputs `to_stdout` or `to_stderr`.
711
+ # With a string, passes if the block outputs that specific string `to_stdout` or `to_stderr`.
712
+ # With a regexp or matcher, passes if the block outputs a string `to_stdout` or `to_stderr` that matches.
713
+ #
714
+ # To capture output from any spawned subprocess as well, use `to_stdout_from_any_process` or
715
+ # `to_stderr_from_any_process`. Output from any process that inherits the main process's corresponding
716
+ # standard stream will be captured.
717
+ #
718
+ # @example
719
+ # expect { print 'foo' }.to output.to_stdout
720
+ # expect { print 'foo' }.to output('foo').to_stdout
721
+ # expect { print 'foo' }.to output(/foo/).to_stdout
722
+ #
723
+ # expect { do_something }.to_not output.to_stdout
724
+ #
725
+ # expect { warn('foo') }.to output.to_stderr
726
+ # expect { warn('foo') }.to output('foo').to_stderr
727
+ # expect { warn('foo') }.to output(/foo/).to_stderr
728
+ #
729
+ # expect { do_something }.to_not output.to_stderr
730
+ #
731
+ # expect { system('echo foo') }.to output("foo\n").to_stdout_from_any_process
732
+ # expect { system('echo foo', out: :err) }.to output("foo\n").to_stderr_from_any_process
733
+ #
734
+ # @note `to_stdout` and `to_stderr` work by temporarily replacing `$stdout` or `$stderr`,
735
+ # so they're not able to intercept stream output that explicitly uses `STDOUT`/`STDERR`
736
+ # or that uses a reference to `$stdout`/`$stderr` that was stored before the
737
+ # matcher was used.
738
+ # @note `to_stdout_from_any_process` and `to_stderr_from_any_process` use Tempfiles, and
739
+ # are thus significantly (~30x) slower than `to_stdout` and `to_stderr`.
740
+ def output(expected=nil)
741
+ BuiltIn::Output.new(expected)
742
+ end
743
+ alias_matcher :a_block_outputting, :output
744
+
745
+ # With no args, matches if any error is raised.
746
+ # With a named error, matches only if that specific error is raised.
747
+ # With a named error and messsage specified as a String, matches only if both match.
748
+ # With a named error and messsage specified as a Regexp, matches only if both match.
749
+ # Pass an optional block to perform extra verifications on the exception matched
750
+ #
751
+ # @example
752
+ # expect { do_something_risky }.to raise_error
753
+ # expect { do_something_risky }.to raise_error(PoorRiskDecisionError)
754
+ # expect { do_something_risky }.to raise_error(PoorRiskDecisionError) { |error| expect(error.data).to eq 42 }
755
+ # expect { do_something_risky }.to raise_error(PoorRiskDecisionError, "that was too risky")
756
+ # expect { do_something_risky }.to raise_error(PoorRiskDecisionError, /oo ri/)
757
+ #
758
+ # expect { do_something_risky }.not_to raise_error
759
+ def raise_error(error=nil, message=nil, &block)
760
+ BuiltIn::RaiseError.new(error, message, &block)
761
+ end
762
+ alias_method :raise_exception, :raise_error
763
+
764
+ alias_matcher :a_block_raising, :raise_error do |desc|
765
+ desc.sub("raise", "a block raising")
766
+ end
767
+
768
+ alias_matcher :raising, :raise_error do |desc|
769
+ desc.sub("raise", "raising")
770
+ end
771
+
772
+ # Matches if the target object responds to all of the names
773
+ # provided. Names can be Strings or Symbols.
774
+ #
775
+ # @example
776
+ # expect("string").to respond_to(:length)
777
+ #
778
+ def respond_to(*names)
779
+ BuiltIn::RespondTo.new(*names)
780
+ end
781
+ alias_matcher :an_object_responding_to, :respond_to
782
+ alias_matcher :responding_to, :respond_to
783
+
784
+ # Passes if the submitted block returns true. Yields target to the
785
+ # block.
786
+ #
787
+ # Generally speaking, this should be thought of as a last resort when
788
+ # you can't find any other way to specify the behaviour you wish to
789
+ # specify.
790
+ #
791
+ # If you do find yourself in such a situation, you could always write
792
+ # a custom matcher, which would likely make your specs more expressive.
793
+ #
794
+ # @param description [String] optional description to be used for this matcher.
795
+ #
796
+ # @example
797
+ # expect(5).to satisfy { |n| n > 3 }
798
+ # expect(5).to satisfy("be greater than 3") { |n| n > 3 }
799
+ def satisfy(description=nil, &block)
800
+ BuiltIn::Satisfy.new(description, &block)
801
+ end
802
+ alias_matcher :an_object_satisfying, :satisfy
803
+ alias_matcher :satisfying, :satisfy
804
+
805
+ # Matches if the actual value starts with the expected value(s). In the
806
+ # case of a string, matches against the first `expected.length` characters
807
+ # of the actual string. In the case of an array, matches against the first
808
+ # `expected.length` elements of the actual array.
809
+ #
810
+ # @example
811
+ # expect("this string").to start_with "this s"
812
+ # expect([0, 1, 2, 3, 4]).to start_with 0
813
+ # expect([0, 2, 3, 4, 4]).to start_with 0, 1
814
+ def start_with(*expected)
815
+ BuiltIn::StartWith.new(*expected)
816
+ end
817
+ alias_matcher :a_collection_starting_with, :start_with
818
+ alias_matcher :a_string_starting_with, :start_with
819
+ alias_matcher :starting_with, :start_with
820
+
821
+ # Given no argument, matches if a proc throws any Symbol.
822
+ #
823
+ # Given a Symbol, matches if the given proc throws the specified Symbol.
824
+ #
825
+ # Given a Symbol and an arg, matches if the given proc throws the
826
+ # specified Symbol with the specified arg.
827
+ #
828
+ # @example
829
+ # expect { do_something_risky }.to throw_symbol
830
+ # expect { do_something_risky }.to throw_symbol(:that_was_risky)
831
+ # expect { do_something_risky }.to throw_symbol(:that_was_risky, 'culprit')
832
+ #
833
+ # expect { do_something_risky }.not_to throw_symbol
834
+ # expect { do_something_risky }.not_to throw_symbol(:that_was_risky)
835
+ # expect { do_something_risky }.not_to throw_symbol(:that_was_risky, 'culprit')
836
+ def throw_symbol(expected_symbol=nil, expected_arg=nil)
837
+ BuiltIn::ThrowSymbol.new(expected_symbol, expected_arg)
838
+ end
839
+
840
+ alias_matcher :a_block_throwing, :throw_symbol do |desc|
841
+ desc.sub("throw", "a block throwing")
842
+ end
843
+
844
+ alias_matcher :throwing, :throw_symbol do |desc|
845
+ desc.sub("throw", "throwing")
846
+ end
847
+
848
+ # Passes if the method called in the expect block yields, regardless
849
+ # of whether or not arguments are yielded.
850
+ #
851
+ # @example
852
+ # expect { |b| 5.tap(&b) }.to yield_control
853
+ # expect { |b| "a".to_sym(&b) }.not_to yield_control
854
+ #
855
+ # @note Your expect block must accept a parameter and pass it on to
856
+ # the method-under-test as a block.
857
+ def yield_control
858
+ BuiltIn::YieldControl.new
859
+ end
860
+ alias_matcher :a_block_yielding_control, :yield_control
861
+ alias_matcher :yielding_control, :yield_control
862
+
863
+ # Passes if the method called in the expect block yields with
864
+ # no arguments. Fails if it does not yield, or yields with arguments.
865
+ #
866
+ # @example
867
+ # expect { |b| User.transaction(&b) }.to yield_with_no_args
868
+ # expect { |b| 5.tap(&b) }.not_to yield_with_no_args # because it yields with `5`
869
+ # expect { |b| "a".to_sym(&b) }.not_to yield_with_no_args # because it does not yield
870
+ #
871
+ # @note Your expect block must accept a parameter and pass it on to
872
+ # the method-under-test as a block.
873
+ # @note This matcher is not designed for use with methods that yield
874
+ # multiple times.
875
+ def yield_with_no_args
876
+ BuiltIn::YieldWithNoArgs.new
877
+ end
878
+ alias_matcher :a_block_yielding_with_no_args, :yield_with_no_args
879
+ alias_matcher :yielding_with_no_args, :yield_with_no_args
880
+
881
+ # Given no arguments, matches if the method called in the expect
882
+ # block yields with arguments (regardless of what they are or how
883
+ # many there are).
884
+ #
885
+ # Given arguments, matches if the method called in the expect block
886
+ # yields with arguments that match the given arguments.
887
+ #
888
+ # Argument matching is done using `===` (the case match operator)
889
+ # and `==`. If the expected and actual arguments match with either
890
+ # operator, the matcher will pass.
891
+ #
892
+ # @example
893
+ # expect { |b| 5.tap(&b) }.to yield_with_args # because #tap yields an arg
894
+ # expect { |b| 5.tap(&b) }.to yield_with_args(5) # because 5 == 5
895
+ # expect { |b| 5.tap(&b) }.to yield_with_args(Integer) # because Integer === 5
896
+ # expect { |b| File.open("f.txt", &b) }.to yield_with_args(/txt/) # because /txt/ === "f.txt"
897
+ #
898
+ # expect { |b| User.transaction(&b) }.not_to yield_with_args # because it yields no args
899
+ # expect { |b| 5.tap(&b) }.not_to yield_with_args(1, 2, 3)
900
+ #
901
+ # @note Your expect block must accept a parameter and pass it on to
902
+ # the method-under-test as a block.
903
+ # @note This matcher is not designed for use with methods that yield
904
+ # multiple times.
905
+ def yield_with_args(*args)
906
+ BuiltIn::YieldWithArgs.new(*args)
907
+ end
908
+ alias_matcher :a_block_yielding_with_args, :yield_with_args
909
+ alias_matcher :yielding_with_args, :yield_with_args
910
+
911
+ # Designed for use with methods that repeatedly yield (such as
912
+ # iterators). Passes if the method called in the expect block yields
913
+ # multiple times with arguments matching those given.
914
+ #
915
+ # Argument matching is done using `===` (the case match operator)
916
+ # and `==`. If the expected and actual arguments match with either
917
+ # operator, the matcher will pass.
918
+ #
919
+ # @example
920
+ # expect { |b| [1, 2, 3].each(&b) }.to yield_successive_args(1, 2, 3)
921
+ # expect { |b| { :a => 1, :b => 2 }.each(&b) }.to yield_successive_args([:a, 1], [:b, 2])
922
+ # expect { |b| [1, 2, 3].each(&b) }.not_to yield_successive_args(1, 2)
923
+ #
924
+ # @note Your expect block must accept a parameter and pass it on to
925
+ # the method-under-test as a block.
926
+ def yield_successive_args(*args)
927
+ BuiltIn::YieldSuccessiveArgs.new(*args)
928
+ end
929
+ alias_matcher :a_block_yielding_successive_args, :yield_successive_args
930
+ alias_matcher :yielding_successive_args, :yield_successive_args
931
+
932
+ # Delegates to {RSpec::Expectations.configuration}.
933
+ # This is here because rspec-core's `expect_with` option
934
+ # looks for a `configuration` method on the mixin
935
+ # (`RSpec::Matchers`) to yield to a block.
936
+ # @return [RSpec::Expectations::Configuration] the configuration object
937
+ def self.configuration
938
+ Expectations.configuration
939
+ end
940
+
941
+ private
942
+
943
+ BE_PREDICATE_REGEX = /^(be_(?:an?_)?)(.*)/
944
+ HAS_REGEX = /^(?:have_)(.*)/
945
+ DYNAMIC_MATCHER_REGEX = Regexp.union(BE_PREDICATE_REGEX, HAS_REGEX)
946
+
947
+ def method_missing(method, *args, &block)
948
+ case method.to_s
949
+ when BE_PREDICATE_REGEX
950
+ BuiltIn::BePredicate.new(method, *args, &block)
951
+ when HAS_REGEX
952
+ BuiltIn::Has.new(method, *args, &block)
953
+ else
954
+ super
955
+ end
956
+ end
957
+
958
+ if RUBY_VERSION.to_f >= 1.9
959
+ def respond_to_missing?(method, *)
960
+ method =~ DYNAMIC_MATCHER_REGEX || super
961
+ end
962
+ else # for 1.8.7
963
+ # :nocov:
964
+ def respond_to?(method, *)
965
+ method = method.to_s
966
+ method =~ DYNAMIC_MATCHER_REGEX || super
967
+ end
968
+ public :respond_to?
969
+ # :nocov:
970
+ end
971
+
972
+ # @api private
973
+ def self.is_a_matcher?(obj)
974
+ return true if ::RSpec::Matchers::BuiltIn::BaseMatcher === obj
975
+ begin
976
+ return false if obj.respond_to?(:i_respond_to_everything_so_im_not_really_a_matcher)
977
+ rescue NoMethodError
978
+ # Some objects, like BasicObject, don't implemented standard
979
+ # reflection methods.
980
+ return false
981
+ end
982
+ return false unless obj.respond_to?(:matches?)
983
+
984
+ obj.respond_to?(:failure_message) ||
985
+ obj.respond_to?(:failure_message_for_should) # support legacy matchers
986
+ end
987
+
988
+ ::RSpec::Support.register_matcher_definition do |obj|
989
+ is_a_matcher?(obj)
990
+ end
991
+
992
+ # @api private
993
+ def self.is_a_describable_matcher?(obj)
994
+ is_a_matcher?(obj) && obj.respond_to?(:description)
995
+ end
996
+
997
+ if RSpec::Support::Ruby.mri? && RUBY_VERSION[0, 3] == '1.9'
998
+ # @api private
999
+ # Note that `included` doesn't work for this because it is triggered
1000
+ # _after_ `RSpec::Matchers` is an ancestor of the inclusion host, rather
1001
+ # than _before_, like `append_features`. It's important we check this before
1002
+ # in order to find the cases where it was already previously included.
1003
+ def self.append_features(mod)
1004
+ return super if mod < self # `mod < self` indicates a re-inclusion.
1005
+
1006
+ subclasses = ObjectSpace.each_object(Class).select { |c| c < mod && c < self }
1007
+ return super unless subclasses.any?
1008
+
1009
+ subclasses.reject! { |s| subclasses.any? { |s2| s < s2 } } # Filter to the root ancestor.
1010
+ subclasses = subclasses.map { |s| "`#{s}`" }.join(", ")
1011
+
1012
+ RSpec.warning "`#{self}` has been included in a superclass (`#{mod}`) " \
1013
+ "after previously being included in subclasses (#{subclasses}), " \
1014
+ "which can trigger infinite recursion from `super` due to an MRI 1.9 bug " \
1015
+ "(https://redmine.ruby-lang.org/issues/3351). To work around this, " \
1016
+ "either upgrade to MRI 2.0+, include a dup of the module (e.g. " \
1017
+ "`include #{self}.dup`), or find a way to include `#{self}` in `#{mod}` " \
1018
+ "before it is included in subclasses (#{subclasses}). See " \
1019
+ "https://github.com/rspec/rspec-expectations/issues/814 for more info"
1020
+
1021
+ super
1022
+ end
1023
+ end
1024
+ end
1025
+ end