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,27 +1,24 @@
1
- if RUBY_VERSION < '1.9'
1
+ class UnboundMethod
2
2
 
3
- class UnboundMethod
3
+ # Return the name of the method.
4
+ #
5
+ # Be aware that in ruby 1.9 UnboundMethod#name is defined already,
6
+ # but it returns a Symbol not a String.
7
+ #
8
+ # class X
9
+ # def foo; end
10
+ # end
11
+ #
12
+ # meth = X.instance_method(:foo)
13
+ #
14
+ # meth.name #=> "foo"
15
+ #
16
+ # CREDIT: Trans
4
17
 
5
- # Return the name of the method.
6
- #
7
- # Be aware that in ruby 1.9 UnboundMethod#name is defined already,
8
- # but it returns a Symbol not a String.
9
- #
10
- # class X
11
- # def foo; end
12
- # end
13
- #
14
- # meth = X.instance_method(:foo)
15
- #
16
- # meth.name #=> "foo"
17
- #
18
- # CREDIT: Trans
19
-
20
- def name
21
- i = to_s.rindex('#')
22
- to_s.slice(i+1...-1)
23
- end
24
-
25
- end
18
+ def name
19
+ i = to_s.rindex('#')
20
+ to_s.slice(i+1...-1)
21
+ end unless method_defined?(:name) # 1.8.7+
26
22
 
27
23
  end
24
+
@@ -1,7 +1,7 @@
1
1
  # = ANSICode
2
2
  #
3
3
  # Module which makes it very easy to use ANSI codes.
4
- # These are esspecially nice for beautifying shell output.
4
+ # These are especially nice for beautifying shell output.
5
5
  #
6
6
  # include ANSICode
7
7
  #
@@ -78,15 +78,6 @@
78
78
  # == Copying
79
79
  #
80
80
  # Copyright (c) 2004 Florian Frank, Thomas Sawyer
81
- #
82
- # Ruby License
83
- #
84
- # This module is free software. You may use, modify, and/or redistribute this
85
- # software under the same terms as Ruby.
86
- #
87
- # This program is distributed in the hope that it will be useful, but WITHOUT
88
- # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
89
- # FOR A PARTICULAR PURPOSE.
90
81
 
91
82
 
92
83
  # = ANSICode
@@ -1,34 +1,6 @@
1
- # = AutoArray
2
- #
3
- # An Array that automatically expands dimensions as needed.
4
- #
5
- # a = Autoarray.new
6
- # a[1][2][3] = 12
7
- # a #=> [nil, [nil, nil, [nil, nil, nil, 12]]]
8
- # a[2][3][4] #=> []
9
- # a #=> [nil, [nil, nil, [nil, nil, nil, 12]]]
10
- # a[1][-2][1] = "Negative"
11
- # a #=> [nil, [nil, [nil, "Negative"], [nil, nil, nil, 12]]]
12
- #
13
- # == Authors
14
- #
15
- # * Brian Schröder
16
- #
17
- # == License
18
- #
19
- # Copyright (c) 2005 Brian Schröder
20
- #
21
- # Ruby License
22
- #
23
- # This module is free software. You may use, modify, and/or redistribute this
24
- # software under the same terms as Ruby.
25
- #
26
- # This program is distributed in the hope that it will be useful, but WITHOUT
27
- # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
28
- # FOR A PARTICULAR PURPOSE.
1
+ # AutoArray
2
+ # Copyright (c) 2005 Brian Schröder
29
3
 
30
- # = AutoArray
31
- #
32
4
  # An Array that automatically expands dimensions as needed.
33
5
  #
34
6
  # a = Autoarray.new
@@ -39,7 +11,7 @@
39
11
  # a[1][-2][1] = "Negative"
40
12
  # a #=> [nil, [nil, [nil, "Negative"], [nil, nil, nil, 12]]]
41
13
  #
42
- class Autoarray < Array
14
+ class AutoArray < Array
43
15
 
44
16
  def initialize(size=0, default=nil, update = nil, update_index = nil)
45
17
  super(size, default)
