facets 2.6.0 → 2.7.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 (321) hide show
  1. data/HISTORY.rdoc +331 -35
  2. data/MANIFEST +685 -826
  3. data/{doc/guide/notes.rd → NOTES} +0 -0
  4. data/README.rdoc +73 -25
  5. data/Rakefile +245 -2
  6. data/TODO +5 -0
  7. data/demo/hook.rd +47 -0
  8. data/demo/scenario_require.rd +9 -0
  9. data/doc/README.more +24 -6
  10. data/doc/manual/about.rb +47 -0
  11. data/doc/manual/annotations.rdoc +60 -0
  12. data/doc/manual/associations.rdoc +55 -0
  13. data/doc/manual/blockups.rdoc +101 -0
  14. data/doc/manual/capsule.rdoc +34 -0
  15. data/doc/manual/command.rdoc +177 -0
  16. data/doc/manual/core.rdoc +37 -0
  17. data/doc/manual/faq.rdoc +32 -0
  18. data/doc/manual/typecast.html +112 -0
  19. data/lib/core/facets.rb +359 -11
  20. data/lib/core/facets/array/combination.rb +3 -3
  21. data/lib/core/facets/array/index.rb +4 -1
  22. data/lib/core/facets/array/permutation.rb +2 -2
  23. data/lib/core/facets/array/product.rb +1 -1
  24. data/lib/core/facets/binding/eval.rb +1 -1
  25. data/lib/core/facets/denumerable.rb +76 -0
  26. data/lib/core/facets/duplicable.rb +34 -0
  27. data/lib/core/facets/enumerable/count.rb +10 -4
  28. data/lib/core/facets/enumerable/defer.rb +77 -0
  29. data/lib/core/facets/enumerable/each_by.rb +1 -1
  30. data/lib/core/facets/enumerable/every.rb +35 -0
  31. data/lib/{more/facets/elementwise.rb → core/facets/enumerable/ewise.rb} +0 -0
  32. data/lib/core/facets/enumerable/filter.rb +25 -0
  33. data/lib/core/facets/enumerable/group_by.rb +1 -1
  34. data/lib/core/facets/enumerable/none.rb +3 -2
  35. data/lib/core/facets/enumerable/one.rb +3 -2
  36. data/lib/core/facets/enumerable/per.rb +61 -0
  37. data/lib/core/facets/exception/raised.rb +14 -0
  38. data/lib/core/facets/integer/odd.rb +5 -1
  39. data/lib/core/facets/kernel/__dir__.rb +13 -3
  40. data/lib/core/facets/kernel/__here__.rb +14 -0
  41. data/lib/core/facets/kernel/__method__.rb +9 -3
  42. data/lib/core/facets/kernel/ask.rb +1 -0
  43. data/lib/core/facets/kernel/equate.rb +13 -0
  44. data/lib/core/facets/kernel/extension.rb +9 -0
  45. data/lib/core/facets/kernel/identical.rb +4 -0
  46. data/lib/core/facets/kernel/instance_exec.rb +2 -1
  47. data/lib/core/facets/kernel/method.rb +49 -0
  48. data/lib/core/facets/kernel/object_send.rb +2 -2
  49. data/lib/core/facets/kernel/{state.rb → object_state.rb} +23 -12
  50. data/lib/core/facets/kernel/require_all.rb +6 -1
  51. data/lib/core/facets/kernel/require_local.rb +8 -1
  52. data/lib/core/facets/kernel/require_relative.rb +52 -0
  53. data/lib/core/facets/kernel/source_location.rb +13 -0
  54. data/lib/core/facets/kernel/tap.rb +13 -6
  55. data/lib/core/facets/module/attr_setter.rb +57 -0
  56. data/lib/core/facets/module/instance_method.rb +24 -0
  57. data/lib/core/facets/module/module_load.rb +60 -44
  58. data/lib/core/facets/module/module_require.rb +1 -0
  59. data/lib/core/facets/nilclass/to_f.rb +1 -1
  60. data/lib/core/facets/objectspace/op_fetch.rb +3 -0
  61. data/lib/core/facets/proc/curry.rb +4 -3
  62. data/lib/core/facets/string/bytes.rb +10 -4
  63. data/lib/core/facets/string/camelcase.rb +6 -5
  64. data/lib/core/facets/string/chars.rb +5 -1
  65. data/lib/core/facets/string/each_char.rb +1 -1
  66. data/lib/core/facets/string/each_word.rb +1 -1
  67. data/lib/core/facets/string/lines.rb +11 -4
  68. data/lib/core/facets/string/start_with.rb +9 -2
  69. data/lib/core/facets/string/unfold.rb +27 -0
  70. data/lib/core/facets/symbol/succ.rb +3 -3
  71. data/lib/core/facets/symbol/thrown.rb +20 -0
  72. data/lib/core/facets/symbol/to_proc.rb +3 -2
  73. data/lib/core/facets/time/to_time.rb +1 -1
  74. data/lib/core/facets/to_hash.rb +41 -100
  75. data/lib/core/facets/unboundmethod/name.rb +20 -23
  76. data/lib/more/facets/ansicode.rb +1 -10
  77. data/lib/more/facets/autoarray.rb +3 -31
  78. data/lib/more/facets/basicobject.rb +73 -0
  79. data/lib/more/facets/blankslate.rb +2 -66
  80. data/lib/{lore → more}/facets/cgi.rb +0 -0
  81. data/lib/more/facets/class_extend.rb +1 -0
  82. data/lib/{lore → more}/facets/continuation.rb +0 -0
  83. data/lib/{lore → more}/facets/date.rb +3 -3
  84. data/lib/more/facets/enumargs.rb +192 -0
  85. data/lib/more/facets/enumerablepass.rb +2 -216
  86. data/lib/more/facets/enumerator.rb +62 -0
  87. data/lib/more/facets/{equatable.rb → equitable.rb} +11 -11
  88. data/lib/more/facets/expirable.rb +13 -41
  89. data/lib/{lore → more}/facets/fileutils.rb +0 -0
  90. data/lib/{lore → more}/facets/fileutils/head.rb +0 -0
  91. data/lib/{lore → more}/facets/fileutils/safe_ln.rb +0 -0
  92. data/lib/{lore → more}/facets/fileutils/slice.rb +0 -0
  93. data/lib/{lore → more}/facets/fileutils/tail.rb +0 -0
  94. data/lib/{lore → more}/facets/fileutils/wc.rb +0 -0
  95. data/lib/{lore → more}/facets/fileutils/whereis.rb +0 -0
  96. data/lib/{lore → more}/facets/fileutils/which.rb +0 -0
  97. data/lib/{lore → more}/facets/getoptlong.rb +0 -0
  98. data/lib/more/facets/hook.rb +2 -29
  99. data/lib/more/facets/inheritor.rb +2 -2
  100. data/lib/more/facets/instance_eval.rb +50 -0
  101. data/lib/more/facets/instance_function.rb +78 -0
  102. data/lib/more/facets/main.rb +20 -15
  103. data/lib/more/facets/memoize.rb +1 -113
  104. data/lib/more/facets/module/attr.rb +83 -0
  105. data/lib/more/facets/module/attr_tester.rb +44 -0
  106. data/lib/more/facets/module/attr_toggler.rb +59 -0
  107. data/lib/more/facets/module/attr_validator.rb +34 -0
  108. data/lib/more/facets/{class_extension.rb → module/class_extend.rb} +21 -13
  109. data/lib/more/facets/once.rb +59 -0
  110. data/lib/more/facets/openmodule.rb +1 -0
  111. data/lib/more/facets/orderedhash.rb +1 -33
  112. data/lib/{lore → more}/facets/ostruct.rb +0 -0
  113. data/lib/more/facets/ostructable.rb +1 -4
  114. data/lib/more/facets/partial.rb +18 -16
  115. data/lib/{lore → more}/facets/pathname.rb +0 -0
  116. data/lib/more/facets/preinitialize.rb +157 -0
  117. data/lib/{lore → more}/facets/rbconfig.rb +0 -0
  118. data/lib/more/facets/recorder.rb +1 -2
  119. data/lib/{lore → more}/facets/set.rb +0 -0
  120. data/lib/{lore → more}/facets/shellwords.rb +0 -0
  121. data/lib/{lore → more}/facets/uri.rb +0 -0
  122. data/lib/{lore → more}/facets/yaml.rb +0 -0
  123. data/lib/{lore → more}/facets/zlib.rb +0 -0
  124. data/meta/loadpath +0 -1
  125. data/meta/sitemap +4 -0
  126. data/meta/version +1 -1
  127. data/test/core/enumerable/test_count.rb +1 -1
  128. data/test/{more/test_filter.rb → core/enumerable/test_defer.rb} +24 -22
  129. data/test/{more/test_elementor.rb → core/enumerable/test_every.rb} +2 -15
  130. data/test/core/enumerable/test_ewise.rb +23 -0
  131. data/test/core/enumerable/test_per.rb +18 -0
  132. data/test/core/enumerable/test_take.rb +13 -0
  133. data/test/core/kernel/test_deepcopy.rb +1 -1
  134. data/test/{more/test_1stclassmethod.rb → core/kernel/test_method.rb} +2 -7
  135. data/test/core/kernel/test_tap.rb +1 -1
  136. data/test/core/proc/test_curry.rb +11 -0
  137. data/test/core/string/test_bytes.rb +1 -1
  138. data/test/core/string/test_camelcase.rb +23 -6
  139. data/test/core/string/test_lines.rb +1 -1
  140. data/test/core/string/test_unfold.rb +14 -0
  141. data/test/{more → core}/test_blank.rb +0 -0
  142. data/test/{more → core}/test_boolean.rb +0 -0
  143. data/test/{more → core}/test_functor.rb +0 -0
  144. data/test/{lore → more}/test_basicobject.rb +0 -0
  145. data/test/more/{test_class_extension.rb → test_class_extend.rb} +6 -6
  146. data/test/{lore → more}/test_continuation.rb +0 -0
  147. data/test/{lore → more}/test_date.rb +0 -0
  148. data/test/more/{test_enumerablepass.rb → test_enumargs.rb} +2 -4
  149. data/test/more/{test_equatable.rb → test_equitable.rb} +2 -2
  150. data/test/more/{test_instantise.rb → test_instance_function.rb} +3 -2
  151. data/test/more/test_memoize.rb +1 -1
  152. data/test/{lore → more}/test_ostruct.rb +0 -0
  153. metadata +865 -1016
  154. data/RELEASE +0 -38
  155. data/doc/README.lore +0 -51
  156. data/doc/log/basic_stats/index.html +0 -39
  157. data/doc/log/changelog.html +0 -648
  158. data/doc/log/changelog.txt +0 -217
  159. data/doc/log/stats/index.html +0 -39
  160. data/doc/log/testlog.txt +0 -278
  161. data/doc/notes/CHANGES +0 -2529
  162. data/doc/rdoc/lore/classes/Array.html +0 -176
  163. data/doc/rdoc/lore/classes/CGI.html +0 -191
  164. data/doc/rdoc/lore/classes/Config.html +0 -135
  165. data/doc/rdoc/lore/classes/Continuation.html +0 -113
  166. data/doc/rdoc/lore/classes/Date.html +0 -631
  167. data/doc/rdoc/lore/classes/DateTime.html +0 -583
  168. data/doc/rdoc/lore/classes/Enumerable.html +0 -89
  169. data/doc/rdoc/lore/classes/Enumerable/Enumerator.html +0 -147
  170. data/doc/rdoc/lore/classes/File.html +0 -128
  171. data/doc/rdoc/lore/classes/FileUtils.html +0 -434
  172. data/doc/rdoc/lore/classes/GetoptLong.html +0 -118
  173. data/doc/rdoc/lore/classes/GetoptLong/DSL.html +0 -208
  174. data/doc/rdoc/lore/classes/Kernel.html +0 -135
  175. data/doc/rdoc/lore/classes/Logger.html +0 -229
  176. data/doc/rdoc/lore/classes/Logger/Ansicolor.html +0 -277
  177. data/doc/rdoc/lore/classes/Logger/LogDevice.html +0 -121
  178. data/doc/rdoc/lore/classes/NilClass.html +0 -119
  179. data/doc/rdoc/lore/classes/OpenStruct.html +0 -432
  180. data/doc/rdoc/lore/classes/Pathname.html +0 -353
  181. data/doc/rdoc/lore/classes/Set.html +0 -117
  182. data/doc/rdoc/lore/classes/Shellwords.html +0 -111
  183. data/doc/rdoc/lore/classes/String.html +0 -140
  184. data/doc/rdoc/lore/classes/Time.html +0 -154
  185. data/doc/rdoc/lore/classes/URI.html +0 -454
  186. data/doc/rdoc/lore/classes/URI/Hash.html +0 -105
  187. data/doc/rdoc/lore/classes/URI/Kernel.html +0 -122
  188. data/doc/rdoc/lore/classes/Zlib.html +0 -188
  189. data/doc/rdoc/lore/created.rid +0 -1
  190. data/doc/rdoc/lore/files/README.html +0 -286
  191. data/doc/rdoc/lore/files/doc/README_lore.html +0 -155
  192. data/doc/rdoc/lore/files/lib/lore/facets/basicobject_rb.html +0 -118
  193. data/doc/rdoc/lore/files/lib/lore/facets/cgi_rb.html +0 -111
  194. data/doc/rdoc/lore/files/lib/lore/facets/continuation_rb.html +0 -147
  195. data/doc/rdoc/lore/files/lib/lore/facets/date_rb.html +0 -97
  196. data/doc/rdoc/lore/files/lib/lore/facets/enumerator_rb.html +0 -111
  197. data/doc/rdoc/lore/files/lib/lore/facets/fileutils/head_rb.html +0 -96
  198. data/doc/rdoc/lore/files/lib/lore/facets/fileutils/safe_ln_rb.html +0 -96
  199. data/doc/rdoc/lore/files/lib/lore/facets/fileutils/slice_rb.html +0 -96
  200. data/doc/rdoc/lore/files/lib/lore/facets/fileutils/tail_rb.html +0 -96
  201. data/doc/rdoc/lore/files/lib/lore/facets/fileutils/wc_rb.html +0 -96
  202. data/doc/rdoc/lore/files/lib/lore/facets/fileutils/whereis_rb.html +0 -96
  203. data/doc/rdoc/lore/files/lib/lore/facets/fileutils/which_rb.html +0 -96
  204. data/doc/rdoc/lore/files/lib/lore/facets/fileutils_rb.html +0 -131
  205. data/doc/rdoc/lore/files/lib/lore/facets/getoptlong_rb.html +0 -135
  206. data/doc/rdoc/lore/files/lib/lore/facets/logger_rb.html +0 -142
  207. data/doc/rdoc/lore/files/lib/lore/facets/ostruct_rb.html +0 -135
  208. data/doc/rdoc/lore/files/lib/lore/facets/pathname_rb.html +0 -145
  209. data/doc/rdoc/lore/files/lib/lore/facets/rbconfig_rb.html +0 -124
  210. data/doc/rdoc/lore/files/lib/lore/facets/set_rb.html +0 -96
  211. data/doc/rdoc/lore/files/lib/lore/facets/shellwords_rb.html +0 -124
  212. data/doc/rdoc/lore/files/lib/lore/facets/uri_rb.html +0 -125
  213. data/doc/rdoc/lore/files/lib/lore/facets/yaml_rb.html +0 -146
  214. data/doc/rdoc/lore/files/lib/lore/facets/zlib_rb.html +0 -97
  215. data/doc/rdoc/lore/fr_class_index.html +0 -73
  216. data/doc/rdoc/lore/fr_file_index.html +0 -71
  217. data/doc/rdoc/lore/fr_method_index.html +0 -177
  218. data/doc/rdoc/lore/index.html +0 -26
  219. data/doc/rdoc/lore/rdoc-style.css +0 -177
  220. data/doc/release-notes/RELEASE-2.0.5 +0 -8
  221. data/doc/release-notes/RELEASE-2.1.0 +0 -9
  222. data/doc/release-notes/RELEASE-2.1.1 +0 -5
  223. data/doc/release-notes/RELEASE-2.1.2 +0 -6
  224. data/doc/release-notes/RELEASE-2.1.3 +0 -5
  225. data/doc/release-notes/RELEASE-2.2.0 +0 -14
  226. data/doc/release-notes/RELEASE-2.2.1 +0 -4
  227. data/doc/release-notes/RELEASE-2.3.0 +0 -6
  228. data/doc/release-notes/RELEASE-2.4.0 +0 -70
  229. data/doc/release-notes/RELEASE-2.4.1 +0 -8
  230. data/doc/release-notes/RELEASE-2.4.2 +0 -4
  231. data/doc/release-notes/RELEASE-2.4.3 +0 -78
  232. data/doc/release-notes/RELEASE-2.4.4 +0 -38
  233. data/doc/release-notes/RELEASE-2.4.5 +0 -37
  234. data/doc/release-notes/RELEASE-2.5.0 +0 -83
  235. data/lib/core/facets/kernel/instance.rb +0 -19
  236. data/lib/lore/facets/basicobject.rb +0 -14
  237. data/lib/lore/facets/enumerator.rb +0 -67
  238. data/lib/lore/facets/logger.rb +0 -291
  239. data/lib/more/facets/1stclassmethod.rb +0 -140
  240. data/lib/more/facets/advisable.rb +0 -162
  241. data/lib/more/facets/association.rb +0 -210
  242. data/lib/more/facets/attr.rb +0 -209
  243. data/lib/more/facets/basex.rb +0 -37
  244. data/lib/more/facets/bbcode.rb +0 -397
  245. data/lib/more/facets/bicrypt.rb +0 -265
  246. data/lib/more/facets/binreadable.rb +0 -221
  247. data/lib/more/facets/censor.rb +0 -97
  248. data/lib/more/facets/classmethods.rb +0 -199
  249. data/lib/more/facets/consoleutils.rb +0 -99
  250. data/lib/more/facets/crypt.rb +0 -166
  251. data/lib/more/facets/dependency.rb +0 -151
  252. data/lib/more/facets/downloader.rb +0 -281
  253. data/lib/more/facets/duplicable.rb +0 -43
  254. data/lib/more/facets/elementor.rb +0 -133
  255. data/lib/more/facets/filter.rb +0 -121
  256. data/lib/more/facets/heap.rb +0 -22
  257. data/lib/more/facets/infinity.rb +0 -193
  258. data/lib/more/facets/ini.rb +0 -264
  259. data/lib/more/facets/instantise.rb +0 -1
  260. data/lib/more/facets/instantize.rb +0 -95
  261. data/lib/more/facets/interval.rb +0 -282
  262. data/lib/more/facets/iteration.rb +0 -65
  263. data/lib/more/facets/linkedlist.rb +0 -222
  264. data/lib/more/facets/lrucache.rb +0 -157
  265. data/lib/more/facets/matcher.rb +0 -140
  266. data/lib/more/facets/memoizer.rb +0 -74
  267. data/lib/more/facets/minitar.rb +0 -1063
  268. data/lib/more/facets/nackclass.rb +0 -41
  269. data/lib/more/facets/net/smtp_tls.rb +0 -131
  270. data/lib/more/facets/nilstatus.rb +0 -48
  271. data/lib/more/facets/overload.rb +0 -94
  272. data/lib/more/facets/paramix.rb +0 -202
  273. data/lib/more/facets/pool.rb +0 -91
  274. data/lib/more/facets/pqueue.rb +0 -449
  275. data/lib/more/facets/pry.rb +0 -32
  276. data/lib/more/facets/reflection.rb +0 -145
  277. data/lib/more/facets/semaphore.rb +0 -92
  278. data/lib/more/facets/settings.rb +0 -248
  279. data/lib/more/facets/snapshot.rb +0 -209
  280. data/lib/more/facets/sparse_array.rb +0 -809
  281. data/lib/more/facets/string/mask.rb +0 -278
  282. data/lib/more/facets/string/obfuscate.rb +0 -65
  283. data/lib/more/facets/string/stylize.rb +0 -169
  284. data/lib/more/facets/string/words.rb +0 -167
  285. data/lib/more/facets/syncarray.rb +0 -114
  286. data/lib/more/facets/synchash.rb +0 -157
  287. data/lib/more/facets/typecast.rb +0 -261
  288. data/lib/more/facets/uninheritable.rb +0 -50
  289. data/lib/more/facets/xmlhash.rb +0 -112
  290. data/lib/more/facets/xoxo.rb +0 -259
  291. data/lib/more/facets/ziputils.rb +0 -490
  292. data/task/conflicts +0 -63
  293. data/task/coverage.rake +0 -37
  294. data/task/methods +0 -49
  295. data/task/rdoc.rake +0 -17
  296. data/task/setup.rake +0 -38
  297. data/task/test.rake +0 -145
  298. data/test/more/test_advisable.rb +0 -71
  299. data/test/more/test_association.rb +0 -38
  300. data/test/more/test_bbcode.rb +0 -21
  301. data/test/more/test_binreadable.rb +0 -50
  302. data/test/more/test_buildable.rb +0 -73
  303. data/test/more/test_classmethods.rb +0 -56
  304. data/test/more/test_crypt.rb +0 -32
  305. data/test/more/test_dependency.rb +0 -69
  306. data/test/more/test_elementwise.rb +0 -25
  307. data/test/more/test_infinity.rb +0 -40
  308. data/test/more/test_interval.rb +0 -151
  309. data/test/more/test_linkedlist.rb +0 -41
  310. data/test/more/test_lrucache.rb +0 -14
  311. data/test/more/test_overload.rb +0 -160
  312. data/test/more/test_paramix.rb +0 -170
  313. data/test/more/test_prototype.rb +0 -35
  314. data/test/more/test_snapshot.rb +0 -21
  315. data/test/more/test_sparsearray.rb +0 -279
  316. data/test/more/test_syncarray.rb +0 -15
  317. data/test/more/test_synchash.rb +0 -16
  318. data/test/more/test_typecast.rb +0 -54
  319. data/test/more/test_uninheritable.rb +0 -31
  320. data/test/more/test_xoxo.rb +0 -274
  321. data/test/test_facets.rb +0 -9
