fucknumber 0.1.3

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 (451) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +12 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +5 -0
  5. data/Gemfile +4 -0
  6. data/README.md +36 -0
  7. data/Rakefile +6 -0
  8. data/bin/console +14 -0
  9. data/bin/setup +8 -0
  10. data/fucknumber.gemspec +29 -0
  11. data/lib/fucknumber.rb +12 -0
  12. data/lib/fucknumber/version.rb +3 -0
  13. data/vendor/bundle/bin/htmldiff +24 -0
  14. data/vendor/bundle/bin/ldiff +24 -0
  15. data/vendor/bundle/bin/rake +22 -0
  16. data/vendor/bundle/bin/rspec +22 -0
  17. data/vendor/bundle/build_info/diff-lcs-1.3.info +1 -0
  18. data/vendor/bundle/build_info/rake-10.5.0.info +1 -0
  19. data/vendor/bundle/build_info/rspec-3.5.0.info +1 -0
  20. data/vendor/bundle/build_info/rspec-core-3.5.4.info +1 -0
  21. data/vendor/bundle/build_info/rspec-expectations-3.5.0.info +1 -0
  22. data/vendor/bundle/build_info/rspec-mocks-3.5.0.info +1 -0
  23. data/vendor/bundle/build_info/rspec-support-3.5.0.info +1 -0
  24. data/vendor/bundle/cache/diff-lcs-1.3.gem +0 -0
  25. data/vendor/bundle/cache/rake-10.5.0.gem +0 -0
  26. data/vendor/bundle/cache/rspec-3.5.0.gem +0 -0
  27. data/vendor/bundle/cache/rspec-core-3.5.4.gem +0 -0
  28. data/vendor/bundle/cache/rspec-expectations-3.5.0.gem +0 -0
  29. data/vendor/bundle/cache/rspec-mocks-3.5.0.gem +0 -0
  30. data/vendor/bundle/cache/rspec-support-3.5.0.gem +0 -0
  31. data/vendor/bundle/gems/diff-lcs-1.3/.rspec +1 -0
  32. data/vendor/bundle/gems/diff-lcs-1.3/Code-of-Conduct.md +74 -0
  33. data/vendor/bundle/gems/diff-lcs-1.3/Contributing.md +83 -0
  34. data/vendor/bundle/gems/diff-lcs-1.3/History.md +220 -0
  35. data/vendor/bundle/gems/diff-lcs-1.3/License.md +39 -0
  36. data/vendor/bundle/gems/diff-lcs-1.3/Manifest.txt +37 -0
  37. data/vendor/bundle/gems/diff-lcs-1.3/README.rdoc +84 -0
  38. data/vendor/bundle/gems/diff-lcs-1.3/Rakefile +57 -0
  39. data/vendor/bundle/gems/diff-lcs-1.3/autotest/discover.rb +1 -0
  40. data/vendor/bundle/gems/diff-lcs-1.3/bin/htmldiff +32 -0
  41. data/vendor/bundle/gems/diff-lcs-1.3/bin/ldiff +6 -0
  42. data/vendor/bundle/gems/diff-lcs-1.3/docs/COPYING.txt +339 -0
  43. data/vendor/bundle/gems/diff-lcs-1.3/docs/artistic.txt +127 -0
  44. data/vendor/bundle/gems/diff-lcs-1.3/lib/diff-lcs.rb +3 -0
  45. data/vendor/bundle/gems/diff-lcs-1.3/lib/diff/lcs.rb +725 -0
  46. data/vendor/bundle/gems/diff-lcs-1.3/lib/diff/lcs/array.rb +7 -0
  47. data/vendor/bundle/gems/diff-lcs-1.3/lib/diff/lcs/block.rb +37 -0
  48. data/vendor/bundle/gems/diff-lcs-1.3/lib/diff/lcs/callbacks.rb +322 -0
  49. data/vendor/bundle/gems/diff-lcs-1.3/lib/diff/lcs/change.rb +181 -0
  50. data/vendor/bundle/gems/diff-lcs-1.3/lib/diff/lcs/htmldiff.rb +149 -0
  51. data/vendor/bundle/gems/diff-lcs-1.3/lib/diff/lcs/hunk.rb +276 -0
  52. data/vendor/bundle/gems/diff-lcs-1.3/lib/diff/lcs/internals.rb +307 -0
  53. data/vendor/bundle/gems/diff-lcs-1.3/lib/diff/lcs/ldiff.rb +167 -0
  54. data/vendor/bundle/gems/diff-lcs-1.3/lib/diff/lcs/string.rb +5 -0
  55. data/vendor/bundle/gems/diff-lcs-1.3/spec/change_spec.rb +65 -0
  56. data/vendor/bundle/gems/diff-lcs-1.3/spec/diff_spec.rb +47 -0
  57. data/vendor/bundle/gems/diff-lcs-1.3/spec/fixtures/ds1.csv +50 -0
  58. data/vendor/bundle/gems/diff-lcs-1.3/spec/fixtures/ds2.csv +51 -0
  59. data/vendor/bundle/gems/diff-lcs-1.3/spec/hunk_spec.rb +72 -0
  60. data/vendor/bundle/gems/diff-lcs-1.3/spec/issues_spec.rb +49 -0
  61. data/vendor/bundle/gems/diff-lcs-1.3/spec/lcs_spec.rb +56 -0
  62. data/vendor/bundle/gems/diff-lcs-1.3/spec/ldiff_spec.rb +47 -0
  63. data/vendor/bundle/gems/diff-lcs-1.3/spec/patch_spec.rb +422 -0
  64. data/vendor/bundle/gems/diff-lcs-1.3/spec/sdiff_spec.rb +214 -0
  65. data/vendor/bundle/gems/diff-lcs-1.3/spec/spec_helper.rb +321 -0
  66. data/vendor/bundle/gems/diff-lcs-1.3/spec/traverse_balanced_spec.rb +310 -0
  67. data/vendor/bundle/gems/diff-lcs-1.3/spec/traverse_sequences_spec.rb +139 -0
  68. data/vendor/bundle/gems/rake-10.5.0/.autotest +7 -0
  69. data/vendor/bundle/gems/rake-10.5.0/.rubocop.yml +27 -0
  70. data/vendor/bundle/gems/rake-10.5.0/.togglerc +7 -0
  71. data/vendor/bundle/gems/rake-10.5.0/CONTRIBUTING.rdoc +38 -0
  72. data/vendor/bundle/gems/rake-10.5.0/History.rdoc +659 -0
  73. data/vendor/bundle/gems/rake-10.5.0/MIT-LICENSE +21 -0
  74. data/vendor/bundle/gems/rake-10.5.0/Manifest.txt +166 -0
  75. data/vendor/bundle/gems/rake-10.5.0/README.rdoc +139 -0
  76. data/vendor/bundle/gems/rake-10.5.0/Rakefile +81 -0
  77. data/vendor/bundle/gems/rake-10.5.0/bin/rake +33 -0
  78. data/vendor/bundle/gems/rake-10.5.0/doc/command_line_usage.rdoc +158 -0
  79. data/vendor/bundle/gems/rake-10.5.0/doc/example/Rakefile1 +38 -0
  80. data/vendor/bundle/gems/rake-10.5.0/doc/example/Rakefile2 +35 -0
  81. data/vendor/bundle/gems/rake-10.5.0/doc/example/a.c +6 -0
  82. data/vendor/bundle/gems/rake-10.5.0/doc/example/b.c +6 -0
  83. data/vendor/bundle/gems/rake-10.5.0/doc/example/main.c +11 -0
  84. data/vendor/bundle/gems/rake-10.5.0/doc/glossary.rdoc +42 -0
  85. data/vendor/bundle/gems/rake-10.5.0/doc/jamis.rb +591 -0
  86. data/vendor/bundle/gems/rake-10.5.0/doc/proto_rake.rdoc +127 -0
  87. data/vendor/bundle/gems/rake-10.5.0/doc/rake.1 +141 -0
  88. data/vendor/bundle/gems/rake-10.5.0/doc/rakefile.rdoc +624 -0
  89. data/vendor/bundle/gems/rake-10.5.0/doc/rational.rdoc +151 -0
  90. data/vendor/bundle/gems/rake-10.5.0/doc/release_notes/rake-0.4.14.rdoc +23 -0
  91. data/vendor/bundle/gems/rake-10.5.0/doc/release_notes/rake-0.4.15.rdoc +35 -0
  92. data/vendor/bundle/gems/rake-10.5.0/doc/release_notes/rake-0.5.0.rdoc +53 -0
  93. data/vendor/bundle/gems/rake-10.5.0/doc/release_notes/rake-0.5.3.rdoc +78 -0
  94. data/vendor/bundle/gems/rake-10.5.0/doc/release_notes/rake-0.5.4.rdoc +46 -0
  95. data/vendor/bundle/gems/rake-10.5.0/doc/release_notes/rake-0.6.0.rdoc +141 -0
  96. data/vendor/bundle/gems/rake-10.5.0/doc/release_notes/rake-0.7.0.rdoc +119 -0
  97. data/vendor/bundle/gems/rake-10.5.0/doc/release_notes/rake-0.7.1.rdoc +59 -0
  98. data/vendor/bundle/gems/rake-10.5.0/doc/release_notes/rake-0.7.2.rdoc +121 -0
  99. data/vendor/bundle/gems/rake-10.5.0/doc/release_notes/rake-0.7.3.rdoc +47 -0
  100. data/vendor/bundle/gems/rake-10.5.0/doc/release_notes/rake-0.8.0.rdoc +114 -0
  101. data/vendor/bundle/gems/rake-10.5.0/doc/release_notes/rake-0.8.2.rdoc +165 -0
  102. data/vendor/bundle/gems/rake-10.5.0/doc/release_notes/rake-0.8.3.rdoc +112 -0
  103. data/vendor/bundle/gems/rake-10.5.0/doc/release_notes/rake-0.8.4.rdoc +147 -0
  104. data/vendor/bundle/gems/rake-10.5.0/doc/release_notes/rake-0.8.5.rdoc +53 -0
  105. data/vendor/bundle/gems/rake-10.5.0/doc/release_notes/rake-0.8.6.rdoc +37 -0
  106. data/vendor/bundle/gems/rake-10.5.0/doc/release_notes/rake-0.8.7.rdoc +55 -0
  107. data/vendor/bundle/gems/rake-10.5.0/doc/release_notes/rake-0.9.0.rdoc +112 -0
  108. data/vendor/bundle/gems/rake-10.5.0/doc/release_notes/rake-0.9.1.rdoc +52 -0
  109. data/vendor/bundle/gems/rake-10.5.0/doc/release_notes/rake-0.9.2.2.rdoc +55 -0
  110. data/vendor/bundle/gems/rake-10.5.0/doc/release_notes/rake-0.9.2.rdoc +49 -0
  111. data/vendor/bundle/gems/rake-10.5.0/doc/release_notes/rake-0.9.3.rdoc +102 -0
  112. data/vendor/bundle/gems/rake-10.5.0/doc/release_notes/rake-0.9.4.rdoc +60 -0
  113. data/vendor/bundle/gems/rake-10.5.0/doc/release_notes/rake-0.9.5.rdoc +55 -0
  114. data/vendor/bundle/gems/rake-10.5.0/doc/release_notes/rake-0.9.6.rdoc +64 -0
  115. data/vendor/bundle/gems/rake-10.5.0/doc/release_notes/rake-10.0.0.rdoc +178 -0
  116. data/vendor/bundle/gems/rake-10.5.0/doc/release_notes/rake-10.0.1.rdoc +58 -0
  117. data/vendor/bundle/gems/rake-10.5.0/doc/release_notes/rake-10.0.2.rdoc +53 -0
  118. data/vendor/bundle/gems/rake-10.5.0/doc/release_notes/rake-10.0.3.rdoc +191 -0
  119. data/vendor/bundle/gems/rake-10.5.0/doc/release_notes/rake-10.1.0.rdoc +61 -0
  120. data/vendor/bundle/gems/rake-10.5.0/lib/rake.rb +79 -0
  121. data/vendor/bundle/gems/rake-10.5.0/lib/rake/alt_system.rb +110 -0
  122. data/vendor/bundle/gems/rake-10.5.0/lib/rake/application.rb +790 -0
  123. data/vendor/bundle/gems/rake-10.5.0/lib/rake/backtrace.rb +23 -0
  124. data/vendor/bundle/gems/rake-10.5.0/lib/rake/clean.rb +76 -0
  125. data/vendor/bundle/gems/rake-10.5.0/lib/rake/cloneable.rb +16 -0
  126. data/vendor/bundle/gems/rake-10.5.0/lib/rake/contrib/.document +1 -0
  127. data/vendor/bundle/gems/rake-10.5.0/lib/rake/contrib/compositepublisher.rb +21 -0
  128. data/vendor/bundle/gems/rake-10.5.0/lib/rake/contrib/ftptools.rb +137 -0
  129. data/vendor/bundle/gems/rake-10.5.0/lib/rake/contrib/publisher.rb +81 -0
  130. data/vendor/bundle/gems/rake-10.5.0/lib/rake/contrib/rubyforgepublisher.rb +18 -0
  131. data/vendor/bundle/gems/rake-10.5.0/lib/rake/contrib/sshpublisher.rb +61 -0
  132. data/vendor/bundle/gems/rake-10.5.0/lib/rake/contrib/sys.rb +4 -0
  133. data/vendor/bundle/gems/rake-10.5.0/lib/rake/cpu_counter.rb +125 -0
  134. data/vendor/bundle/gems/rake-10.5.0/lib/rake/default_loader.rb +14 -0
  135. data/vendor/bundle/gems/rake-10.5.0/lib/rake/dsl_definition.rb +201 -0
  136. data/vendor/bundle/gems/rake-10.5.0/lib/rake/early_time.rb +21 -0
  137. data/vendor/bundle/gems/rake-10.5.0/lib/rake/ext/core.rb +25 -0
  138. data/vendor/bundle/gems/rake-10.5.0/lib/rake/ext/module.rb +2 -0
  139. data/vendor/bundle/gems/rake-10.5.0/lib/rake/ext/pathname.rb +25 -0
  140. data/vendor/bundle/gems/rake-10.5.0/lib/rake/ext/string.rb +175 -0
  141. data/vendor/bundle/gems/rake-10.5.0/lib/rake/ext/time.rb +18 -0
  142. data/vendor/bundle/gems/rake-10.5.0/lib/rake/file_creation_task.rb +24 -0
  143. data/vendor/bundle/gems/rake-10.5.0/lib/rake/file_list.rb +428 -0
  144. data/vendor/bundle/gems/rake-10.5.0/lib/rake/file_task.rb +46 -0
  145. data/vendor/bundle/gems/rake-10.5.0/lib/rake/file_utils.rb +128 -0
  146. data/vendor/bundle/gems/rake-10.5.0/lib/rake/file_utils_ext.rb +144 -0
  147. data/vendor/bundle/gems/rake-10.5.0/lib/rake/gempackagetask.rb +4 -0
  148. data/vendor/bundle/gems/rake-10.5.0/lib/rake/invocation_chain.rb +56 -0
  149. data/vendor/bundle/gems/rake-10.5.0/lib/rake/invocation_exception_mixin.rb +16 -0
  150. data/vendor/bundle/gems/rake-10.5.0/lib/rake/late_time.rb +17 -0
  151. data/vendor/bundle/gems/rake-10.5.0/lib/rake/linked_list.rb +103 -0
  152. data/vendor/bundle/gems/rake-10.5.0/lib/rake/loaders/makefile.rb +53 -0
  153. data/vendor/bundle/gems/rake-10.5.0/lib/rake/multi_task.rb +13 -0
  154. data/vendor/bundle/gems/rake-10.5.0/lib/rake/name_space.rb +38 -0
  155. data/vendor/bundle/gems/rake-10.5.0/lib/rake/packagetask.rb +199 -0
  156. data/vendor/bundle/gems/rake-10.5.0/lib/rake/pathmap.rb +3 -0
  157. data/vendor/bundle/gems/rake-10.5.0/lib/rake/phony.rb +15 -0
  158. data/vendor/bundle/gems/rake-10.5.0/lib/rake/private_reader.rb +20 -0
  159. data/vendor/bundle/gems/rake-10.5.0/lib/rake/promise.rb +99 -0
  160. data/vendor/bundle/gems/rake-10.5.0/lib/rake/pseudo_status.rb +29 -0
  161. data/vendor/bundle/gems/rake-10.5.0/lib/rake/rake_module.rb +38 -0
  162. data/vendor/bundle/gems/rake-10.5.0/lib/rake/rake_test_loader.rb +22 -0
  163. data/vendor/bundle/gems/rake-10.5.0/lib/rake/rdoctask.rb +4 -0
  164. data/vendor/bundle/gems/rake-10.5.0/lib/rake/ruby182_test_unit_fix.rb +29 -0
  165. data/vendor/bundle/gems/rake-10.5.0/lib/rake/rule_recursion_overflow_error.rb +20 -0
  166. data/vendor/bundle/gems/rake-10.5.0/lib/rake/runtest.rb +27 -0
  167. data/vendor/bundle/gems/rake-10.5.0/lib/rake/scope.rb +42 -0
  168. data/vendor/bundle/gems/rake-10.5.0/lib/rake/task.rb +383 -0
  169. data/vendor/bundle/gems/rake-10.5.0/lib/rake/task_argument_error.rb +7 -0
  170. data/vendor/bundle/gems/rake-10.5.0/lib/rake/task_arguments.rb +98 -0
  171. data/vendor/bundle/gems/rake-10.5.0/lib/rake/task_manager.rb +307 -0
  172. data/vendor/bundle/gems/rake-10.5.0/lib/rake/tasklib.rb +24 -0
  173. data/vendor/bundle/gems/rake-10.5.0/lib/rake/testtask.rb +213 -0
  174. data/vendor/bundle/gems/rake-10.5.0/lib/rake/thread_history_display.rb +48 -0
  175. data/vendor/bundle/gems/rake-10.5.0/lib/rake/thread_pool.rb +164 -0
  176. data/vendor/bundle/gems/rake-10.5.0/lib/rake/trace_output.rb +22 -0
  177. data/vendor/bundle/gems/rake-10.5.0/lib/rake/version.rb +7 -0
  178. data/vendor/bundle/gems/rake-10.5.0/lib/rake/win32.rb +56 -0
  179. data/vendor/bundle/gems/rake-10.5.0/rakelib/publish.rake +20 -0
  180. data/vendor/bundle/gems/rake-10.5.0/rakelib/test_times.rake +25 -0
  181. data/vendor/bundle/gems/rake-10.5.0/test/file_creation.rb +34 -0
  182. data/vendor/bundle/gems/rake-10.5.0/test/helper.rb +129 -0
  183. data/vendor/bundle/gems/rake-10.5.0/test/support/rakefile_definitions.rb +478 -0
  184. data/vendor/bundle/gems/rake-10.5.0/test/support/ruby_runner.rb +34 -0
  185. data/vendor/bundle/gems/rake-10.5.0/test/test_private_reader.rb +42 -0
  186. data/vendor/bundle/gems/rake-10.5.0/test/test_rake.rb +40 -0
  187. data/vendor/bundle/gems/rake-10.5.0/test/test_rake_application.rb +643 -0
  188. data/vendor/bundle/gems/rake-10.5.0/test/test_rake_application_options.rb +468 -0
  189. data/vendor/bundle/gems/rake-10.5.0/test/test_rake_backtrace.rb +119 -0
  190. data/vendor/bundle/gems/rake-10.5.0/test/test_rake_clean.rb +61 -0
  191. data/vendor/bundle/gems/rake-10.5.0/test/test_rake_cpu_counter.rb +68 -0
  192. data/vendor/bundle/gems/rake-10.5.0/test/test_rake_definitions.rb +84 -0
  193. data/vendor/bundle/gems/rake-10.5.0/test/test_rake_directory_task.rb +76 -0
  194. data/vendor/bundle/gems/rake-10.5.0/test/test_rake_dsl.rb +40 -0
  195. data/vendor/bundle/gems/rake-10.5.0/test/test_rake_early_time.rb +31 -0
  196. data/vendor/bundle/gems/rake-10.5.0/test/test_rake_extension.rb +59 -0
  197. data/vendor/bundle/gems/rake-10.5.0/test/test_rake_file_creation_task.rb +56 -0
  198. data/vendor/bundle/gems/rake-10.5.0/test/test_rake_file_list.rb +670 -0
  199. data/vendor/bundle/gems/rake-10.5.0/test/test_rake_file_list_path_map.rb +8 -0
  200. data/vendor/bundle/gems/rake-10.5.0/test/test_rake_file_task.rb +197 -0
  201. data/vendor/bundle/gems/rake-10.5.0/test/test_rake_file_utils.rb +314 -0
  202. data/vendor/bundle/gems/rake-10.5.0/test/test_rake_ftp_file.rb +74 -0
  203. data/vendor/bundle/gems/rake-10.5.0/test/test_rake_functional.rb +482 -0
  204. data/vendor/bundle/gems/rake-10.5.0/test/test_rake_invocation_chain.rb +64 -0
  205. data/vendor/bundle/gems/rake-10.5.0/test/test_rake_late_time.rb +18 -0
  206. data/vendor/bundle/gems/rake-10.5.0/test/test_rake_linked_list.rb +84 -0
  207. data/vendor/bundle/gems/rake-10.5.0/test/test_rake_makefile_loader.rb +46 -0
  208. data/vendor/bundle/gems/rake-10.5.0/test/test_rake_multi_task.rb +64 -0
  209. data/vendor/bundle/gems/rake-10.5.0/test/test_rake_name_space.rb +57 -0
  210. data/vendor/bundle/gems/rake-10.5.0/test/test_rake_package_task.rb +79 -0
  211. data/vendor/bundle/gems/rake-10.5.0/test/test_rake_path_map.rb +168 -0
  212. data/vendor/bundle/gems/rake-10.5.0/test/test_rake_path_map_explode.rb +34 -0
  213. data/vendor/bundle/gems/rake-10.5.0/test/test_rake_path_map_partial.rb +18 -0
  214. data/vendor/bundle/gems/rake-10.5.0/test/test_rake_pathname_extensions.rb +15 -0
  215. data/vendor/bundle/gems/rake-10.5.0/test/test_rake_pseudo_status.rb +21 -0
  216. data/vendor/bundle/gems/rake-10.5.0/test/test_rake_rake_test_loader.rb +20 -0
  217. data/vendor/bundle/gems/rake-10.5.0/test/test_rake_reduce_compat.rb +26 -0
  218. data/vendor/bundle/gems/rake-10.5.0/test/test_rake_require.rb +40 -0
  219. data/vendor/bundle/gems/rake-10.5.0/test/test_rake_rules.rb +388 -0
  220. data/vendor/bundle/gems/rake-10.5.0/test/test_rake_scope.rb +44 -0
  221. data/vendor/bundle/gems/rake-10.5.0/test/test_rake_task.rb +393 -0
  222. data/vendor/bundle/gems/rake-10.5.0/test/test_rake_task_argument_parsing.rb +119 -0
  223. data/vendor/bundle/gems/rake-10.5.0/test/test_rake_task_arguments.rb +127 -0
  224. data/vendor/bundle/gems/rake-10.5.0/test/test_rake_task_lib.rb +9 -0
  225. data/vendor/bundle/gems/rake-10.5.0/test/test_rake_task_manager.rb +178 -0
  226. data/vendor/bundle/gems/rake-10.5.0/test/test_rake_task_manager_argument_resolution.rb +19 -0
  227. data/vendor/bundle/gems/rake-10.5.0/test/test_rake_task_with_arguments.rb +172 -0
  228. data/vendor/bundle/gems/rake-10.5.0/test/test_rake_test_task.rb +146 -0
  229. data/vendor/bundle/gems/rake-10.5.0/test/test_rake_thread_pool.rb +145 -0
  230. data/vendor/bundle/gems/rake-10.5.0/test/test_rake_top_level_functions.rb +71 -0
  231. data/vendor/bundle/gems/rake-10.5.0/test/test_rake_win32.rb +72 -0
  232. data/vendor/bundle/gems/rake-10.5.0/test/test_thread_history_display.rb +101 -0
  233. data/vendor/bundle/gems/rake-10.5.0/test/test_trace_output.rb +52 -0
  234. data/vendor/bundle/gems/rspec-3.5.0/LICENSE.md +27 -0
  235. data/vendor/bundle/gems/rspec-3.5.0/README.md +39 -0
  236. data/vendor/bundle/gems/rspec-3.5.0/lib/rspec.rb +3 -0
  237. data/vendor/bundle/gems/rspec-3.5.0/lib/rspec/version.rb +5 -0
  238. data/vendor/bundle/gems/rspec-core-3.5.4/.document +5 -0
  239. data/vendor/bundle/gems/rspec-core-3.5.4/.yardopts +8 -0
  240. data/vendor/bundle/gems/rspec-core-3.5.4/Changelog.md +2102 -0
  241. data/vendor/bundle/gems/rspec-core-3.5.4/LICENSE.md +26 -0
  242. data/vendor/bundle/gems/rspec-core-3.5.4/README.md +384 -0
  243. data/vendor/bundle/gems/rspec-core-3.5.4/exe/rspec +4 -0
  244. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/autorun.rb +3 -0
  245. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core.rb +185 -0
  246. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core/backtrace_formatter.rb +65 -0
  247. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core/bisect/coordinator.rb +66 -0
  248. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core/bisect/example_minimizer.rb +169 -0
  249. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core/bisect/runner.rb +169 -0
  250. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core/bisect/server.rb +65 -0
  251. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core/configuration.rb +2100 -0
  252. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core/configuration_options.rb +194 -0
  253. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core/drb.rb +111 -0
  254. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core/dsl.rb +98 -0
  255. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core/example.rb +649 -0
  256. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core/example_group.rb +879 -0
  257. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core/example_status_persister.rb +235 -0
  258. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core/filter_manager.rb +231 -0
  259. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core/flat_map.rb +20 -0
  260. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core/formatters.rb +255 -0
  261. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core/formatters/base_formatter.rb +70 -0
  262. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core/formatters/base_text_formatter.rb +77 -0
  263. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core/formatters/bisect_formatter.rb +69 -0
  264. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core/formatters/bisect_progress_formatter.rb +144 -0
  265. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core/formatters/console_codes.rb +65 -0
  266. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core/formatters/deprecation_formatter.rb +223 -0
  267. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core/formatters/documentation_formatter.rb +69 -0
  268. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core/formatters/exception_presenter.rb +491 -0
  269. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core/formatters/fallback_message_formatter.rb +28 -0
  270. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core/formatters/helpers.rb +110 -0
  271. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core/formatters/html_formatter.rb +151 -0
  272. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core/formatters/html_printer.rb +414 -0
  273. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core/formatters/html_snippet_extractor.rb +116 -0
  274. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core/formatters/json_formatter.rb +96 -0
  275. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core/formatters/profile_formatter.rb +68 -0
  276. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core/formatters/progress_formatter.rb +28 -0
  277. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core/formatters/protocol.rb +181 -0
  278. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core/formatters/snippet_extractor.rb +136 -0
  279. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core/hooks.rb +624 -0
  280. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core/invocations.rb +67 -0
  281. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core/memoized_helpers.rb +532 -0
  282. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core/metadata.rb +499 -0
  283. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core/metadata_filter.rb +243 -0
  284. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core/minitest_assertions_adapter.rb +31 -0
  285. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core/mocking_adapters/flexmock.rb +31 -0
  286. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core/mocking_adapters/mocha.rb +57 -0
  287. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core/mocking_adapters/null.rb +14 -0
  288. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core/mocking_adapters/rr.rb +31 -0
  289. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core/mocking_adapters/rspec.rb +32 -0
  290. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core/notifications.rb +498 -0
  291. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core/option_parser.rb +289 -0
  292. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core/ordering.rb +158 -0
  293. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core/pending.rb +165 -0
  294. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core/profiler.rb +32 -0
  295. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core/project_initializer.rb +48 -0
  296. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core/project_initializer/.rspec +2 -0
  297. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core/project_initializer/spec/spec_helper.rb +103 -0
  298. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core/rake_task.rb +168 -0
  299. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core/reporter.rb +248 -0
  300. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core/ruby_project.rb +53 -0
  301. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core/runner.rb +188 -0
  302. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core/sandbox.rb +37 -0
  303. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core/set.rb +49 -0
  304. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core/shared_context.rb +55 -0
  305. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core/shared_example_group.rb +247 -0
  306. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core/shell_escape.rb +49 -0
  307. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core/source.rb +86 -0
  308. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core/source/location.rb +13 -0
  309. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core/source/node.rb +93 -0
  310. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core/source/syntax_highlighter.rb +71 -0
  311. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core/source/token.rb +87 -0
  312. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core/test_unit_assertions_adapter.rb +30 -0
  313. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core/version.rb +9 -0
  314. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core/warnings.rb +40 -0
  315. data/vendor/bundle/gems/rspec-core-3.5.4/lib/rspec/core/world.rb +256 -0
  316. data/vendor/bundle/gems/rspec-expectations-3.5.0/.document +5 -0
  317. data/vendor/bundle/gems/rspec-expectations-3.5.0/.yardopts +6 -0
  318. data/vendor/bundle/gems/rspec-expectations-3.5.0/Changelog.md +1034 -0
  319. data/vendor/bundle/gems/rspec-expectations-3.5.0/LICENSE.md +25 -0
  320. data/vendor/bundle/gems/rspec-expectations-3.5.0/README.md +303 -0
  321. data/vendor/bundle/gems/rspec-expectations-3.5.0/lib/rspec/expectations.rb +81 -0
  322. data/vendor/bundle/gems/rspec-expectations-3.5.0/lib/rspec/expectations/configuration.rb +201 -0
  323. data/vendor/bundle/gems/rspec-expectations-3.5.0/lib/rspec/expectations/expectation_target.rb +127 -0
  324. data/vendor/bundle/gems/rspec-expectations-3.5.0/lib/rspec/expectations/fail_with.rb +31 -0
  325. data/vendor/bundle/gems/rspec-expectations-3.5.0/lib/rspec/expectations/failure_aggregator.rb +194 -0
  326. data/vendor/bundle/gems/rspec-expectations-3.5.0/lib/rspec/expectations/handler.rb +170 -0
  327. data/vendor/bundle/gems/rspec-expectations-3.5.0/lib/rspec/expectations/minitest_integration.rb +58 -0
  328. data/vendor/bundle/gems/rspec-expectations-3.5.0/lib/rspec/expectations/syntax.rb +132 -0
  329. data/vendor/bundle/gems/rspec-expectations-3.5.0/lib/rspec/expectations/version.rb +8 -0
  330. data/vendor/bundle/gems/rspec-expectations-3.5.0/lib/rspec/matchers.rb +1038 -0
  331. data/vendor/bundle/gems/rspec-expectations-3.5.0/lib/rspec/matchers/aliased_matcher.rb +116 -0
  332. data/vendor/bundle/gems/rspec-expectations-3.5.0/lib/rspec/matchers/built_in.rb +52 -0
  333. data/vendor/bundle/gems/rspec-expectations-3.5.0/lib/rspec/matchers/built_in/all.rb +85 -0
  334. data/vendor/bundle/gems/rspec-expectations-3.5.0/lib/rspec/matchers/built_in/base_matcher.rb +181 -0
  335. data/vendor/bundle/gems/rspec-expectations-3.5.0/lib/rspec/matchers/built_in/be.rb +288 -0
  336. data/vendor/bundle/gems/rspec-expectations-3.5.0/lib/rspec/matchers/built_in/be_between.rb +77 -0
  337. data/vendor/bundle/gems/rspec-expectations-3.5.0/lib/rspec/matchers/built_in/be_instance_of.rb +22 -0
  338. data/vendor/bundle/gems/rspec-expectations-3.5.0/lib/rspec/matchers/built_in/be_kind_of.rb +16 -0
  339. data/vendor/bundle/gems/rspec-expectations-3.5.0/lib/rspec/matchers/built_in/be_within.rb +72 -0
  340. data/vendor/bundle/gems/rspec-expectations-3.5.0/lib/rspec/matchers/built_in/change.rb +354 -0
  341. data/vendor/bundle/gems/rspec-expectations-3.5.0/lib/rspec/matchers/built_in/compound.rb +272 -0
  342. data/vendor/bundle/gems/rspec-expectations-3.5.0/lib/rspec/matchers/built_in/contain_exactly.rb +286 -0
  343. data/vendor/bundle/gems/rspec-expectations-3.5.0/lib/rspec/matchers/built_in/cover.rb +24 -0
  344. data/vendor/bundle/gems/rspec-expectations-3.5.0/lib/rspec/matchers/built_in/eq.rb +40 -0
  345. data/vendor/bundle/gems/rspec-expectations-3.5.0/lib/rspec/matchers/built_in/eql.rb +34 -0
  346. data/vendor/bundle/gems/rspec-expectations-3.5.0/lib/rspec/matchers/built_in/equal.rb +81 -0
  347. data/vendor/bundle/gems/rspec-expectations-3.5.0/lib/rspec/matchers/built_in/exist.rb +86 -0
  348. data/vendor/bundle/gems/rspec-expectations-3.5.0/lib/rspec/matchers/built_in/has.rb +103 -0
  349. data/vendor/bundle/gems/rspec-expectations-3.5.0/lib/rspec/matchers/built_in/have_attributes.rb +114 -0
  350. data/vendor/bundle/gems/rspec-expectations-3.5.0/lib/rspec/matchers/built_in/include.rb +143 -0
  351. data/vendor/bundle/gems/rspec-expectations-3.5.0/lib/rspec/matchers/built_in/match.rb +106 -0
  352. data/vendor/bundle/gems/rspec-expectations-3.5.0/lib/rspec/matchers/built_in/operators.rb +128 -0
  353. data/vendor/bundle/gems/rspec-expectations-3.5.0/lib/rspec/matchers/built_in/output.rb +200 -0
  354. data/vendor/bundle/gems/rspec-expectations-3.5.0/lib/rspec/matchers/built_in/raise_error.rb +230 -0
  355. data/vendor/bundle/gems/rspec-expectations-3.5.0/lib/rspec/matchers/built_in/respond_to.rb +165 -0
  356. data/vendor/bundle/gems/rspec-expectations-3.5.0/lib/rspec/matchers/built_in/satisfy.rb +37 -0
  357. data/vendor/bundle/gems/rspec-expectations-3.5.0/lib/rspec/matchers/built_in/start_or_end_with.rb +94 -0
  358. data/vendor/bundle/gems/rspec-expectations-3.5.0/lib/rspec/matchers/built_in/throw_symbol.rb +132 -0
  359. data/vendor/bundle/gems/rspec-expectations-3.5.0/lib/rspec/matchers/built_in/yield.rb +419 -0
  360. data/vendor/bundle/gems/rspec-expectations-3.5.0/lib/rspec/matchers/composable.rb +185 -0
  361. data/vendor/bundle/gems/rspec-expectations-3.5.0/lib/rspec/matchers/dsl.rb +466 -0
  362. data/vendor/bundle/gems/rspec-expectations-3.5.0/lib/rspec/matchers/english_phrasing.rb +58 -0
  363. data/vendor/bundle/gems/rspec-expectations-3.5.0/lib/rspec/matchers/expecteds_for_multiple_diffs.rb +73 -0
  364. data/vendor/bundle/gems/rspec-expectations-3.5.0/lib/rspec/matchers/fail_matchers.rb +42 -0
  365. data/vendor/bundle/gems/rspec-expectations-3.5.0/lib/rspec/matchers/generated_descriptions.rb +42 -0
  366. data/vendor/bundle/gems/rspec-expectations-3.5.0/lib/rspec/matchers/matcher_delegator.rb +35 -0
  367. data/vendor/bundle/gems/rspec-expectations-3.5.0/lib/rspec/matchers/matcher_protocol.rb +99 -0
  368. data/vendor/bundle/gems/rspec-mocks-3.5.0/.document +5 -0
  369. data/vendor/bundle/gems/rspec-mocks-3.5.0/.yardopts +6 -0
  370. data/vendor/bundle/gems/rspec-mocks-3.5.0/Changelog.md +1043 -0
  371. data/vendor/bundle/gems/rspec-mocks-3.5.0/LICENSE.md +25 -0
  372. data/vendor/bundle/gems/rspec-mocks-3.5.0/README.md +445 -0
  373. data/vendor/bundle/gems/rspec-mocks-3.5.0/lib/rspec/mocks.rb +130 -0
  374. data/vendor/bundle/gems/rspec-mocks-3.5.0/lib/rspec/mocks/any_instance.rb +11 -0
  375. data/vendor/bundle/gems/rspec-mocks-3.5.0/lib/rspec/mocks/any_instance/chain.rb +110 -0
  376. data/vendor/bundle/gems/rspec-mocks-3.5.0/lib/rspec/mocks/any_instance/error_generator.rb +31 -0
  377. data/vendor/bundle/gems/rspec-mocks-3.5.0/lib/rspec/mocks/any_instance/expect_chain_chain.rb +35 -0
  378. data/vendor/bundle/gems/rspec-mocks-3.5.0/lib/rspec/mocks/any_instance/expectation_chain.rb +48 -0
  379. data/vendor/bundle/gems/rspec-mocks-3.5.0/lib/rspec/mocks/any_instance/message_chains.rb +83 -0
  380. data/vendor/bundle/gems/rspec-mocks-3.5.0/lib/rspec/mocks/any_instance/proxy.rb +116 -0
  381. data/vendor/bundle/gems/rspec-mocks-3.5.0/lib/rspec/mocks/any_instance/recorder.rb +289 -0
  382. data/vendor/bundle/gems/rspec-mocks-3.5.0/lib/rspec/mocks/any_instance/stub_chain.rb +47 -0
  383. data/vendor/bundle/gems/rspec-mocks-3.5.0/lib/rspec/mocks/any_instance/stub_chain_chain.rb +28 -0
  384. data/vendor/bundle/gems/rspec-mocks-3.5.0/lib/rspec/mocks/argument_list_matcher.rb +100 -0
  385. data/vendor/bundle/gems/rspec-mocks-3.5.0/lib/rspec/mocks/argument_matchers.rb +320 -0
  386. data/vendor/bundle/gems/rspec-mocks-3.5.0/lib/rspec/mocks/configuration.rb +205 -0
  387. data/vendor/bundle/gems/rspec-mocks-3.5.0/lib/rspec/mocks/error_generator.rb +369 -0
  388. data/vendor/bundle/gems/rspec-mocks-3.5.0/lib/rspec/mocks/example_methods.rb +422 -0
  389. data/vendor/bundle/gems/rspec-mocks-3.5.0/lib/rspec/mocks/instance_method_stasher.rb +135 -0
  390. data/vendor/bundle/gems/rspec-mocks-3.5.0/lib/rspec/mocks/marshal_extension.rb +41 -0
  391. data/vendor/bundle/gems/rspec-mocks-3.5.0/lib/rspec/mocks/matchers/expectation_customization.rb +20 -0
  392. data/vendor/bundle/gems/rspec-mocks-3.5.0/lib/rspec/mocks/matchers/have_received.rb +130 -0
  393. data/vendor/bundle/gems/rspec-mocks-3.5.0/lib/rspec/mocks/matchers/receive.rb +132 -0
  394. data/vendor/bundle/gems/rspec-mocks-3.5.0/lib/rspec/mocks/matchers/receive_message_chain.rb +82 -0
  395. data/vendor/bundle/gems/rspec-mocks-3.5.0/lib/rspec/mocks/matchers/receive_messages.rb +77 -0
  396. data/vendor/bundle/gems/rspec-mocks-3.5.0/lib/rspec/mocks/message_chain.rb +87 -0
  397. data/vendor/bundle/gems/rspec-mocks-3.5.0/lib/rspec/mocks/message_expectation.rb +740 -0
  398. data/vendor/bundle/gems/rspec-mocks-3.5.0/lib/rspec/mocks/method_double.rb +287 -0
  399. data/vendor/bundle/gems/rspec-mocks-3.5.0/lib/rspec/mocks/method_reference.rb +202 -0
  400. data/vendor/bundle/gems/rspec-mocks-3.5.0/lib/rspec/mocks/minitest_integration.rb +68 -0
  401. data/vendor/bundle/gems/rspec-mocks-3.5.0/lib/rspec/mocks/mutate_const.rb +335 -0
  402. data/vendor/bundle/gems/rspec-mocks-3.5.0/lib/rspec/mocks/object_reference.rb +149 -0
  403. data/vendor/bundle/gems/rspec-mocks-3.5.0/lib/rspec/mocks/order_group.rb +81 -0
  404. data/vendor/bundle/gems/rspec-mocks-3.5.0/lib/rspec/mocks/proxy.rb +489 -0
  405. data/vendor/bundle/gems/rspec-mocks-3.5.0/lib/rspec/mocks/space.rb +238 -0
  406. data/vendor/bundle/gems/rspec-mocks-3.5.0/lib/rspec/mocks/standalone.rb +3 -0
  407. data/vendor/bundle/gems/rspec-mocks-3.5.0/lib/rspec/mocks/syntax.rb +325 -0
  408. data/vendor/bundle/gems/rspec-mocks-3.5.0/lib/rspec/mocks/targets.rb +124 -0
  409. data/vendor/bundle/gems/rspec-mocks-3.5.0/lib/rspec/mocks/test_double.rb +170 -0
  410. data/vendor/bundle/gems/rspec-mocks-3.5.0/lib/rspec/mocks/verifying_double.rb +129 -0
  411. data/vendor/bundle/gems/rspec-mocks-3.5.0/lib/rspec/mocks/verifying_message_expectation.rb +54 -0
  412. data/vendor/bundle/gems/rspec-mocks-3.5.0/lib/rspec/mocks/verifying_proxy.rb +213 -0
  413. data/vendor/bundle/gems/rspec-mocks-3.5.0/lib/rspec/mocks/version.rb +9 -0
  414. data/vendor/bundle/gems/rspec-support-3.5.0/Changelog.md +192 -0
  415. data/vendor/bundle/gems/rspec-support-3.5.0/LICENSE.md +23 -0
  416. data/vendor/bundle/gems/rspec-support-3.5.0/README.md +40 -0
  417. data/vendor/bundle/gems/rspec-support-3.5.0/lib/rspec/support.rb +139 -0
  418. data/vendor/bundle/gems/rspec-support-3.5.0/lib/rspec/support/caller_filter.rb +83 -0
  419. data/vendor/bundle/gems/rspec-support-3.5.0/lib/rspec/support/comparable_version.rb +46 -0
  420. data/vendor/bundle/gems/rspec-support-3.5.0/lib/rspec/support/differ.rb +215 -0
  421. data/vendor/bundle/gems/rspec-support-3.5.0/lib/rspec/support/directory_maker.rb +63 -0
  422. data/vendor/bundle/gems/rspec-support-3.5.0/lib/rspec/support/encoded_string.rb +165 -0
  423. data/vendor/bundle/gems/rspec-support-3.5.0/lib/rspec/support/fuzzy_matcher.rb +48 -0
  424. data/vendor/bundle/gems/rspec-support-3.5.0/lib/rspec/support/hunk_generator.rb +47 -0
  425. data/vendor/bundle/gems/rspec-support-3.5.0/lib/rspec/support/matcher_definition.rb +42 -0
  426. data/vendor/bundle/gems/rspec-support-3.5.0/lib/rspec/support/method_signature_verifier.rb +392 -0
  427. data/vendor/bundle/gems/rspec-support-3.5.0/lib/rspec/support/mutex.rb +73 -0
  428. data/vendor/bundle/gems/rspec-support-3.5.0/lib/rspec/support/object_formatter.rb +249 -0
  429. data/vendor/bundle/gems/rspec-support-3.5.0/lib/rspec/support/recursive_const_methods.rb +76 -0
  430. data/vendor/bundle/gems/rspec-support-3.5.0/lib/rspec/support/reentrant_mutex.rb +53 -0
  431. data/vendor/bundle/gems/rspec-support-3.5.0/lib/rspec/support/ruby_features.rb +149 -0
  432. data/vendor/bundle/gems/rspec-support-3.5.0/lib/rspec/support/spec.rb +81 -0
  433. data/vendor/bundle/gems/rspec-support-3.5.0/lib/rspec/support/spec/deprecation_helpers.rb +64 -0
  434. data/vendor/bundle/gems/rspec-support-3.5.0/lib/rspec/support/spec/formatting_support.rb +9 -0
  435. data/vendor/bundle/gems/rspec-support-3.5.0/lib/rspec/support/spec/in_sub_process.rb +52 -0
  436. data/vendor/bundle/gems/rspec-support-3.5.0/lib/rspec/support/spec/library_wide_checks.rb +150 -0
  437. data/vendor/bundle/gems/rspec-support-3.5.0/lib/rspec/support/spec/shell_out.rb +82 -0
  438. data/vendor/bundle/gems/rspec-support-3.5.0/lib/rspec/support/spec/stderr_splitter.rb +63 -0
  439. data/vendor/bundle/gems/rspec-support-3.5.0/lib/rspec/support/spec/string_matcher.rb +46 -0
  440. data/vendor/bundle/gems/rspec-support-3.5.0/lib/rspec/support/spec/with_isolated_directory.rb +13 -0
  441. data/vendor/bundle/gems/rspec-support-3.5.0/lib/rspec/support/spec/with_isolated_stderr.rb +13 -0
  442. data/vendor/bundle/gems/rspec-support-3.5.0/lib/rspec/support/version.rb +7 -0
  443. data/vendor/bundle/gems/rspec-support-3.5.0/lib/rspec/support/warnings.rb +39 -0
  444. data/vendor/bundle/specifications/diff-lcs-1.3.gemspec +61 -0
  445. data/vendor/bundle/specifications/rake-10.5.0.gemspec +43 -0
  446. data/vendor/bundle/specifications/rspec-3.5.0.gemspec +42 -0
  447. data/vendor/bundle/specifications/rspec-core-3.5.4.gemspec +62 -0
  448. data/vendor/bundle/specifications/rspec-expectations-3.5.0.gemspec +50 -0
  449. data/vendor/bundle/specifications/rspec-mocks-3.5.0.gemspec +50 -0
  450. data/vendor/bundle/specifications/rspec-support-3.5.0.gemspec +41 -0
  451. metadata +534 -0