@@ -0,0 +1,73 @@
1
+ # Facets' BasicObject is an implementation of Jim Weirich's BlankSlate.
2
+ #
3
+ # BlankSlate
4
+ # Copyright 2004 by Jim Weirich (jim@weirichhouse.org).
5
+ # All rights reserved.
6
+ #
7
+ # Since Ruby 1.9 has a BasicObject class this will of course be
8
+ # deprecated as 1.9 goes mainstream.
9
+
10
+ unless defined? BasicObject # just in case it already exists!
11
+
12
+ # BasicObject provides an abstract base class with no predefined
13
+ # methods (except for <tt>\_\_send__</tt> and <tt>\_\_id__</tt>).
14
+ # BlankSlate is useful as a base class when writing classes that
15
+ # depend upon <tt>method_missing</tt> (e.g. dynamic proxies).
16
+ class BasicObject
17
+ class << self
18
+
19
+ # Hide the method named +name+ in the BlankSlate class. Don't
20
+ # hide +instance_eval+ or any method beginning with "__".
21
+ def hide(name)
22
+ undef_method name if
23
+ instance_methods.include?(name.to_s) and
24
+ name !~ /^(__|instance_eval)/
25
+ end
26
+ end
27
+
28
+ instance_methods.each { |m| hide(m) }
29
+ end
30
+
31
+
32
+ # Since Ruby is very dynamic, methods added to the ancestors of
33
+ # BlankSlate <em>after BlankSlate is defined</em> will show up in the
34
+ # list of available BlankSlate methods. We handle this by defining a
35
+ # hook in the Object and Kernel classes that will hide any defined
36
+ module Kernel #:nodoc:
37
+ class << self
38
+ alias_method :blank_slate_method_added, :method_added
39
+
40
+ # Detect method additions to Kernel and remove them in the
41
+ # BlankSlate class.
42
+ def method_added(name)
43
+ blank_slate_method_added(name)
44
+ return if self != Kernel
45
+ BlankSlate.hide(name)
46
+ end
47
+ end
48
+ end
49
+
50
+ class Object #:nodoc:
51
+ class << self
52
+ alias_method :blank_slate_method_added, :method_added
53
+
54
+ # Detect method additions to Object and remove them in the
55
+ # BlankSlate class.
56
+ def method_added(name)
57
+ blank_slate_method_added(name)
58
+ return if self != Object
59
+ BlankSlate.hide(name)
60
+ end
61
+ end
62
+ end
63
+
64
+ end
65
+
66
+ unless defined? BlankSlate
67
+
68
+ # ActiveSupport compatiable version of BasicObject
69
+ # if not Ruby 1.9+ uses Jim Weirich's BlankSlate.
70
+ BlankSlate = BasicObject
71
+
72
+ end
73
+
@@ -1,66 +1,2 @@
1
- #!/usr/bin/env ruby
2
- #--
3
- # Copyright 2004 by Jim Weirich (jim@weirichhouse.org).
4
- # All rights reserved.
5
-
6
- # Permission is granted for use, copying, modification, distribution,
7
- # and distribution of modified versions of this work as long as the
8
- # above copyright notice is included.
9
- #++
10
-
11
- unless defined? BlankSlate
12
-
13
- # BlankSlate provides an abstract base class with no predefined
14
- # methods (except for <tt>\_\_send__</tt> and <tt>\_\_id__</tt>).
15
- # BlankSlate is useful as a base class when writing classes that
16
- # depend upon <tt>method_missing</tt> (e.g. dynamic proxies).
17
- class BlankSlate
18
- class << self
19
-
20
- # Hide the method named +name+ in the BlankSlate class. Don't
21
- # hide +instance_eval+ or any method beginning with "__".
22
- def hide(name)
23
- undef_method name if
24
- instance_methods.include?(name.to_s) and
25
- name !~ /^(__|instance_eval)/
26
- end
27
- end
28
-
29
- instance_methods.each { |m| hide(m) }
30
- end
31
-
32
-
33
- # Since Ruby is very dynamic, methods added to the ancestors of
34
- # BlankSlate <em>after BlankSlate is defined</em> will show up in the
35
- # list of available BlankSlate methods. We handle this by defining a
36
- # hook in the Object and Kernel classes that will hide any defined
37
- module Kernel #:nodoc:
38
- class << self
39
- alias_method :blank_slate_method_added, :method_added
40
-
41
- # Detect method additions to Kernel and remove them in the
42
- # BlankSlate class.
43
- def method_added(name)
44
- blank_slate_method_added(name)
45
- return if self != Kernel
46
- BlankSlate.hide(name)
47
- end
48
- end
49
- end
50
-
51
- class Object #:nodoc:
52
- class << self
53
- alias_method :blank_slate_method_added, :method_added
54
-
55
- # Detect method additions to Object and remove them in the
56
- # BlankSlate class.
57
- def method_added(name)
58
- blank_slate_method_added(name)
59
- return if self != Object
60
- BlankSlate.hide(name)
61
- end
62
- end
63
- end
64
-
65
- end
66
-
1
+ warn "Use BasicObject instead of BlankSlate for future versions."
2
+ require 'facets/basicobject'
File without changes
@@ -0,0 +1 @@
1
+ require 'facets/module/class_extend'
@@ -48,7 +48,7 @@ class Date
48
48
  # on conversions. In this case, it simply returns +self+.