@@ -1,217 +1,3 @@
1
- # = EnumerablePass
2
- #
3
- # This is a simple reimplementation of the core Enumerable module
4
- # to allow the methods to take and pass-on arbitrary arguments to the
5
- # underlying #each call. This library uses Enumerator and scans
6
- # Enumerable so it can alwasy stay in sync.
7
- #
8
- # NOTE Any Enumerable method with a negative arity cannot do pass arguments
9
- # due to ambiguity in the argument count. So the methods #inject and #zip
10
- # do NOT work this way, but simply work as they do in Enumerable.
11
- # The method #find (and #detect) though has been made to work by removing
12
- # its rarely used optional parameter and providing instead an optional
13
- # keyword parameter (:ifnone => ...). Please keep these difference in mind.
14
- #
15
- # class T
16
- # include EnumerablePass
17
- # def initialize(arr)
18
- # @arr = arr
19
- # end
20
- # def each(n)
21
- # arr.each{ |e| yield(e+n) }
22
- # end
23
- # end
24
- #
25
- # t = T.new([1,2,3])
26
- # t.collect(4)
27
- # #=> [5,6,7]
28
- #
29
- # == Authors
30
- #
31
- # * Thomas Sawyer
32
- #
33
- # == Copying
34
- #
35
- # Copyright (c) 2004 Thomas Sawyer
36
- #
37
- # Ruby License
38
- #
39
- # This module is free software. You may use, modify, and/or redistribute this
40
- # software under the same terms as Ruby.
41
- #
42
- # This program is distributed in the hope that it will be useful, but WITHOUT
43
- # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
44
- # FOR A PARTICULAR PURPOSE.
45
-
46
- require 'enumerator'
47
-
48
- # = EnumerablePass
49
- #
50
- # This is a simple reimplementation of the core Enumerable module
51
- # to allow the methods to take and pass-on arbitrary arguments to the
52
- # underlying #each call. This library uses Enumerator and scans
53
- # Enumerable so it can alwasy stay in sync.
54
- #
55
- # NOTE Any Enumerable method with a negative arity cannot do pass arguments
56
- # due to ambiguity in the argument count. So the methods #inject and #zip
57
- # do NOT work this way, but simply work as they do in Enumerable.
58
- # The method #find (and #detect) though has been made to work by removing
59
- # its rarely used optional parameter and providing instead an optional
60
- # keyword parameter (:ifnone => ...). Please keep these difference in mind.
61
- #
62
- # class T
63
- # include EnumerablePass
64
- # def initialize(arr)
65
- # @arr = arr
66
- # end
67
- # def each(n)
68
- # arr.each{ |e| yield(e+n) }
69
- # end
70
- # end
71
- #
72
- # t = T.new([1,2,3])
73
- # t.collect(4)
74
- # #=> [5,6,7]
75
- #
76
- module EnumerablePass
77
-
78
- def self.wrap_enumerable_method( methodname )
79
-
80
- m = methodname
81
- meth = Enumerable.instance_method(m)
82
- arity = meth.arity
83
-
84
- case arity <=> 0
85
- when 0
86
- class_eval %{
87
- def #{m}( *args, &yld )
88
- enum_for(:each, *args).#{m}( &yld )
89
- end
90
- }
91
- when 1
92
- class_eval %{
93
- def #{m}( *args, &yld )
94
- args, each_args = args[0...#{arity}], args[#{arity}..-1]
95
- enum_for(:each, *each_args).#{m}( *args, &yld )
96
- end
97
- }
98
- else
99
- class_eval %{
100
- def #{m}( *args, &yld )
101
- enum_for(:each).#{m}( *args, &yld )
102
- end
103
- }
104
- end
105
- end
106
-
107
- Enumerable.instance_methods(false).each do |m|
108
- wrap_enumerable_method( m )
109
- end
110
-
111
- # Make exception for #find (a negative arity method) to accept
112
- # keyword argument.
113
- #
114
- # ObjectSpace.find(Class, :ifnone=>lambda{1}) { |e| ... }
115
- # ObjectSpace.find(Class, :ifnone=>lambda{1}) { |e| ... }
116
- #
117
- def find(*args, &yld) # future use **keys ?
118
- if Hash === args.last and args.last.key?(:ifnone)
119
- ifnone = args.last.delete(:ifnone)
120
- args.pop if args.last.empty?
121
- enum_for(:each, *args).find( ifnone, &yld )
122
- else
123
- enum_for(:each, *args).find( &yld )
124
- end
125
- end
126
- alias_method :detect, :find
127
-
128
- end
129
-
130
-
131
- =begin OLD CODE
132
- module EnumerableArgs
133
-
134
- def collect(*args) # :yield:
135
- a = []
136
- each(*args){ |n| a << yield(n) }
137
- a
138
- end
139
- alias_method( :map, :collect )
140
-
141
- def detect(*args) # :yield:
142
- each(*args){ |n| return n if yield(n) }
143
- nil
144
- end
145
- alias_method( :find, :detect )
146
-
147
- def each_with_index(*args)
148
- i=0
149
- each(*args){ |*n| n << i; yield(*n); i+=1 }
150
- self
151
- end
152
-
153
- def to_a(*args)
154
- a = []
155
- each(*args){ |n| a << n }
156
- a
157
- end
158
- alias_method( :entries, :to_a )
159
-
160
- # An additional method not part of standard Enumerable.
161
- # The regular version of this method can be found in Facets,
162
- # but it is a bit more advanced then this one.
163
- # At some point they need to be put into sync.
164
- def each_slice(*args, &yld)
165
- a = []; s = []
166
- ar = yld.arity.abs
167
- each(*args){ |n|
168
- s << n
169
- if s.length >= ar
170
- yld.call(*s)
171
- s = []
172
- end
173
- }
174
- a
175
- end
176
- alias_method( :each_by, :each_slice )
177
-
178
- def select(*args) # :yield:
179
- a = []
180
- each(*args){ |n| a << n if yield(n) }
181
- a
182
- end
183
- alias_method( :find_all, :select )
184
-
185
- def grep(pattern, *args)
186
- a = []
187
- each(*args){ |n| a << (block_given? ? yield(n) : n) if pattern === n }
188
- a
189
- end
190
-
191
- def include?(anObj, *args)
192
- each(*args){ |n| return true if anObj == n }
193
- false
194
- end
195
- alias_method( :member?, :include? )
196
-
197
- def max(*args)
198
- to_a(*args).max
199
- end
200
-
201
- def min(*args)
202
- to_a(*args).min
203
- end
204
-
205
- def reject(*args)
206
- a = []
207
- each(*args){ |n| a << n if ! yield(n) }
208
- a
209
- end
210
-
211
- def sort(*args)
212
- # TODO
213
- end
214
-
215
- end
216
- =end
1
+ warn "EnumerablePass is no longer supported. Please 'gem install enumargs' instead."
2
+ EnumerablePass = Enumerable::Arguments
217
3
 
@@ -0,0 +1,62 @@
1
+ begin
2
+ require 'enumerator' #if RUBY_VERSION < 1.9
3
+ # for Ruby 1.8 -> 1.9 transition
4
+ Enumerator = Enumerable::Enumerator unless defined? ::Enumerator
5
+ rescue LoadError # Ruby 1.9 already has it built-in.
6
+ end
7
+
8
+ class Enumerator
9
+
10
+ alias :old_initialize :initialize
11
+
12
+ # Provides the ruby-1.9 block form of Enumerator, where you can write:
13
+ #
14
+ # obj = Enumerator.new do |yielder|
15
+ # .. do stuff
16
+ # yielder.yield data # or: yielder << data
17
+ # .. etc
18
+ # end
19
+ #
20
+ # When obj.each is called, the block is run once. It should call
21
+ # yielder.yield with each item it wishes to generate.
22
+ #
23
+ # Example:
24
+ #
25
+ # fib = Enumerator.new { |y|
26
+ # a = b = 1
27
+ # loop {
28
+ # y << a
29
+ # a, b = b, a + b
30
+ # }
31
+ # }
32
+ #
33
+ # assert_equal [1, 1, 2, 3, 5, 8, 13, 21, 34, 55], fib.take(10)
34
+
35
+ def initialize(*args, &block)
36
+ if block_given?
37
+ @body = block
38
+ old_initialize(self, :_start)
39
+ else
40
+ old_initialize(*args)
41
+ end
42
+ end
43
+
44
+ def _start(*args,&receiver) #:nodoc:
45
+ @body.call(Yielder.new(receiver), *args)
46
+ end
47
+
48
+ # Wrapper to allow yielder.yield(output) or yielder << output
49
+ # in the same way as ruby-1.9
50
+
51
+ class Yielder #:nodoc:
52
+ def initialize(proc)
53
+ @proc = proc
54
+ end
55
+ def yield(*args)
56
+ @proc[*args]
57
+ end
58
+ alias :<< :yield
59
+ end
60
+
61
+ end
62
+
@@ -1,4 +1,4 @@
1
- # = Equatable
1
+ # = Equitable
2
2
  #
3
3
  # This mixin provides methods of equality based
4
4
  # on a single #identity method which must return
@@ -6,9 +6,9 @@
6
6
  #
7
7
  # It also provides a "shortcut" for creating the
8
8
  # #identity method based on given accessors and returns
9
- # the Equatable module for inclusion.
9
+ # the Equitable module for inclusion.
10
10
  #
11
- # include Equatable(:a, :b)
11
+ # include Equitable(:a, :b)
12
12
  #
13
13
  # is equivalent to including a module containing:
14
14
  #
@@ -42,7 +42,7 @@
42
42
  # FOR A PARTICULAR PURPOSE.
43
43
 
44
44
 
45
- # = Equatable
45
+ # = Equitable
46
46
  #
47
47
  # This mixin provides methods of equality based
48
48
  # on a single #identity method which must return
@@ -50,9 +50,9 @@
50
50
  #
51
51
  # It also provides a "shortcut" for creating the
52
52
  # #identity method based on given accessors and returns
53
- # the Equatable module for inclusion.
53
+ # the Equitable module for inclusion.
54
54
  #
55
- # include Equatable(:a, :b)
55
+ # include Equitable(:a, :b)
56
56
  #
57
57
  # is equivalent to including a module containing:
58
58
  #
@@ -68,7 +68,7 @@
68
68
  # self.a.hash ^ self.b.hash
69
69
  # end
70
70
  #
71
- module Equatable
71
+ module Equitable
72
72
 
73
73
  def self.identify(base, *accessors)
74
74
  base.send(:define_method, :identity){ accessors }
@@ -93,9 +93,9 @@ class Module
93
93
 
94
94
  # This function provided a "shortcut" for creating the
95
95
  # #identity method based on given accessors and returns
96
- # the Equatable module for inclusion.
96
+ # the Equitable module for inclusion.
97
97
  #
98
- # include Equatable(:a, :b)
98
+ # include Equitable(:a, :b)
99
99
  #
100
100
  # is equivalent to including a module containing:
101
101
  #
@@ -112,8 +112,8 @@ class Module
112
112
  # end
113
113
  #
114
114
 
115
- def Equatable(*accessors)
116
- Equatable.identify(self, *accessors)
115
+ def Equitable(*accessors)
116
+ Equitable.identify(self, *accessors)
117
117
  end
118
118
 
119
119
  end
@@ -1,26 +1,21 @@
1
- # = Expirable
1
+ # Expirable
2
2
  #
3
- # Generic expirability mixin.
4
- #
5
- # == Authors
6
- #
7
- # * George Moschovitis
8
- #
9
- # == Copying
10
- #
11
- # Copyright (c) 2004 George Moschovitis
3
+ # Copyright (c) 2004 George Moschovitis
12
4
  #
13
- # Ruby License
5
+ # This program is free software: you can redistribute it and/or modify
6
+ # it under the terms of the GNU Lesser General Public License as published
7
+ # by the Free Software Foundation, either version 3 of the License, or
8
+ # (at your option) any later version.
14
9
  #
15
- # This module is free software. You may use, modify, and/or redistribute this
16
- # software under the same terms as Ruby.
10
+ # This program is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ # GNU Lesser General Public License for more details.
17
14
  #
18
- # This program is distributed in the hope that it will be useful, but WITHOUT
19
- # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
20
- # FOR A PARTICULAR PURPOSE.
15
+ # You should have received a copy of the GNU Lesser General Public License
16
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
17
+
21
18
 
22
- # = Expirable
23
- #
24
19
  # Generic expirability mixin.
25
20
  #
26
21
  module Expirable
@@ -57,26 +52,3 @@ module Expirable
57
52
 
58
53
  end
59
54
 
60
-
61
-
62
- # _____ _
63
- # |_ _|__ ___| |_
64
- # | |/ _ \/ __| __|
65
- # | | __/\__ \ |_
66
- # |_|\___||___/\__|
67
- #
68
-
69
- # TODO
70
-
71
- =begin #test
72
-
73
- require 'test/unit'
74
-
75
- class TC_Expirable < Test::Unit::TestCase
76
-
77
- def test_01
78
- end
79
-
80
- end
81
-
82
- =end
File without changes
File without changes
@@ -1,3 +1,4 @@
1
+ require 'facets/kernel/instance_exec'
1
2
 
2
3
  # TODO: hooks should be an inheritor
3
4
  #
@@ -24,7 +25,7 @@ module Hook
24
25
  def #{name}(*args)
25
26
  self.class.hooks[:#{name}].each do |blk|
26
27
  if Proc === blk
27
- blk.call(:#{name}, *args)
28
+ instance_exec(:#{name}, *args, &blk)
28
29
  else
29
30
  __send__(blk, :#{name}, *args)
30
31
  end
@@ -35,31 +36,3 @@ module Hook
35
36
 
36
37
  end
37
38
 
38
-
39
- #=begin demo
40
-
41
- class X
42
- include Hook
43
-
44
- hook :signal
45
-
46
- def boom(event, message)
47
- puts "Kaboom!"
48
- end
49
-
50
- signal do |event, message|
51
- puts "1", event, message
52
- end
53
-
54
- signal do |event, message|
55
- puts "2", event, message
56
- end
57
-
58
- signal :boom
59
-
60
- end
61
-
62
- X.new.signal("hi")
63
-
64
- #=end
65
-