@@ -0,0 +1,136 @@
1
+ RSpec::Support.require_rspec_core "source"
2
+
3
+ module RSpec
4
+ module Core
5
+ module Formatters
6
+ # @private
7
+ class SnippetExtractor
8
+ NoSuchFileError = Class.new(StandardError)
9
+ NoSuchLineError = Class.new(StandardError)
10
+
11
+ def self.extract_line_at(file_path, line_number)
12
+ source = source_from_file(file_path)
13
+ line = source.lines[line_number - 1]
14
+ raise NoSuchLineError unless line
15
+ line
16
+ end
17
+
18
+ def self.source_from_file(path)
19
+ raise NoSuchFileError unless File.exist?(path)
20
+ RSpec.world.source_cache.source_from_file(path)
21
+ end
22
+
23
+ if RSpec::Support::RubyFeatures.ripper_supported?
24
+ NoExpressionAtLineError = Class.new(StandardError)
25
+
26
+ attr_reader :source, :beginning_line_number, :max_line_count
27
+
28
+ def self.extract_expression_lines_at(file_path, beginning_line_number, max_line_count=nil)
29
+ if max_line_count == 1
30
+ [extract_line_at(file_path, beginning_line_number)]
31
+ else
32
+ source = source_from_file(file_path)
33
+ new(source, beginning_line_number, max_line_count).expression_lines
34
+ end
35
+ end
36
+
37
+ def initialize(source, beginning_line_number, max_line_count=nil)
38
+ @source = source
39
+ @beginning_line_number = beginning_line_number
40
+ @max_line_count = max_line_count
41
+ end
42
+
43
+ def expression_lines
44
+ line_range = line_range_of_expression
45
+
46
+ if max_line_count && line_range.count > max_line_count
47
+ line_range = (line_range.begin)..(line_range.begin + max_line_count - 1)
48
+ end
49
+
50
+ source.lines[(line_range.begin - 1)..(line_range.end - 1)]
51
+ rescue SyntaxError, NoExpressionAtLineError
52
+ [self.class.extract_line_at(source.path, beginning_line_number)]
53
+ end
54
+
55
+ private
56
+
57
+ def line_range_of_expression
58
+ @line_range_of_expression ||= begin
59
+ line_range = line_range_of_location_nodes_in_expression
60
+ initial_unclosed_tokens = unclosed_tokens_in_line_range(line_range)
61
+ unclosed_tokens = initial_unclosed_tokens
62
+
63
+ until (initial_unclosed_tokens & unclosed_tokens).empty?
64
+ line_range = (line_range.begin)..(line_range.end + 1)
65
+ unclosed_tokens = unclosed_tokens_in_line_range(line_range)
66
+ end
67
+
68
+ line_range
69
+ end
70
+ end
71
+
72
+ def unclosed_tokens_in_line_range(line_range)
73
+ tokens = FlatMap.flat_map(line_range) do |line_number|
74
+ source.tokens_by_line_number[line_number]
75
+ end
76
+
77
+ tokens.each_with_object([]) do |token, unclosed_tokens|
78
+ if token.opening?
79
+ unclosed_tokens << token
80
+ else
81
+ index = unclosed_tokens.rindex do |unclosed_token|
82
+ unclosed_token.closed_by?(token)
83
+ end
84
+ unclosed_tokens.delete_at(index) if index
85
+ end
86
+ end
87
+ end
88
+
89
+ def line_range_of_location_nodes_in_expression
90
+ line_numbers = expression_node.each_with_object(Set.new) do |node, set|
91
+ set << node.location.line if node.location
92
+ end
93
+
94
+ line_numbers.min..line_numbers.max
95
+ end
96
+
97
+ def expression_node
98
+ raise NoExpressionAtLineError if location_nodes_at_beginning_line.empty?
99
+
100
+ @expression_node ||= begin
101
+ common_ancestor_nodes = location_nodes_at_beginning_line.map do |node|
102
+ node.each_ancestor.to_a
103
+ end.reduce(:&)
104
+
105
+ common_ancestor_nodes.find { |node| expression_outmost_node?(node) }
106
+ end
107
+ end
108
+
109
+ def expression_outmost_node?(node)
110
+ return true unless node.parent
111
+ return false if node.type.to_s.start_with?('@')
112
+ ![node, node.parent].all? do |n|
113
+ # See `Ripper::PARSER_EVENTS` for the complete list of sexp types.
114
+ type = n.type.to_s
115
+ type.end_with?('call') || type.start_with?('method_add_')
116
+ end
117
+ end
118
+
119
+ def location_nodes_at_beginning_line
120
+ source.nodes_by_line_number[beginning_line_number]
121
+ end
122
+ else
123
+ # :nocov:
124
+ def self.extract_expression_lines_at(file_path, beginning_line_number, *)
125
+ [extract_line_at(file_path, beginning_line_number)]
126
+ end
127
+ # :nocov:
128
+ end
129
+
130
+ def self.least_indentation_from(lines)
131
+ lines.map { |line| line[/^[ \t]*/] }.min
132
+ end
133
+ end
134
+ end
135
+ end
136
+ end
@@ -0,0 +1,624 @@
1
+ module RSpec
2
+ module Core
3
+ # Provides `before`, `after` and `around` hooks as a means of
4
+ # supporting common setup and teardown. This module is extended
5
+ # onto {ExampleGroup}, making the methods available from any `describe`
6
+ # or `context` block and included in {Configuration}, making them
7
+ # available off of the configuration object to define global setup
8
+ # or teardown logic.
9
+ module Hooks
10
+ # @api public
11
+ #
12
+ # @overload before(&block)
13
+ # @overload before(scope, &block)
14
+ # @param scope [Symbol] `:example`, `:context`, or `:suite`
15
+ # (defaults to `:example`)
16
+ # @overload before(scope, conditions, &block)
17
+ # @param scope [Symbol] `:example`, `:context`, or `:suite`
18
+ # (defaults to `:example`)
19
+ # @param conditions [Hash]
20
+ # constrains this hook to examples matching these conditions e.g.
21
+ # `before(:example, :ui => true) { ... }` will only run with examples
22
+ # or groups declared with `:ui => true`.
23
+ # @overload before(conditions, &block)
24
+ # @param conditions [Hash]
25
+ # constrains this hook to examples matching these conditions e.g.
26
+ # `before(:example, :ui => true) { ... }` will only run with examples
27
+ # or groups declared with `:ui => true`.
28
+ #
29
+ # @see #after
30
+ # @see #around
31
+ # @see ExampleGroup
32
+ # @see SharedContext
33
+ # @see SharedExampleGroup
34
+ # @see Configuration
35
+ #
36
+ # Declare a block of code to be run before each example (using `:example`)
37
+ # or once before any example (using `:context`). These are usually
38
+ # declared directly in the {ExampleGroup} to which they apply, but they
39
+ # can also be shared across multiple groups.
40
+ #
41
+ # You can also use `before(:suite)` to run a block of code before any
42
+ # example groups are run. This should be declared in {RSpec.configure}.
43
+ #
44
+ # Instance variables declared in `before(:example)` or `before(:context)`
45
+ # are accessible within each example.
46
+ #
47
+ # ### Order
48
+ #
49
+ # `before` hooks are stored in three scopes, which are run in order:
50
+ # `:suite`, `:context`, and `:example`. They can also be declared in
51
+ # several different places: `RSpec.configure`, a parent group, the current
52
+ # group. They are run in the following order:
53
+ #
54
+ # before(:suite) # Declared in RSpec.configure.
55
+ # before(:context) # Declared in RSpec.configure.
56
+ # before(:context) # Declared in a parent group.
57
+ # before(:context) # Declared in the current group.
58
+ # before(:example) # Declared in RSpec.configure.
59
+ # before(:example) # Declared in a parent group.
60
+ # before(:example) # Declared in the current group.
61
+ #
62
+ # If more than one `before` is declared within any one scope, they are run
63
+ # in the order in which they are declared.
64
+ #
65
+ # ### Conditions
66
+ #
67
+ # When you add a conditions hash to `before(:example)` or
68
+ # `before(:context)`, RSpec will only apply that hook to groups or
69
+ # examples that match the conditions. e.g.
70
+ #
71
+ # RSpec.configure do |config|
72
+ # config.before(:example, :authorized => true) do
73
+ # log_in_as :authorized_user
74
+ # end
75
+ # end
76
+ #
77
+ # describe Something, :authorized => true do
78
+ # # The before hook will run in before each example in this group.
79
+ # end
80
+ #
81
+ # describe SomethingElse do
82
+ # it "does something", :authorized => true do
83
+ # # The before hook will run before this example.
84
+ # end
85
+ #
86
+ # it "does something else" do
87
+ # # The hook will not run before this example.
88
+ # end
89
+ # end
90
+ #
91
+ # Note that filtered config `:context` hooks can still be applied
92
+ # to individual examples that have matching metadata. Just like
93
+ # Ruby's object model is that every object has a singleton class
94
+ # which has only a single instance, RSpec's model is that every
95
+ # example has a singleton example group containing just the one
96
+ # example.
97
+ #
98
+ # ### Warning: `before(:suite, :with => :conditions)`
99
+ #
100
+ # The conditions hash is used to match against specific examples. Since
101
+ # `before(:suite)` is not run in relation to any specific example or
102
+ # group, conditions passed along with `:suite` are effectively ignored.
103
+ #
104
+ # ### Exceptions
105
+ #
106
+ # When an exception is raised in a `before` block, RSpec skips any
107
+ # subsequent `before` blocks and the example, but runs all of the
108
+ # `after(:example)` and `after(:context)` hooks.
109
+ #
110
+ # ### Warning: implicit before blocks
111
+ #
112
+ # `before` hooks can also be declared in shared contexts which get
113
+ # included implicitly either by you or by extension libraries. Since
114
+ # RSpec runs these in the order in which they are declared within each
115
+ # scope, load order matters, and can lead to confusing results when one
116
+ # before block depends on state that is prepared in another before block
117
+ # that gets run later.
118
+ #
119
+ # ### Warning: `before(:context)`
120
+ #
121
+ # It is very tempting to use `before(:context)` to speed things up, but we
122
+ # recommend that you avoid this as there are a number of gotchas, as well
123
+ # as things that simply don't work.
124
+ #
125
+ # #### Context
126
+ #
127
+ # `before(:context)` is run in an example that is generated to provide
128
+ # group context for the block.
129
+ #
130
+ # #### Instance variables
131
+ #
132
+ # Instance variables declared in `before(:context)` are shared across all
133
+ # the examples in the group. This means that each example can change the
134
+ # state of a shared object, resulting in an ordering dependency that can
135
+ # make it difficult to reason about failures.
136
+ #
137
+ # #### Unsupported RSpec constructs
138
+ #
139
+ # RSpec has several constructs that reset state between each example
140
+ # automatically. These are not intended for use from within
141
+ # `before(:context)`:
142
+ #
143
+ # * `let` declarations
144
+ # * `subject` declarations
145
+ # * Any mocking, stubbing or test double declaration
146
+ #
147
+ # ### other frameworks
148
+ #
149
+ # Mock object frameworks and database transaction managers (like
150
+ # ActiveRecord) are typically designed around the idea of setting up
151
+ # before an example, running that one example, and then tearing down. This
152
+ # means that mocks and stubs can (sometimes) be declared in
153
+ # `before(:context)`, but get torn down before the first real example is
154
+ # ever run.
155
+ #
156
+ # You _can_ create database-backed model objects in a `before(:context)`
157
+ # in rspec-rails, but it will not be wrapped in a transaction for you, so
158
+ # you are on your own to clean up in an `after(:context)` block.
159
+ #
160
+ # @example before(:example) declared in an {ExampleGroup}
161
+ #
162
+ # describe Thing do
163
+ # before(:example) do
164
+ # @thing = Thing.new
165
+ # end
166
+ #
167
+ # it "does something" do
168
+ # # Here you can access @thing.
169
+ # end
170
+ # end
171
+ #
172
+ # @example before(:context) declared in an {ExampleGroup}
173
+ #
174
+ # describe Parser do
175
+ # before(:context) do
176
+ # File.open(file_to_parse, 'w') do |f|
177
+ # f.write <<-CONTENT
178
+ # stuff in the file
179
+ # CONTENT
180
+ # end
181
+ # end
182
+ #
183
+ # it "parses the file" do
184
+ # Parser.parse(file_to_parse)
185
+ # end
186
+ #
187
+ # after(:context) do
188
+ # File.delete(file_to_parse)
189
+ # end
190
+ # end
191
+ #
192
+ # @note The `:example` and `:context` scopes are also available as
193
+ # `:each` and `:all`, respectively. Use whichever you prefer.
194
+ # @note The `:suite` scope is only supported for hooks registered on
195
+ # `RSpec.configuration` since they exist independently of any
196
+ # example or example group.
197
+ def before(*args, &block)
198
+ hooks.register :append, :before, *args, &block
199
+ end
200
+
201
+ alias_method :append_before, :before
202
+
203
+ # Adds `block` to the front of the list of `before` blocks in the same
204
+ # scope (`:example`, `:context`, or `:suite`).
205
+ #
206
+ # See {#before} for scoping semantics.
207
+ def prepend_before(*args, &block)
208
+ hooks.register :prepend, :before, *args, &block
209
+ end
210
+
211
+ # @api public
212
+ # @overload after(&block)
213
+ # @overload after(scope, &block)
214
+ # @param scope [Symbol] `:example`, `:context`, or `:suite` (defaults to
215
+ # `:example`)
216
+ # @overload after(scope, conditions, &block)
217
+ # @param scope [Symbol] `:example`, `:context`, or `:suite` (defaults to
218
+ # `:example`)
219
+ # @param conditions [Hash]
220
+ # constrains this hook to examples matching these conditions e.g.
221
+ # `after(:example, :ui => true) { ... }` will only run with examples
222
+ # or groups declared with `:ui => true`.
223
+ # @overload after(conditions, &block)
224
+ # @param conditions [Hash]
225
+ # constrains this hook to examples matching these conditions e.g.
226
+ # `after(:example, :ui => true) { ... }` will only run with examples
227
+ # or groups declared with `:ui => true`.
228
+ #
229
+ # @see #before
230
+ # @see #around
231
+ # @see ExampleGroup
232
+ # @see SharedContext
233
+ # @see SharedExampleGroup
234
+ # @see Configuration
235
+ #
236
+ # Declare a block of code to be run after each example (using `:example`)
237
+ # or once after all examples n the context (using `:context`). See
238
+ # {#before} for more information about ordering.
239
+ #
240
+ # ### Exceptions
241
+ #
242
+ # `after` hooks are guaranteed to run even when there are exceptions in
243
+ # `before` hooks or examples. When an exception is raised in an after
244
+ # block, the exception is captured for later reporting, and subsequent
245
+ # `after` blocks are run.
246
+ #
247
+ # ### Order
248
+ #
249
+ # `after` hooks are stored in three scopes, which are run in order:
250
+ # `:example`, `:context`, and `:suite`. They can also be declared in
251
+ # several different places: `RSpec.configure`, a parent group, the current
252
+ # group. They are run in the following order:
253
+ #
254
+ # after(:example) # Declared in the current group.
255
+ # after(:example) # Declared in a parent group.
256
+ # after(:example) # Declared in RSpec.configure.
257
+ # after(:context) # Declared in the current group.
258
+ # after(:context) # Declared in a parent group.
259
+ # after(:context) # Declared in RSpec.configure.
260
+ # after(:suite) # Declared in RSpec.configure.
261
+ #
262
+ # This is the reverse of the order in which `before` hooks are run.
263
+ # Similarly, if more than one `after` is declared within any one scope,
264
+ # they are run in reverse order of that in which they are declared.
265
+ #
266
+ # @note The `:example` and `:context` scopes are also available as
267
+ # `:each` and `:all`, respectively. Use whichever you prefer.
268
+ # @note The `:suite` scope is only supported for hooks registered on
269
+ # `RSpec.configuration` since they exist independently of any
270
+ # example or example group.
271
+ def after(*args, &block)
272
+ hooks.register :prepend, :after, *args, &block
273
+ end
274
+
275
+ alias_method :prepend_after, :after
276
+
277
+ # Adds `block` to the back of the list of `after` blocks in the same
278
+ # scope (`:example`, `:context`, or `:suite`).
279
+ #
280
+ # See {#after} for scoping semantics.
281
+ def append_after(*args, &block)
282
+ hooks.register :append, :after, *args, &block
283
+ end
284
+
285
+ # @api public
286
+ # @overload around(&block)
287
+ # @overload around(scope, &block)
288
+ # @param scope [Symbol] `:example` (defaults to `:example`)
289
+ # present for syntax parity with `before` and `after`, but
290
+ # `:example`/`:each` is the only supported value.
291
+ # @overload around(scope, conditions, &block)
292
+ # @param scope [Symbol] `:example` (defaults to `:example`)
293
+ # present for syntax parity with `before` and `after`, but
294
+ # `:example`/`:each` is the only supported value.
295
+ # @param conditions [Hash] constrains this hook to examples matching
296
+ # these conditions e.g. `around(:example, :ui => true) { ... }` will
297
+ # only run with examples or groups declared with `:ui => true`.
298
+ # @overload around(conditions, &block)
299
+ # @param conditions [Hash] constrains this hook to examples matching
300
+ # these conditions e.g. `around(:example, :ui => true) { ... }` will
301
+ # only run with examples or groups declared with `:ui => true`.
302
+ #
303
+ # @yield [Example] the example to run
304
+ #
305
+ # @note the syntax of `around` is similar to that of `before` and `after`
306
+ # but the semantics are quite different. `before` and `after` hooks are
307
+ # run in the context of of the examples with which they are associated,
308
+ # whereas `around` hooks are actually responsible for running the
309
+ # examples. Consequently, `around` hooks do not have direct access to
310
+ # resources that are made available within the examples and their
311
+ # associated `before` and `after` hooks.
312
+ #
313
+ # @note `:example`/`:each` is the only supported scope.
314
+ #
315
+ # Declare a block of code, parts of which will be run before and parts
316
+ # after the example. It is your responsibility to run the example:
317
+ #
318
+ # around(:example) do |ex|
319
+ # # Do some stuff before.
320
+ # ex.run
321
+ # # Do some stuff after.
322
+ # end
323
+ #
324
+ # The yielded example aliases `run` with `call`, which lets you treat it
325
+ # like a `Proc`. This is especially handy when working with libaries
326
+ # that manage their own setup and teardown using a block or proc syntax,
327
+ # e.g.
328
+ #
329
+ # around(:example) {|ex| Database.transaction(&ex)}
330
+ # around(:example) {|ex| FakeFS(&ex)}
331
+ #
332
+ def around(*args, &block)
333
+ hooks.register :prepend, :around, *args, &block
334
+ end
335
+
336
+ # @private
337
+ # Holds the various registered hooks.
338
+ def hooks
339
+ @hooks ||= HookCollections.new(self, FilterableItemRepository::UpdateOptimized)
340
+ end
341
+
342
+ private
343
+
344
+ # @private
345
+ Hook = Struct.new(:block, :options)
346
+
347
+ # @private
348
+ class BeforeHook < Hook
349
+ def run(example)
350
+ example.instance_exec(example, &block)
351
+ end
352
+ end
353
+
354
+ # @private
355
+ class AfterHook < Hook
356
+ def run(example)
357
+ example.instance_exec(example, &block)
358
+ rescue Support::AllExceptionsExceptOnesWeMustNotRescue => ex
359
+ example.set_exception(ex)
360
+ end
361
+ end
362
+
363
+ # @private
364
+ class AfterContextHook < Hook
365
+ def run(example)
366
+ example.instance_exec(example, &block)
367
+ rescue Support::AllExceptionsExceptOnesWeMustNotRescue => e
368
+ RSpec.configuration.reporter.notify_non_example_exception(e, "An error occurred in an `after(:context)` hook.")
369
+ end
370
+ end
371
+
372
+ # @private
373
+ class AroundHook < Hook
374
+ def execute_with(example, procsy)
375
+ example.instance_exec(procsy, &block)
376
+ return if procsy.executed?
377
+ Pending.mark_skipped!(example,
378
+ "#{hook_description} did not execute the example")
379
+ end
380
+
381
+ if Proc.method_defined?(:source_location)
382
+ def hook_description
383
+ "around hook at #{Metadata.relative_path(block.source_location.join(':'))}"
384
+ end
385
+ else # for 1.8.7
386
+ # :nocov:
387
+ def hook_description
388
+ "around hook"
389
+ end
390
+ # :nocov:
391
+ end
392
+ end
393
+
394
+ # @private
395
+ #
396
+ # This provides the primary API used by other parts of rspec-core. By hiding all
397
+ # implementation details behind this facade, it's allowed us to heavily optimize
398
+ # this, so that, for example, hook collection objects are only instantiated when
399
+ # a hook is added. This allows us to avoid many object allocations for the common
400
+ # case of a group having no hooks.
401
+ #
402
+ # This is only possible because this interface provides a "tell, don't ask"-style
403
+ # API, so that callers _tell_ this class what to do with the hooks, rather than
404
+ # asking this class for a list of hooks, and then doing something with them.
405
+ class HookCollections
406
+ def initialize(owner, filterable_item_repo_class)
407
+ @owner = owner
408
+ @filterable_item_repo_class = filterable_item_repo_class
409
+ @before_example_hooks = nil
410
+ @after_example_hooks = nil
411
+ @before_context_hooks = nil
412
+ @after_context_hooks = nil
413
+ @around_example_hooks = nil
414
+ end
415
+
416
+ def register_globals(host, globals)
417
+ parent_groups = host.parent_groups
418
+
419
+ process(host, parent_groups, globals, :before, :example, &:options)
420
+ process(host, parent_groups, globals, :after, :example, &:options)
421
+ process(host, parent_groups, globals, :around, :example, &:options)
422
+
423
+ process(host, parent_groups, globals, :before, :context, &:options)
424
+ process(host, parent_groups, globals, :after, :context, &:options)
425
+ end
426
+
427
+ def register_global_singleton_context_hooks(example, globals)
428
+ parent_groups = example.example_group.parent_groups
429
+
430
+ process(example, parent_groups, globals, :before, :context) { {} }
431
+ process(example, parent_groups, globals, :after, :context) { {} }
432
+ end
433
+
434
+ def register(prepend_or_append, position, *args, &block)
435
+ scope, options = scope_and_options_from(*args)
436
+
437
+ if scope == :suite
438
+ # TODO: consider making this an error in RSpec 4. For SemVer reasons,
439
+ # we are only warning in RSpec 3.
440
+ RSpec.warn_with "WARNING: `#{position}(:suite)` hooks are only supported on " \
441
+ "the RSpec configuration object. This " \
442
+ "`#{position}(:suite)` hook, registered on an example " \
443
+ "group, will be ignored."
444
+ return
445
+ end
446
+
447
+ hook = HOOK_TYPES[position][scope].new(block, options)
448
+ ensure_hooks_initialized_for(position, scope).__send__(prepend_or_append, hook, options)
449
+ end
450
+
451
+ # @private
452
+ #
453
+ # Runs all of the blocks stored with the hook in the context of the
454
+ # example. If no example is provided, just calls the hook directly.
455
+ def run(position, scope, example_or_group)
456
+ return if RSpec.configuration.dry_run?
457
+
458
+ if scope == :context
459
+ run_owned_hooks_for(position, :context, example_or_group)
460
+ else
461
+ case position
462
+ when :before then run_example_hooks_for(example_or_group, :before, :reverse_each)
463
+ when :after then run_example_hooks_for(example_or_group, :after, :each)
464
+ when :around then run_around_example_hooks_for(example_or_group) { yield }
465
+ end
466
+ end
467
+ end
468
+
469
+ SCOPES = [:example, :context]
470
+
471
+ SCOPE_ALIASES = { :each => :example, :all => :context }
472
+
473
+ HOOK_TYPES = {
474
+ :before => Hash.new { BeforeHook },
475
+ :after => Hash.new { AfterHook },
476
+ :around => Hash.new { AroundHook }
477
+ }
478
+
479
+ HOOK_TYPES[:after][:context] = AfterContextHook
480
+
481
+ protected
482
+
483
+ EMPTY_HOOK_ARRAY = [].freeze
484
+
485
+ def matching_hooks_for(position, scope, example_or_group)
486
+ repository = hooks_for(position, scope) { return EMPTY_HOOK_ARRAY }
487
+
488
+ # It would be nice to not have to switch on type here, but
489
+ # we don't want to define `ExampleGroup#metadata` because then
490
+ # `metadata` from within an individual example would return the
491
+ # group's metadata but the user would probably expect it to be
492
+ # the example's metadata.
493
+ metadata = case example_or_group
494
+ when ExampleGroup then example_or_group.class.metadata
495
+ else example_or_group.metadata
496
+ end
497
+
498
+ repository.items_for(metadata)
499
+ end
500
+
501
+ def all_hooks_for(position, scope)
502
+ hooks_for(position, scope) { return EMPTY_HOOK_ARRAY }.items_and_filters.map(&:first)
503
+ end
504
+
505
+ def run_owned_hooks_for(position, scope, example_or_group)
506
+ matching_hooks_for(position, scope, example_or_group).each do |hook|
507
+ hook.run(example_or_group)
508
+ end
509
+ end
510
+
511
+ def processable_hooks_for(position, scope, host)
512
+ if scope == :example
513
+ all_hooks_for(position, scope)
514
+ else
515
+ matching_hooks_for(position, scope, host)
516
+ end
517
+ end
518
+
519
+ private
520
+
521
+ def hooks_for(position, scope)
522
+ if position == :before
523
+ scope == :example ? @before_example_hooks : @before_context_hooks
524
+ elsif position == :after
525
+ scope == :example ? @after_example_hooks : @after_context_hooks
526
+ else # around
527
+ @around_example_hooks
528
+ end || yield
529
+ end
530
+
531
+ def ensure_hooks_initialized_for(position, scope)
532
+ if position == :before
533
+ if scope == :example
534
+ @before_example_hooks ||= @filterable_item_repo_class.new(:all?)
535
+ else
536
+ @before_context_hooks ||= @filterable_item_repo_class.new(:all?)
537
+ end
538
+ elsif position == :after
539
+ if scope == :example
540
+ @after_example_hooks ||= @filterable_item_repo_class.new(:all?)
541
+ else
542
+ @after_context_hooks ||= @filterable_item_repo_class.new(:all?)
543
+ end
544
+ else # around
545
+ @around_example_hooks ||= @filterable_item_repo_class.new(:all?)
546
+ end
547
+ end
548
+
549
+ def process(host, parent_groups, globals, position, scope)
550
+ hooks_to_process = globals.processable_hooks_for(position, scope, host)
551
+ return if hooks_to_process.empty?
552
+
553
+ hooks_to_process -= FlatMap.flat_map(parent_groups) do |group|
554
+ group.hooks.all_hooks_for(position, scope)
555
+ end
556
+ return if hooks_to_process.empty?
557
+
558
+ repository = ensure_hooks_initialized_for(position, scope)
559
+ hooks_to_process.each { |hook| repository.append hook, (yield hook) }
560
+ end
561
+
562
+ def scope_and_options_from(*args)
563
+ return :suite if args.first == :suite
564
+ scope = extract_scope_from(args)
565
+ meta = Metadata.build_hash_from(args, :warn_about_example_group_filtering)
566
+ return scope, meta
567
+ end
568
+
569
+ def extract_scope_from(args)
570
+ if known_scope?(args.first)
571
+ normalized_scope_for(args.shift)
572
+ elsif args.any? { |a| a.is_a?(Symbol) }
573
+ error_message = "You must explicitly give a scope " \
574
+ "(#{SCOPES.join(", ")}) or scope alias " \
575
+ "(#{SCOPE_ALIASES.keys.join(", ")}) when using symbols as " \
576
+ "metadata for a hook."
577
+ raise ArgumentError.new error_message
578
+ else
579
+ :example
580
+ end
581
+ end
582
+
583
+ def known_scope?(scope)
584
+ SCOPES.include?(scope) || SCOPE_ALIASES.keys.include?(scope)
585
+ end
586
+
587
+ def normalized_scope_for(scope)
588
+ SCOPE_ALIASES[scope] || scope
589
+ end
590
+
591
+ def run_example_hooks_for(example, position, each_method)
592
+ owner_parent_groups.__send__(each_method) do |group|
593
+ group.hooks.run_owned_hooks_for(position, :example, example)
594
+ end
595
+ end
596
+
597
+ def run_around_example_hooks_for(example)
598
+ hooks = FlatMap.flat_map(owner_parent_groups) do |group|
599
+ group.hooks.matching_hooks_for(:around, :example, example)
600
+ end
601
+
602
+ return yield if hooks.empty? # exit early to avoid the extra allocation cost of `Example::Procsy`
603
+
604
+ initial_procsy = Example::Procsy.new(example) { yield }
605
+ hooks.inject(initial_procsy) do |procsy, around_hook|
606
+ procsy.wrap { around_hook.execute_with(example, procsy) }
607
+ end.call
608
+ end
609
+
610
+ if respond_to?(:singleton_class) && singleton_class.ancestors.include?(singleton_class)
611
+ def owner_parent_groups
612
+ @owner.parent_groups
613
+ end
614
+ else # Ruby < 2.1 (see https://bugs.ruby-lang.org/issues/8035)
615
+ # :nocov:
616
+ def owner_parent_groups
617
+ @owner_parent_groups ||= [@owner] + @owner.parent_groups
618
+ end
619
+ # :nocov:
620
+ end
621
+ end
622
+ end
623
+ end
624
+ end