49
49
  def to_date
50
50
  self
51
- end if RUBY_VERSION < '1.9'
51
+ end unless method_defined?(:to_date) # 1.9+ ?
52
52
 
53
53
  # Converts a Date instance to a DateTime, where the time is set to the beginning of the day
54
54
  # and UTC offset is set to 0.
@@ -59,7 +59,7 @@ class Date
59
59
  # date.to_datetime # => Sat, 10 Nov 2007 00:00:00 0000
60
60
  def to_datetime
61
61
  ::DateTime.civil(year, month, day, 0, 0, 0, 0)
62
- end if RUBY_VERSION < '1.9'
62
+ end unless method_defined?(:to_datetime) # 1.9+ ?
63
63
 
64
64
  # Converts a Date instance to a Time, where the time is set to the beginning of the day.
65
65
  # The timezone can be either :local or :utc (default :local).
@@ -327,7 +327,7 @@ class DateTime
327
327
  # Converts datetime to an appropriate format for use in XML
328
328
  def xmlschema
329
329
  strftime("%Y-%m-%dT%H:%M:%S%Z")
330
- end if RUBY_VERSION < '1.9'
330
+ end unless method_defined?(:xmlschema) # 1.9+ ?
331
331
 
332
332
  # Converts self to a floating-point number of seconds since the Unix epoch
333
333
  def to_f
@@ -0,0 +1,192 @@
1
+ # Enumerable::Arguments
2
+ #
3
+ # Copyright (c) 2004 Thomas Sawyer
4
+ #
5
+ # LGPL(3) License
6
+ #
7
+ # This module is free software. You may use, modify, and/or redistribute this
8
+ # software under the same terms as Ruby.
9
+ #
10
+ # This program is distributed in the hope that it will be useful, but WITHOUT
11
+ # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
12
+ # FOR A PARTICULAR PURPOSE.
13
+
14
+ require 'facets/enumerator'
15
+
16
+ # This is a simple reimplementation of the core Enumerable module
17
+ # to allow the methods to take and pass-on arbitrary arguments to the
18
+ # underlying #each call. This library uses Enumerator and scans
19
+ # Enumerable so it can alwasy stay in sync.
20
+ #
21
+ # NOTE Any Enumerable method with a negative arity cannot do pass arguments
22
+ # due to ambiguity in the argument count. So the methods #inject and #zip
23
+ # do NOT work this way, but simply work as they do in Enumerable.
24
+ # The method #find (and #detect) though has been made to work by removing
25
+ # its rarely used optional parameter and providing instead an optional
26
+ # keyword parameter (:ifnone => ...). Please keep these difference in mind.
27
+ #
28
+ # require 'enumargs'
29
+ #
30
+ # class T
31
+ # include Enumerable::Arguments
32
+ # def initialize(arr)
33
+ # @arr = arr
34
+ # end
35
+ # def each(n)
36
+ # arr.each{ |e| yield(e+n) }
37
+ # end
38
+ # end
39
+ #
40
+ # t = T.new([1,2,3])
41
+ # t.collect(4)
42
+ # #=> [5,6,7]
43
+ #
44
+ module Enumerable
45
+ module Arguments
46
+
47
+ def self.wrap_enumerable_method( methodname )
48
+
49
+ m = methodname
50
+ meth = Enumerable.instance_method(m)
51
+ arity = meth.arity
52
+
53
+ case arity <=> 0
54
+ when 0
55
+ class_eval %{
56
+ def #{m}( *args, &yld )
57
+ enum_for(:each, *args).#{m}( &yld )
58
+ end
59
+ }
60
+ when 1
61
+ class_eval %{
62
+ def #{m}( *args, &yld )
63
+ args, each_args = args[0...#{arity}], args[#{arity}..-1]
64
+ enum_for(:each, *each_args).#{m}( *args, &yld )
65
+ end
66
+ }
67
+ else
68
+ class_eval %{
69
+ def #{m}( *args, &yld )
70
+ enum_for(:each).#{m}( *args, &yld )
71
+ end
72
+ }
73
+ end
74
+ end
75
+
76
+ Enumerable.instance_methods(false).each do |m|
77
+ wrap_enumerable_method( m )
78
+ end
79
+
80
+ #
81
+ def to_a(*args)
82
+ map(*args){ |x| x }
83
+ end
84
+
85
+ # Make exception for #find (a negative arity method) to accept
86
+ # keyword argument.
87
+ #
88
+ # ObjectSpace.find(Class, :ifnone=>lambda{1}) { |e| ... }
89
+ # ObjectSpace.find(Class, :ifnone=>lambda{1}) { |e| ... }
90
+ #
91
+ def find(*args, &yld) # future use **keys ?
92
+ if Hash === args.last and args.last.key?(:ifnone)
93
+ ifnone = args.last.delete(:ifnone)
94
+ args.pop if args.last.empty?
95
+ enum_for(:each, *args).find( ifnone, &yld )
96
+ else
97
+ enum_for(:each, *args).find( &yld )
98
+ end
99
+ end
100
+ alias_method :detect, :find
101
+
102
+ end
103
+ end
104
+
105
+
106
+ =begin OLD CODE
107
+ module EnumerableArgs
108
+
109
+ def collect(*args) # :yield:
110
+ a = []
111
+ each(*args){ |n| a << yield(n) }
112
+ a
113
+ end
114
+ alias_method( :map, :collect )
115
+
116
+ def detect(*args) # :yield:
117
+ each(*args){ |n| return n if yield(n) }
118
+ nil
119
+ end
120
+ alias_method( :find, :detect )
121
+
122
+ def each_with_index(*args)
123
+ i=0
124
+ each(*args){ |*n| n << i; yield(*n); i+=1 }
125
+ self
126
+ end
127
+
128
+ def to_a(*args)
129
+ a = []
130
+ each(*args){ |n| a << n }
131
+ a
132
+ end
133
+ alias_method( :entries, :to_a )
134
+
135
+ # An additional method not part of standard Enumerable.
136
+ # The regular version of this method can be found in Facets,
137
+ # but it is a bit more advanced then this one.
138
+ # At some point they need to be put into sync.
139
+ def each_slice(*args, &yld)
140
+ a = []; s = []
141
+ ar = yld.arity.abs
142
+ each(*args){ |n|
143
+ s << n
144
+ if s.length >= ar
145
+ yld.call(*s)
146
+ s = []
147
+ end
148
+ }
149
+ a
150
+ end
151
+ alias_method( :each_by, :each_slice )
152
+
153
+ def select(*args) # :yield:
154
+ a = []
155
+ each(*args){ |n| a << n if yield(n) }
156
+ a
157
+ end
158
+ alias_method( :find_all, :select )
159
+
160
+ def grep(pattern, *args)
161
+ a = []
162
+ each(*args){ |n| a << (block_given? ? yield(n) : n) if pattern === n }
163
+ a
164
+ end
165
+
166
+ def include?(anObj, *args)
167
+ each(*args){ |n| return true if anObj == n }
168
+ false
169
+ end
170
+ alias_method( :member?, :include? )
171
+
172
+ def max(*args)
173
+ to_a(*args).max
174
+ end
175
+
176
+ def min(*args)
177
+ to_a(*args).min
178
+ end
179
+
180
+ def reject(*args)
181
+ a = []
182
+ each(*args){ |n| a << n if ! yield(n) }
183
+ a
184
+ end
185
+
186
+ def sort(*args)
187
+ # TODO
188
+ end
189
+
190
+ end
191
+ =end
192
+