facets 2.4.5 → 2.5.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 (763) hide show
  1. data/AUTHORS +6 -2
  2. data/CHANGES +46 -52
  3. data/MANIFEST +680 -642
  4. data/README +3 -10
  5. data/RELEASE +82 -36
  6. data/VERSION +1 -1
  7. data/doc/archive/{changelog-0.rdoc → CHANGELOG-0.10.30} +0 -0
  8. data/doc/archive/{changelog-1.rdoc → CHANGELOG-1.8.54} +0 -0
  9. data/doc/archive/CHANGELOG-2.4.5 +1654 -0
  10. data/doc/{news → archive}/RELEASE-2.0.5 +0 -0
  11. data/doc/{news → archive}/RELEASE-2.1.0 +0 -0
  12. data/doc/{news → archive}/RELEASE-2.1.1 +0 -0
  13. data/doc/{news → archive}/RELEASE-2.1.2 +0 -0
  14. data/doc/{news → archive}/RELEASE-2.1.3 +0 -0
  15. data/doc/{news → archive}/RELEASE-2.2.0 +0 -0
  16. data/doc/{news → archive}/RELEASE-2.2.1 +0 -0
  17. data/doc/{news → archive}/RELEASE-2.3.0 +0 -0
  18. data/doc/{news → archive}/RELEASE-2.4.0 +0 -0
  19. data/doc/{news → archive}/RELEASE-2.4.1 +0 -0
  20. data/doc/{news → archive}/RELEASE-2.4.2 +0 -0
  21. data/doc/{news → archive}/RELEASE-2.4.3 +0 -0
  22. data/doc/{news → archive}/RELEASE-2.4.4 +0 -0
  23. data/doc/archive/RELEASE-2.4.5 +37 -0
  24. data/doc/{book/history.rdoc → guide/notes.rd} +62 -4
  25. data/doc/log/basic_stats/index.html +39 -0
  26. data/doc/log/bstats/stats.html +39 -0
  27. data/doc/log/changelog.html +141 -0
  28. data/doc/log/changelog.txt +1609 -0
  29. data/doc/log/stats.html +25 -0
  30. data/doc/log/testlog.txt +278 -0
  31. data/doc/rdoc/core/classes/Array.html +158 -147
  32. data/doc/rdoc/core/classes/Binding.html +54 -54
  33. data/doc/rdoc/core/classes/Class.html +59 -57
  34. data/doc/rdoc/core/classes/Comparable.html +67 -76
  35. data/doc/rdoc/core/classes/Dir.html +47 -47
  36. data/doc/rdoc/core/classes/Enumerable.html +232 -192
  37. data/doc/rdoc/core/classes/Exception.html +15 -16
  38. data/doc/rdoc/core/classes/File.html +128 -85
  39. data/doc/rdoc/core/classes/FileTest.html +7 -7
  40. data/doc/rdoc/core/classes/Float.html +16 -14
  41. data/doc/rdoc/core/classes/Functor.html +12 -12
  42. data/doc/rdoc/core/classes/Hash.html +490 -319
  43. data/doc/rdoc/core/classes/Indexable.html +110 -110
  44. data/doc/rdoc/core/classes/InstanceVariables.html +44 -44
  45. data/doc/rdoc/core/classes/Integer.html +122 -116
  46. data/doc/rdoc/core/classes/Kernel.html +415 -401
  47. data/doc/rdoc/core/classes/Lazy/Promise.html +1 -1
  48. data/doc/rdoc/core/classes/MatchData.html +24 -21
  49. data/doc/rdoc/core/classes/Module.html +230 -229
  50. data/doc/rdoc/core/classes/NilClass.html +28 -26
  51. data/doc/rdoc/core/classes/Numeric.html +30 -30
  52. data/doc/rdoc/core/classes/Object.html +8 -8
  53. data/doc/rdoc/core/classes/{Friend.html → ObjectSpace.html} +25 -48
  54. data/doc/rdoc/core/classes/Proc.html +29 -27
  55. data/doc/rdoc/core/classes/Range.html +17 -15
  56. data/doc/rdoc/core/classes/Regexp.html +17 -17
  57. data/doc/rdoc/core/classes/Stackable.html +31 -31
  58. data/doc/rdoc/core/classes/String.html +445 -401
  59. data/doc/rdoc/{more/classes/CLI/NoOptionError.html → core/classes/Struct.html} +24 -21
  60. data/doc/rdoc/core/classes/Symbol.html +73 -65
  61. data/doc/rdoc/core/classes/Time.html +87 -86
  62. data/doc/rdoc/core/classes/TrueClass.html +8 -8
  63. data/doc/rdoc/core/classes/UnboundMethod.html +17 -16
  64. data/doc/rdoc/core/created.rid +1 -1
  65. data/doc/rdoc/core/files/README.html +10 -16
  66. data/doc/rdoc/core/files/lib/core/facets/array/combination_rb.html +1 -1
  67. data/doc/rdoc/core/files/lib/core/facets/array/conjoin_rb.html +1 -1
  68. data/doc/rdoc/core/files/lib/core/facets/array/delete_rb.html +10 -1
  69. data/doc/rdoc/core/files/lib/core/facets/array/delete_unless_rb.html +92 -0
  70. data/doc/rdoc/core/files/lib/core/facets/array/delete_values_rb.html +92 -0
  71. data/doc/rdoc/core/files/lib/core/facets/array/index_rb.html +1 -1
  72. data/doc/rdoc/core/files/lib/core/facets/array/indexable_rb.html +1 -1
  73. data/doc/rdoc/core/files/lib/core/facets/array/merge_rb.html +1 -1
  74. data/doc/rdoc/core/files/lib/core/facets/array/only_rb.html +1 -1
  75. data/doc/rdoc/core/files/lib/core/facets/array/pad_rb.html +1 -1
  76. data/doc/rdoc/core/files/lib/core/facets/array/permutation_rb.html +1 -1
  77. data/doc/rdoc/core/files/lib/core/facets/array/product_rb.html +1 -1
  78. data/doc/rdoc/core/files/lib/core/facets/array/rotate_rb.html +1 -1
  79. data/doc/rdoc/core/files/lib/core/facets/array/select_rb.html +1 -1
  80. data/doc/rdoc/core/files/lib/core/facets/array/splice_rb.html +1 -1
  81. data/doc/rdoc/core/files/lib/core/facets/array/stackable_rb.html +1 -1
  82. data/doc/rdoc/core/files/lib/core/facets/binding/caller_rb.html +2 -2
  83. data/doc/rdoc/core/files/lib/core/facets/binding/callstack_rb.html +96 -0
  84. data/doc/rdoc/core/files/lib/core/facets/binding/defined_rb.html +1 -1
  85. data/doc/rdoc/core/files/lib/core/facets/bitmask_rb.html +1 -1
  86. data/doc/rdoc/core/files/lib/core/facets/class/cattr_rb.html +1 -1
  87. data/doc/rdoc/core/files/lib/core/facets/class/descendents_rb.html +1 -1
  88. data/doc/rdoc/core/files/lib/core/facets/class/prepend_rb.html +1 -1
  89. data/doc/rdoc/core/files/lib/core/facets/class/to_proc_rb.html +1 -1
  90. data/doc/rdoc/core/files/lib/core/facets/comparable/at_least_rb.html +96 -0
  91. data/doc/rdoc/core/files/lib/core/facets/comparable/at_most_rb.html +96 -0
  92. data/doc/rdoc/core/files/lib/core/facets/comparable/bound_rb.html +5 -1
  93. data/doc/rdoc/core/files/lib/core/facets/comparable/cap_rb.html +92 -0
  94. data/doc/rdoc/core/files/lib/core/facets/comparable/clip_rb.html +92 -0
  95. data/doc/rdoc/core/files/lib/core/facets/comparable/cmp_rb.html +1 -1
  96. data/doc/rdoc/core/files/lib/core/facets/comparable/comparable_rb.html +1 -1
  97. data/doc/rdoc/core/files/lib/core/facets/dir/ascend_rb.html +1 -1
  98. data/doc/rdoc/core/files/lib/core/facets/dir/multiglob_rb.html +1 -1
  99. data/doc/rdoc/core/files/lib/core/facets/dir/recurse_rb.html +1 -1
  100. data/doc/rdoc/core/files/lib/core/facets/enumerable/accumulate_rb.html +1 -1
  101. data/doc/rdoc/core/files/lib/core/facets/enumerable/cluster_by_rb.html +1 -1
  102. data/doc/rdoc/core/files/lib/core/facets/enumerable/collect_rb.html +1 -1
  103. data/doc/rdoc/core/files/lib/core/facets/enumerable/commonality_rb.html +1 -1
  104. data/doc/rdoc/core/files/lib/core/facets/enumerable/count_rb.html +1 -1
  105. data/doc/rdoc/core/files/lib/core/facets/enumerable/divide_rb.html +1 -1
  106. data/doc/rdoc/core/files/lib/core/facets/enumerable/duplicates_rb.html +1 -1
  107. data/doc/rdoc/core/files/lib/core/facets/enumerable/each_by_rb.html +1 -1
  108. data/doc/rdoc/core/files/lib/core/facets/enumerable/entropy_rb.html +1 -1
  109. data/doc/rdoc/core/files/lib/core/facets/enumerable/frequency_rb.html +1 -1
  110. data/doc/rdoc/core/files/lib/core/facets/enumerable/graph_rb.html +96 -0
  111. data/doc/rdoc/core/files/lib/core/facets/enumerable/group_by_rb.html +1 -1
  112. data/doc/rdoc/core/files/lib/core/facets/enumerable/inject_rb.html +1 -1
  113. data/doc/rdoc/core/files/lib/core/facets/enumerable/map_send_rb.html +1 -1
  114. data/doc/rdoc/core/files/lib/core/facets/enumerable/mash_rb.html +1 -1
  115. data/doc/rdoc/core/files/lib/core/facets/enumerable/mode_rb.html +1 -1
  116. data/doc/rdoc/core/files/lib/core/facets/enumerable/modulate_rb.html +1 -1
  117. data/doc/rdoc/core/files/lib/core/facets/enumerable/none_rb.html +1 -1
  118. data/doc/rdoc/core/files/lib/core/facets/enumerable/occur_rb.html +1 -1
  119. data/doc/rdoc/core/files/lib/core/facets/enumerable/one_rb.html +1 -1
  120. data/doc/rdoc/core/files/lib/core/facets/enumerable/probability_rb.html +1 -1
  121. data/doc/rdoc/core/files/lib/core/facets/enumerable/sum_rb.html +1 -1
  122. data/doc/rdoc/core/files/lib/core/facets/enumerable/take_rb.html +92 -0
  123. data/doc/rdoc/core/files/lib/core/facets/enumerable/uniq_by_rb.html +1 -1
  124. data/doc/rdoc/core/files/lib/core/facets/exception/detail_rb.html +1 -1
  125. data/doc/rdoc/core/files/lib/core/facets/exception/suppress_rb.html +1 -1
  126. data/doc/rdoc/core/files/lib/core/facets/file/append_rb.html +1 -1
  127. data/doc/rdoc/core/files/lib/core/facets/file/create_rb.html +1 -1
  128. data/doc/rdoc/core/files/lib/core/facets/file/null_rb.html +1 -1
  129. data/doc/rdoc/core/files/lib/core/facets/file/read_rb.html +1 -1
  130. data/doc/rdoc/core/files/lib/core/facets/file/rewrite_rb.html +1 -1
  131. data/doc/rdoc/core/files/lib/core/facets/file/rootname_rb.html +1 -1
  132. data/doc/rdoc/core/files/lib/core/facets/file/split_all_rb.html +92 -0
  133. data/doc/rdoc/core/files/lib/core/facets/file/split_root_rb.html +1 -1
  134. data/doc/rdoc/core/files/lib/core/facets/file/write_rb.html +1 -1
  135. data/doc/rdoc/core/files/lib/core/facets/file/writelines_rb.html +1 -1
  136. data/doc/rdoc/core/files/lib/core/facets/filetest/root_rb.html +1 -1
  137. data/doc/rdoc/core/files/lib/core/facets/hash/alias_rb.html +1 -1
  138. data/doc/rdoc/core/files/lib/core/facets/hash/autonew_rb.html +1 -1
  139. data/doc/rdoc/core/files/lib/core/facets/hash/collate_rb.html +1 -1
  140. data/doc/rdoc/core/files/lib/core/facets/hash/delete_rb.html +1 -1
  141. data/doc/rdoc/core/files/lib/core/facets/hash/insert_rb.html +1 -1
  142. data/doc/rdoc/core/files/lib/core/facets/hash/inverse_rb.html +1 -1
  143. data/doc/rdoc/core/files/lib/core/facets/hash/join_rb.html +1 -1
  144. data/doc/rdoc/core/files/lib/core/facets/hash/keys_rb.html +1 -1
  145. data/doc/rdoc/core/files/lib/core/facets/hash/op_add_rb.html +1 -1
  146. data/doc/rdoc/core/files/lib/core/facets/hash/op_and_rb.html +1 -1
  147. data/doc/rdoc/core/files/lib/core/facets/hash/op_mul_rb.html +1 -1
  148. data/doc/rdoc/core/files/lib/core/facets/hash/op_or_rb.html +1 -1
  149. data/doc/rdoc/core/files/lib/core/facets/hash/op_push_rb.html +1 -1
  150. data/doc/rdoc/core/files/lib/core/facets/hash/op_sub_rb.html +1 -1
  151. data/doc/rdoc/core/files/lib/core/facets/hash/rekey_rb.html +1 -1
  152. data/doc/rdoc/core/files/lib/core/facets/hash/replace_each_rb.html +92 -0
  153. data/doc/rdoc/core/files/lib/core/facets/hash/select_rb.html +1 -1
  154. data/doc/rdoc/{more/files/lib/more → core/files/lib/core}/facets/hash/stringify_keys_rb.html +1 -1
  155. data/doc/rdoc/{more/files/lib/more → core/files/lib/core}/facets/hash/symbolize_keys_rb.html +2 -2
  156. data/doc/rdoc/core/files/lib/core/facets/hash/to_options_rb.html +96 -0
  157. data/doc/rdoc/core/files/lib/core/facets/hash/to_struct_rb.html +1 -1
  158. data/doc/rdoc/core/files/lib/core/facets/hash/traverse_rb.html +1 -1
  159. data/doc/rdoc/core/files/lib/core/facets/hash/update_each_rb.html +92 -0
  160. data/doc/rdoc/core/files/lib/core/facets/hash/update_keys_rb.html +92 -0
  161. data/doc/rdoc/core/files/lib/core/facets/hash/update_rb.html +8 -1
  162. data/doc/rdoc/core/files/lib/core/facets/hash/update_values_rb.html +92 -0
  163. data/doc/rdoc/core/files/lib/core/facets/hash/weave_rb.html +1 -1
  164. data/doc/rdoc/core/files/lib/core/facets/hash/zipnew_rb.html +1 -5
  165. data/doc/rdoc/core/files/lib/core/facets/integer/factorial_rb.html +1 -1
  166. data/doc/rdoc/core/files/lib/core/facets/integer/multiple_rb.html +1 -1
  167. data/doc/rdoc/core/files/lib/core/facets/integer/odd_rb.html +1 -1
  168. data/doc/rdoc/core/files/lib/core/facets/kernel/__here___rb.html +92 -0
  169. data/doc/rdoc/core/files/lib/core/facets/kernel/as_rb.html +1 -1
  170. data/doc/rdoc/core/files/lib/core/facets/kernel/ask_rb.html +1 -1
  171. data/doc/rdoc/core/files/lib/core/facets/kernel/attr_singleton_rb.html +1 -1
  172. data/doc/rdoc/core/files/lib/core/facets/kernel/callstack_rb.html +92 -0
  173. data/doc/rdoc/core/files/lib/core/facets/kernel/complete_rb.html +1 -1
  174. data/doc/rdoc/core/files/lib/core/facets/kernel/constant_rb.html +1 -1
  175. data/doc/rdoc/core/files/lib/core/facets/kernel/d_rb.html +1 -1
  176. data/doc/rdoc/core/files/lib/core/facets/kernel/demo_rb.html +1 -1
  177. data/doc/rdoc/core/files/lib/core/facets/kernel/ergo_rb.html +1 -1
  178. data/doc/rdoc/core/files/lib/core/facets/kernel/instance_class_rb.html +1 -1
  179. data/doc/rdoc/core/files/lib/core/facets/kernel/instance_variables_rb.html +1 -1
  180. data/doc/rdoc/core/files/lib/core/facets/kernel/not_nil_rb.html +1 -1
  181. data/doc/rdoc/core/files/lib/core/facets/kernel/object_send_rb.html +1 -1
  182. data/doc/rdoc/core/files/lib/core/facets/kernel/p_rb.html +1 -1
  183. data/doc/rdoc/core/files/lib/core/facets/kernel/populate_rb.html +1 -1
  184. data/doc/rdoc/core/files/lib/core/facets/kernel/qua_class_rb.html +1 -1
  185. data/doc/rdoc/core/files/lib/core/facets/kernel/resc_rb.html +1 -1
  186. data/doc/rdoc/core/files/lib/core/facets/kernel/respond_rb.html +1 -1
  187. data/doc/rdoc/core/files/lib/core/facets/kernel/returning_rb.html +1 -1
  188. data/doc/rdoc/core/files/lib/core/facets/kernel/silence_rb.html +1 -1
  189. data/doc/rdoc/core/files/lib/core/facets/kernel/try_rb.html +1 -1
  190. data/doc/rdoc/core/files/lib/core/facets/matchdata/match_rb.html +1 -1
  191. data/doc/rdoc/core/files/lib/core/facets/matchdata/matchset_rb.html +1 -1
  192. data/doc/rdoc/core/files/lib/core/facets/metaid_rb.html +1 -1
  193. data/doc/rdoc/core/files/lib/core/facets/module/abstract_rb.html +1 -1
  194. data/doc/rdoc/core/files/lib/core/facets/module/alias_accessor_rb.html +1 -1
  195. data/doc/rdoc/core/files/lib/core/facets/module/alias_method_chain_rb.html +1 -1
  196. data/doc/rdoc/core/files/lib/core/facets/module/alias_module_function_rb.html +1 -1
  197. data/doc/rdoc/core/files/lib/core/facets/module/ancestor_rb.html +1 -1
  198. data/doc/rdoc/core/files/lib/core/facets/module/basename_rb.html +1 -1
  199. data/doc/rdoc/core/files/lib/core/facets/module/conflict_rb.html +1 -1
  200. data/doc/rdoc/core/files/lib/core/facets/module/include_function_module_rb.html +1 -1
  201. data/doc/rdoc/core/files/lib/core/facets/module/instance_methods_rb.html +1 -1
  202. data/doc/rdoc/core/files/lib/core/facets/module/is_rb.html +1 -1
  203. data/doc/rdoc/core/files/lib/core/facets/module/methodize_rb.html +1 -1
  204. data/doc/rdoc/core/files/lib/core/facets/module/modspace_rb.html +1 -1
  205. data/doc/rdoc/core/files/lib/core/facets/module/module_load_rb.html +1 -1
  206. data/doc/rdoc/core/files/lib/core/facets/module/nesting_rb.html +1 -1
  207. data/doc/rdoc/core/files/lib/core/facets/module/op_rb.html +1 -1
  208. data/doc/rdoc/core/files/lib/core/facets/module/prepend_rb.html +1 -1
  209. data/doc/rdoc/core/files/lib/core/facets/module/redefine_method_rb.html +1 -1
  210. data/doc/rdoc/core/files/lib/core/facets/module/rename_method_rb.html +1 -1
  211. data/doc/rdoc/core/files/lib/core/facets/module/revise_rb.html +1 -1
  212. data/doc/rdoc/core/files/lib/core/facets/module/spacename_rb.html +1 -1
  213. data/doc/rdoc/core/files/lib/core/facets/module/wrap_method_rb.html +1 -1
  214. data/doc/rdoc/core/files/lib/core/facets/nilclass/to_f_rb.html +1 -1
  215. data/doc/rdoc/core/files/lib/core/facets/numeric/approx_rb.html +1 -1
  216. data/doc/rdoc/core/files/lib/core/facets/numeric/distance_rb.html +1 -1
  217. data/doc/rdoc/core/files/lib/core/facets/numeric/round_rb.html +1 -1
  218. data/doc/rdoc/core/files/lib/core/facets/objectspace/classes_rb.html +92 -0
  219. data/doc/rdoc/{more/files/lib/more/facets/dictionarymatcher_rb.html → core/files/lib/core/facets/objectspace_rb.html} +4 -4
  220. data/doc/rdoc/core/files/lib/core/facets/proc/bind_rb.html +1 -1
  221. data/doc/rdoc/core/files/lib/core/facets/proc/compose_rb.html +1 -1
  222. data/doc/rdoc/core/files/lib/core/facets/proc/to_method_rb.html +1 -1
  223. data/doc/rdoc/core/files/lib/core/facets/proc/update_rb.html +1 -1
  224. data/doc/rdoc/core/files/lib/core/facets/range/combine_rb.html +1 -1
  225. data/doc/rdoc/core/files/lib/core/facets/range/overlap_rb.html +1 -1
  226. data/doc/rdoc/core/files/lib/core/facets/range/within_rb.html +1 -1
  227. data/doc/rdoc/core/files/lib/core/facets/regexp/arity_rb.html +1 -1
  228. data/doc/rdoc/core/files/lib/core/facets/string/align_rb.html +1 -1
  229. data/doc/rdoc/core/files/lib/core/facets/string/bracket_rb.html +1 -1
  230. data/doc/rdoc/core/files/lib/core/facets/string/camelcase_rb.html +1 -1
  231. data/doc/rdoc/core/files/lib/core/facets/string/capitalized_rb.html +1 -1
  232. data/doc/rdoc/core/files/lib/core/facets/string/chars_rb.html +1 -1
  233. data/doc/rdoc/core/files/lib/core/facets/string/chomp_rb.html +1 -1
  234. data/doc/rdoc/core/files/lib/core/facets/string/cleave_rb.html +1 -1
  235. data/doc/rdoc/core/files/lib/core/facets/string/compress_lines_rb.html +92 -0
  236. data/doc/rdoc/core/files/lib/core/facets/string/contains_rb.html +92 -0
  237. data/doc/rdoc/core/files/lib/core/facets/string/divide_rb.html +1 -1
  238. data/doc/rdoc/core/files/lib/core/facets/string/expand_tab_rb.html +92 -0
  239. data/doc/rdoc/core/files/lib/core/facets/string/fold_rb.html +1 -1
  240. data/doc/rdoc/core/files/lib/core/facets/string/indent_rb.html +92 -0
  241. data/doc/rdoc/core/files/lib/core/facets/string/interpolate_rb.html +1 -1
  242. data/doc/rdoc/core/files/lib/core/facets/string/line_wrap_rb.html +1 -1
  243. data/doc/rdoc/core/files/lib/core/facets/string/lines_rb.html +1 -1
  244. data/doc/rdoc/core/files/lib/core/facets/string/margin_rb.html +92 -0
  245. data/doc/rdoc/core/files/lib/core/facets/string/methodize_rb.html +1 -1
  246. data/doc/rdoc/core/files/lib/core/facets/string/mscan_rb.html +1 -1
  247. data/doc/rdoc/core/files/lib/core/facets/string/natcmp_rb.html +1 -1
  248. data/doc/rdoc/core/files/lib/core/facets/string/nchar_rb.html +1 -1
  249. data/doc/rdoc/core/files/lib/core/facets/string/op_sub_rb.html +1 -1
  250. data/doc/rdoc/core/files/lib/core/facets/string/outdent_rb.html +96 -0
  251. data/doc/rdoc/core/files/lib/core/facets/string/range_rb.html +1 -1
  252. data/doc/rdoc/core/files/lib/core/facets/string/rewrite_rb.html +1 -1
  253. data/doc/rdoc/core/files/lib/core/facets/string/shatter_rb.html +1 -1
  254. data/doc/rdoc/core/files/lib/core/facets/string/snakecase_rb.html +1 -1
  255. data/doc/rdoc/core/files/lib/core/facets/string/splice_rb.html +1 -1
  256. data/doc/rdoc/core/files/lib/core/facets/string/start_with_rb.html +1 -1
  257. data/doc/rdoc/core/files/lib/core/facets/string/tab_rb.html +8 -1
  258. data/doc/rdoc/core/files/lib/core/facets/string/tabto_rb.html +96 -0
  259. data/doc/rdoc/core/files/lib/core/facets/string/titlecase_rb.html +1 -1
  260. data/doc/rdoc/core/files/lib/core/facets/string/to_re_rb.html +1 -1
  261. data/doc/rdoc/core/files/lib/core/facets/string/word_wrap_rb.html +1 -1
  262. data/doc/rdoc/core/files/lib/core/facets/struct/attributes_rb.html +92 -0
  263. data/doc/rdoc/{more/files/lib/more/facets/bytes_rb.html → core/files/lib/core/facets/struct_rb.html} +4 -4
  264. data/doc/rdoc/core/files/lib/core/facets/symbol/chomp_rb.html +1 -1
  265. data/doc/rdoc/core/files/lib/core/facets/symbol/generate_rb.html +1 -1
  266. data/doc/rdoc/core/files/lib/core/facets/symbol/not_rb.html +1 -1
  267. data/doc/rdoc/core/files/lib/core/facets/symbol/succ_rb.html +1 -1
  268. data/doc/rdoc/core/files/lib/core/facets/symbol/to_proc_rb.html +1 -1
  269. data/doc/rdoc/core/files/lib/core/facets/time/advance_rb.html +1 -1
  270. data/doc/rdoc/core/files/lib/core/facets/time/change_rb.html +1 -1
  271. data/doc/rdoc/core/files/lib/core/facets/time/elapse_rb.html +1 -1
  272. data/doc/rdoc/core/files/lib/core/facets/time/hence_rb.html +1 -1
  273. data/doc/rdoc/core/files/lib/core/facets/time/stamp_rb.html +1 -1
  274. data/doc/rdoc/core/files/lib/core/facets/to_hash_rb.html +1 -1
  275. data/doc/rdoc/core/files/lib/core/facets/unboundmethod/arguments_rb.html +1 -1
  276. data/doc/rdoc/core/files/lib/core/facets/unboundmethod/name_rb.html +1 -1
  277. data/doc/rdoc/core/fr_class_index.html +2 -1
  278. data/doc/rdoc/core/fr_file_index.html +30 -1
  279. data/doc/rdoc/core/fr_method_index.html +430 -423
  280. data/doc/rdoc/lore/classes/Date.html +6 -5
  281. data/doc/rdoc/{more/classes/CLI/Command/UniversalOptions.html → lore/classes/Enumerable.html} +7 -9
  282. data/doc/rdoc/lore/classes/Enumerable/Enumerator.html +147 -0
  283. data/doc/rdoc/lore/classes/OpenStruct.html +13 -15
  284. data/doc/rdoc/lore/created.rid +1 -1
  285. data/doc/rdoc/lore/files/README.html +10 -16
  286. data/doc/rdoc/lore/files/lib/lore/facets/date_rb.html +1 -1
  287. data/doc/rdoc/lore/files/lib/lore/facets/enumerator_rb.html +111 -0
  288. data/doc/rdoc/lore/files/lib/lore/facets/ostruct_rb.html +1 -1
  289. data/doc/rdoc/lore/fr_class_index.html +2 -0
  290. data/doc/rdoc/lore/fr_file_index.html +1 -0
  291. data/doc/rdoc/lore/fr_method_index.html +13 -12
  292. data/doc/rdoc/more/classes/ANSICode.html +66 -66
  293. data/doc/rdoc/more/classes/Advisable.html +37 -37
  294. data/doc/rdoc/more/classes/Advisable/Method.html +20 -20
  295. data/doc/rdoc/more/classes/Archive/Tar/Minitar.html +27 -27
  296. data/doc/rdoc/more/classes/Archive/Tar/Minitar/Input.html +28 -28
  297. data/doc/rdoc/more/classes/Archive/Tar/Minitar/Output.html +19 -19
  298. data/doc/rdoc/more/classes/Archive/Tar/Minitar/Reader.html +31 -31
  299. data/doc/rdoc/more/classes/Archive/Tar/Minitar/Writer.html +33 -33
  300. data/doc/rdoc/more/classes/Argvector.html +76 -76
  301. data/doc/rdoc/more/classes/Association.html +28 -28
  302. data/doc/rdoc/more/classes/Association/Kernel.html +8 -8
  303. data/doc/rdoc/more/classes/Autoarray.html +12 -12
  304. data/doc/rdoc/more/classes/BBCode.html +34 -34
  305. data/doc/rdoc/more/classes/BaseX.html +16 -16
  306. data/doc/rdoc/more/classes/BiCrypt.html +67 -67
  307. data/doc/rdoc/more/classes/BinReadable.html +85 -85
  308. data/doc/rdoc/more/classes/BinReadable/ByteOrder.html +25 -25
  309. data/doc/rdoc/more/classes/Binding.html +8 -8
  310. data/doc/rdoc/more/classes/BlankSlate.html +5 -5
  311. data/doc/rdoc/more/classes/Buildable.html +4 -4
  312. data/doc/rdoc/more/classes/BuildingBlock.html +32 -32
  313. data/doc/rdoc/more/classes/Capsule.html +41 -41
  314. data/doc/rdoc/more/classes/Cloneable.html +4 -4
  315. data/doc/rdoc/more/classes/ConsoleUtils.html +22 -22
  316. data/doc/rdoc/more/classes/Coroutine.html +28 -28
  317. data/doc/rdoc/more/classes/Crypt.html +16 -16
  318. data/doc/rdoc/more/classes/CssFilter.html +45 -45
  319. data/doc/rdoc/more/classes/CssTree.html +8 -8
  320. data/doc/rdoc/more/classes/Dictionary.html +228 -228
  321. data/doc/rdoc/more/classes/Downloader.html +56 -56
  322. data/doc/rdoc/more/classes/Duration.html +369 -445
  323. data/doc/rdoc/more/classes/Duration/Numeric.html +389 -0
  324. data/doc/rdoc/more/classes/{CLI/NoCommandError.html → Duration/Time.html} +30 -17
  325. data/doc/rdoc/more/classes/Enumerable.html +114 -51
  326. data/doc/rdoc/more/classes/Enumerable/Elementor.html +16 -16
  327. data/doc/rdoc/more/classes/Enumerable/Enumerator.html +4 -4
  328. data/doc/rdoc/more/classes/Enumerable/Filterable.html +246 -0
  329. data/doc/rdoc/more/classes/EnumerablePass.html +17 -17
  330. data/doc/rdoc/more/classes/{RecursiveDependency.html → Enumerator.html} +7 -4
  331. data/doc/rdoc/more/classes/{CLI.html → Enumerator/Filter.html} +22 -26
  332. data/doc/rdoc/more/classes/Equatable.html +16 -16
  333. data/doc/rdoc/more/classes/Expirable.html +17 -17
  334. data/doc/rdoc/more/classes/FileList.html +125 -125
  335. data/doc/rdoc/more/classes/Fileable.html +14 -14
  336. data/doc/rdoc/more/classes/Fileable/DSL.html +41 -41
  337. data/doc/rdoc/more/classes/Hash.html +16 -162
  338. data/doc/rdoc/more/classes/Hash2Xml.html +4 -4
  339. data/doc/rdoc/more/classes/HtmlFilter.html +9 -9
  340. data/doc/rdoc/more/classes/IORedirect.html +19 -19
  341. data/doc/rdoc/more/classes/InfinityClass.html +36 -36
  342. data/doc/rdoc/more/classes/InfinityClass/Numeric.html +23 -23
  343. data/doc/rdoc/more/classes/Ini.html +37 -37
  344. data/doc/rdoc/more/classes/Instantiable.html +9 -9
  345. data/doc/rdoc/more/classes/Instantize.html +8 -8
  346. data/doc/rdoc/more/classes/Interval.html +187 -187
  347. data/doc/rdoc/more/classes/It.html +12 -12
  348. data/doc/rdoc/more/classes/LRUCache.html +38 -38
  349. data/doc/rdoc/more/classes/LinkedList.html +68 -68
  350. data/doc/rdoc/more/classes/LinkedList/Node.html +4 -4
  351. data/doc/rdoc/more/classes/{DictionaryMatcher.html → Matcher.html} +66 -68
  352. data/doc/rdoc/more/classes/{DictionaryMatcher → Matcher}/MatchData.html +8 -8
  353. data/doc/rdoc/more/classes/{CacheDecorator.html → Memoizer.html} +64 -46
  354. data/doc/rdoc/more/classes/Module.html +182 -361
  355. data/doc/rdoc/more/classes/Multiton.html +12 -12
  356. data/doc/rdoc/more/classes/Multiton/MetaMethods.html +28 -28
  357. data/doc/rdoc/more/classes/Net/SMTP.html +8 -8
  358. data/doc/rdoc/more/classes/NullClass.html +24 -24
  359. data/doc/rdoc/more/classes/Numeric/Multipliers.html +456 -0
  360. data/doc/rdoc/more/classes/ObjectReflection.html +12 -12
  361. data/doc/rdoc/more/classes/OpEsc.html +8 -7
  362. data/doc/rdoc/more/classes/OpenCascade.html +4 -4
  363. data/doc/rdoc/more/classes/OpenCollection.html +8 -8
  364. data/doc/rdoc/more/classes/OpenHash.html +9 -9
  365. data/doc/rdoc/more/classes/{EventHook.html → OpenModule.html} +24 -63
  366. data/doc/rdoc/more/classes/OpenObject.html +95 -95
  367. data/doc/rdoc/more/classes/OpenStructable.html +326 -0
  368. data/doc/rdoc/more/classes/PQueue.html +84 -84
  369. data/doc/rdoc/more/classes/Paramix.html +11 -11
  370. data/doc/rdoc/more/classes/Paramix/Delegator.html +16 -16
  371. data/doc/rdoc/more/classes/PathList.html +8 -8
  372. data/doc/rdoc/more/classes/PathList/Finder.html +8 -8
  373. data/doc/rdoc/more/classes/Platform.html +46 -46
  374. data/doc/rdoc/more/classes/Pool.html +18 -18
  375. data/doc/rdoc/more/classes/Proc.html +9 -9
  376. data/doc/rdoc/more/classes/ProgressBar.html +52 -52
  377. data/doc/rdoc/more/classes/Prototype.html +28 -28
  378. data/doc/rdoc/more/classes/RWDelegator.html +16 -16
  379. data/doc/rdoc/more/classes/Random.html +5 -5
  380. data/doc/rdoc/more/classes/Random/Array.html +37 -37
  381. data/doc/rdoc/more/classes/Random/Hash.html +52 -52
  382. data/doc/rdoc/more/classes/Random/Object.html +4 -4
  383. data/doc/rdoc/more/classes/Random/String.html +34 -34
  384. data/doc/rdoc/more/classes/Random/String/Self.html +9 -9
  385. data/doc/rdoc/more/classes/Recorder.html +16 -16
  386. data/doc/rdoc/more/classes/Reference.html +19 -19
  387. data/doc/rdoc/more/classes/Registerable.html +13 -13
  388. data/doc/rdoc/more/classes/Semaphore.html +36 -36
  389. data/doc/rdoc/more/classes/Settings.html +28 -28
  390. data/doc/rdoc/more/classes/Settings/Setting.html +13 -13
  391. data/doc/rdoc/more/classes/Settings/SettingCollection.html +4 -4
  392. data/doc/rdoc/more/classes/SimpleStringIO.html +8 -8
  393. data/doc/rdoc/more/classes/Snapshot.html +16 -16
  394. data/doc/rdoc/more/classes/Snapshot/ValueHolder.html +12 -12
  395. data/doc/rdoc/more/classes/SparseArray.html +1397 -0
  396. data/doc/rdoc/more/classes/Stash.html +232 -0
  397. data/doc/rdoc/more/classes/String/Mask.html +72 -72
  398. data/doc/rdoc/more/classes/String/Words.html +49 -49
  399. data/doc/rdoc/more/classes/Struct.html +8 -8
  400. data/doc/rdoc/more/classes/SyncArray.html +4 -4
  401. data/doc/rdoc/more/classes/SyncHash.html +4 -4
  402. data/doc/rdoc/more/classes/SyncHash/Delegator.html +28 -28
  403. data/doc/rdoc/more/classes/SyncHash/Inheritor.html +28 -28
  404. data/doc/rdoc/more/classes/System.html +253 -253
  405. data/doc/rdoc/more/classes/Timer.html +48 -48
  406. data/doc/rdoc/more/classes/Timer/Dummy.html +9 -9
  407. data/doc/rdoc/more/classes/TracePoint.html +58 -58
  408. data/doc/rdoc/more/classes/Tuple.html +170 -170
  409. data/doc/rdoc/more/classes/TypeCast/Class.html +4 -4
  410. data/doc/rdoc/more/classes/TypeCast/Object.html +4 -4
  411. data/doc/rdoc/more/classes/Uninheritable.html +6 -6
  412. data/doc/rdoc/more/classes/VersionNumber.html +57 -57
  413. data/doc/rdoc/more/classes/XOXO.html +9 -9
  414. data/doc/rdoc/more/classes/ZipUtils.html +251 -118
  415. data/doc/rdoc/more/classes/ZipUtils/DryRun.html +203 -35
  416. data/doc/rdoc/more/classes/ZipUtils/NoWrite.html +203 -35
  417. data/doc/rdoc/more/classes/ZipUtils/Verbose.html +173 -35
  418. data/doc/rdoc/more/created.rid +1 -1
  419. data/doc/rdoc/more/files/README.html +10 -16
  420. data/doc/rdoc/more/files/lib/more/facets/attr_rb.html +1 -1
  421. data/doc/rdoc/more/files/lib/more/facets/buildable_rb.html +1 -1
  422. data/doc/rdoc/more/files/lib/more/facets/consoleutils_rb.html +1 -18
  423. data/doc/rdoc/more/files/lib/more/facets/dependency_rb.html +1 -1
  424. data/doc/rdoc/more/files/lib/more/facets/duration_rb.html +1 -41
  425. data/doc/rdoc/more/files/lib/more/facets/elementor_rb.html +2 -1
  426. data/doc/rdoc/more/files/lib/more/facets/enumerablepass_rb.html +2 -1
  427. data/doc/rdoc/more/files/lib/more/facets/{fileshell_rb.html → filter_rb.html} +6 -5
  428. data/doc/rdoc/more/files/lib/more/facets/inheritor_rb.html +3 -28
  429. data/doc/rdoc/more/files/lib/more/facets/iteration_rb.html +1 -1
  430. data/doc/rdoc/more/files/lib/more/facets/kernel/meta_rb.html +1 -1
  431. data/doc/rdoc/more/files/lib/more/facets/matcher_rb.html +97 -0
  432. data/doc/rdoc/more/files/lib/more/facets/memoize_rb.html +7 -4
  433. data/doc/rdoc/more/files/lib/more/facets/{cachedecorator_rb.html → memoizer_rb.html} +23 -49
  434. data/doc/rdoc/more/files/lib/more/facets/multipliers_rb.html +2 -18
  435. data/doc/rdoc/more/files/lib/more/facets/nilstatus_rb.html +1 -1
  436. data/doc/rdoc/{core/files/lib/core/facets/callstack_rb.html → more/files/lib/more/facets/openmodule_rb.html} +4 -4
  437. data/doc/rdoc/more/files/lib/more/facets/opesc_rb.html +1 -1
  438. data/doc/rdoc/more/files/lib/more/facets/ostructable_rb.html +92 -0
  439. data/doc/rdoc/more/files/lib/more/facets/pathlist_rb.html +1 -1
  440. data/doc/rdoc/more/files/lib/more/facets/snapshot_rb.html +2 -2
  441. data/doc/rdoc/more/files/lib/more/facets/sparse_array_rb.html +92 -0
  442. data/doc/rdoc/more/files/lib/more/facets/stash_rb.html +166 -0
  443. data/doc/rdoc/more/files/lib/more/facets/string/words_rb.html +1 -1
  444. data/doc/rdoc/more/files/lib/more/facets/succ_rb.html +1 -1
  445. data/doc/rdoc/more/files/lib/more/facets/thread_rb.html +1 -1
  446. data/doc/rdoc/more/files/lib/more/facets/ziputils_rb.html +6 -34
  447. data/doc/rdoc/more/fr_class_index.html +13 -17
  448. data/doc/rdoc/more/fr_file_index.html +7 -15
  449. data/doc/rdoc/more/fr_method_index.html +1079 -1003
  450. data/doc/rdoc/more/index.html +1 -1
  451. data/lib/core/facets/array/conjoin.rb +1 -1
  452. data/lib/core/facets/array/delete.rb +3 -60
  453. data/lib/core/facets/array/delete_unless.rb +15 -0
  454. data/lib/core/facets/array/delete_values.rb +50 -0
  455. data/lib/core/facets/array/index.rb +0 -26
  456. data/lib/core/facets/array/indexable.rb +2 -2
  457. data/lib/core/facets/array/merge.rb +1 -1
  458. data/lib/core/facets/array/only.rb +1 -2
  459. data/lib/core/facets/array/pad.rb +2 -2
  460. data/lib/core/facets/array/permutation.rb +1 -1
  461. data/lib/core/facets/array/product.rb +2 -2
  462. data/lib/core/facets/array/rotate.rb +2 -4
  463. data/lib/core/facets/array/select.rb +1 -1
  464. data/lib/core/facets/array/splice.rb +1 -1
  465. data/lib/core/facets/array/stackable.rb +2 -2
  466. data/lib/core/facets/binding/caller.rb +2 -7
  467. data/lib/core/facets/binding/callstack.rb +1 -0
  468. data/lib/core/facets/binding/defined.rb +0 -1
  469. data/lib/core/facets/bitmask.rb +6 -9
  470. data/lib/core/facets/class/cattr.rb +6 -9
  471. data/lib/core/facets/class/descendents.rb +0 -2
  472. data/lib/core/facets/class/prepend.rb +3 -4
  473. data/lib/core/facets/class/to_proc.rb +0 -20
  474. data/lib/core/facets/comparable/at_least.rb +1 -0
  475. data/lib/core/facets/comparable/at_most.rb +1 -0
  476. data/lib/core/facets/comparable/bound.rb +1 -65
  477. data/lib/core/facets/comparable/cap.rb +34 -0
  478. data/lib/core/facets/comparable/clip.rb +38 -0
  479. data/lib/core/facets/comparable/cmp.rb +3 -3
  480. data/lib/core/facets/comparable/comparable.rb +1 -1
  481. data/lib/core/facets/dir/ascend.rb +2 -5
  482. data/lib/core/facets/dir/multiglob.rb +0 -2
  483. data/lib/core/facets/dir/recurse.rb +1 -2
  484. data/lib/core/facets/enumerable/accumulate.rb +2 -0
  485. data/lib/core/facets/enumerable/cluster_by.rb +1 -1
  486. data/lib/core/facets/enumerable/collect.rb +2 -2
  487. data/lib/core/facets/enumerable/commonality.rb +1 -1
  488. data/lib/core/facets/enumerable/count.rb +1 -1
  489. data/lib/core/facets/enumerable/divide.rb +1 -1
  490. data/lib/core/facets/enumerable/duplicates.rb +2 -2
  491. data/lib/core/facets/enumerable/each_by.rb +1 -1
  492. data/lib/core/facets/enumerable/entropy.rb +2 -2
  493. data/lib/core/facets/enumerable/frequency.rb +1 -1
  494. data/lib/core/facets/enumerable/graph.rb +1 -0
  495. data/lib/core/facets/enumerable/group_by.rb +1 -1
  496. data/lib/core/facets/enumerable/inject.rb +2 -3
  497. data/lib/core/facets/enumerable/map_send.rb +15 -3
  498. data/lib/core/facets/enumerable/mash.rb +4 -5
  499. data/lib/core/facets/enumerable/mode.rb +1 -1
  500. data/lib/core/facets/enumerable/modulate.rb +2 -2
  501. data/lib/core/facets/enumerable/none.rb +1 -1
  502. data/lib/core/facets/enumerable/occur.rb +0 -2
  503. data/lib/core/facets/enumerable/one.rb +1 -1
  504. data/lib/core/facets/enumerable/probability.rb +1 -1
  505. data/lib/core/facets/enumerable/sum.rb +1 -1
  506. data/lib/core/facets/enumerable/take.rb +20 -0
  507. data/lib/core/facets/enumerable/uniq_by.rb +0 -2
  508. data/lib/core/facets/exception/detail.rb +1 -1
  509. data/lib/core/facets/exception/suppress.rb +1 -2
  510. data/lib/core/facets/file/append.rb +1 -1
  511. data/lib/core/facets/file/create.rb +1 -1
  512. data/lib/core/facets/file/null.rb +1 -1
  513. data/lib/core/facets/file/read.rb +3 -3
  514. data/lib/core/facets/file/rewrite.rb +1 -1
  515. data/lib/core/facets/file/rootname.rb +1 -1
  516. data/lib/core/facets/file/split_all.rb +19 -0
  517. data/lib/core/facets/file/split_root.rb +3 -0
  518. data/lib/core/facets/file/write.rb +1 -1
  519. data/lib/core/facets/file/writelines.rb +1 -2
  520. data/lib/core/facets/filetest/root.rb +1 -1
  521. data/lib/core/facets/hash/alias.rb +1 -1
  522. data/lib/core/facets/hash/autonew.rb +1 -17
  523. data/lib/core/facets/hash/collate.rb +1 -1
  524. data/lib/core/facets/hash/delete.rb +3 -3
  525. data/lib/core/facets/hash/insert.rb +1 -1
  526. data/lib/core/facets/hash/inverse.rb +1 -1
  527. data/lib/core/facets/hash/join.rb +1 -1
  528. data/lib/core/facets/hash/keys.rb +3 -3
  529. data/lib/core/facets/hash/op_add.rb +1 -1
  530. data/lib/core/facets/hash/op_and.rb +1 -1
  531. data/lib/core/facets/hash/op_mul.rb +1 -1
  532. data/lib/core/facets/hash/op_or.rb +1 -1
  533. data/lib/core/facets/hash/op_push.rb +1 -1
  534. data/lib/core/facets/hash/op_sub.rb +1 -1
  535. data/lib/core/facets/hash/rekey.rb +11 -7
  536. data/lib/core/facets/hash/replace_each.rb +16 -0
  537. data/lib/core/facets/hash/select.rb +1 -2
  538. data/lib/{more → core}/facets/hash/stringify_keys.rb +0 -0
  539. data/lib/core/facets/hash/symbolize_keys.rb +94 -0
  540. data/lib/core/facets/hash/to_options.rb +1 -0
  541. data/lib/core/facets/hash/to_struct.rb +1 -1
  542. data/lib/core/facets/hash/traverse.rb +2 -2
  543. data/lib/core/facets/hash/update.rb +5 -80
  544. data/lib/core/facets/hash/update_each.rb +18 -0
  545. data/lib/core/facets/hash/update_keys.rb +20 -0
  546. data/lib/core/facets/hash/update_values.rb +20 -0
  547. data/lib/core/facets/hash/weave.rb +1 -1
  548. data/lib/core/facets/hash/zipnew.rb +17 -1
  549. data/lib/core/facets/integer/factorial.rb +1 -1
  550. data/lib/core/facets/integer/multiple.rb +1 -1
  551. data/lib/core/facets/integer/odd.rb +2 -2
  552. data/lib/core/facets/kernel/__here__.rb +8 -0
  553. data/lib/core/facets/kernel/as.rb +2 -2
  554. data/lib/core/facets/kernel/attr_singleton.rb +5 -5
  555. data/lib/core/facets/{callstack.rb → kernel/callstack.rb} +1 -1
  556. data/lib/core/facets/kernel/complete.rb +1 -1
  557. data/lib/core/facets/kernel/constant.rb +1 -1
  558. data/lib/core/facets/kernel/d.rb +1 -5
  559. data/lib/core/facets/kernel/demo.rb +2 -2
  560. data/lib/core/facets/kernel/ergo.rb +2 -2
  561. data/lib/core/facets/kernel/instance_class.rb +1 -1
  562. data/lib/core/facets/kernel/instance_variables.rb +2 -4
  563. data/lib/core/facets/kernel/not_nil.rb +1 -1
  564. data/lib/core/facets/kernel/object_send.rb +1 -1
  565. data/lib/core/facets/kernel/p.rb +1 -1
  566. data/lib/core/facets/kernel/populate.rb +2 -2
  567. data/lib/core/facets/kernel/qua_class.rb +2 -2
  568. data/lib/core/facets/kernel/resc.rb +1 -1
  569. data/lib/core/facets/kernel/respond.rb +1 -1
  570. data/lib/core/facets/kernel/returning.rb +1 -1
  571. data/lib/core/facets/kernel/silence.rb +4 -4
  572. data/lib/core/facets/kernel/try.rb +5 -3
  573. data/lib/core/facets/matchdata/match.rb +1 -1
  574. data/lib/core/facets/matchdata/matchset.rb +2 -2
  575. data/lib/core/facets/metaid.rb +5 -5
  576. data/lib/core/facets/module/abstract.rb +1 -1
  577. data/lib/core/facets/module/alias_accessor.rb +3 -3
  578. data/lib/core/facets/module/alias_method_chain.rb +1 -2
  579. data/lib/core/facets/module/alias_module_function.rb +1 -1
  580. data/lib/core/facets/module/ancestor.rb +1 -1
  581. data/lib/core/facets/module/basename.rb +1 -1
  582. data/lib/core/facets/module/conflict.rb +1 -2
  583. data/lib/core/facets/module/include_function_module.rb +1 -1
  584. data/lib/core/facets/module/instance_methods.rb +4 -6
  585. data/lib/core/facets/module/is.rb +2 -2
  586. data/lib/core/facets/module/modspace.rb +1 -1
  587. data/lib/core/facets/module/module_load.rb +2 -2
  588. data/lib/core/facets/module/nesting.rb +1 -1
  589. data/lib/core/facets/module/op.rb +3 -6
  590. data/lib/core/facets/module/prepend.rb +1 -1
  591. data/lib/core/facets/module/redefine_method.rb +1 -1
  592. data/lib/core/facets/module/rename_method.rb +1 -1
  593. data/lib/core/facets/module/revise.rb +2 -2
  594. data/lib/core/facets/module/spacename.rb +1 -1
  595. data/lib/core/facets/module/wrap_method.rb +1 -1
  596. data/lib/core/facets/nilclass/to_f.rb +1 -1
  597. data/lib/core/facets/numeric/approx.rb +1 -1
  598. data/lib/core/facets/numeric/distance.rb +1 -1
  599. data/lib/core/facets/numeric/round.rb +3 -6
  600. data/lib/core/facets/objectspace.rb +6 -0
  601. data/lib/core/facets/objectspace/classes.rb +11 -0
  602. data/lib/core/facets/proc/bind.rb +1 -1
  603. data/lib/core/facets/proc/compose.rb +2 -2
  604. data/lib/core/facets/proc/to_method.rb +1 -1
  605. data/lib/core/facets/proc/update.rb +1 -1
  606. data/lib/core/facets/range/combine.rb +2 -2
  607. data/lib/core/facets/range/overlap.rb +1 -2
  608. data/lib/core/facets/range/within.rb +2 -4
  609. data/lib/core/facets/regexp/arity.rb +1 -1
  610. data/lib/core/facets/string/align.rb +3 -3
  611. data/lib/core/facets/string/bracket.rb +6 -6
  612. data/lib/core/facets/string/camelcase.rb +1 -1
  613. data/lib/core/facets/string/capitalized.rb +3 -3
  614. data/lib/core/facets/string/chars.rb +1 -1
  615. data/lib/core/facets/string/chomp.rb +2 -2
  616. data/lib/core/facets/string/cleave.rb +1 -1
  617. data/lib/core/facets/string/compress_lines.rb +17 -0
  618. data/lib/core/facets/string/contains.rb +7 -0
  619. data/lib/core/facets/string/divide.rb +1 -1
  620. data/lib/core/facets/string/expand_tab.rb +35 -0
  621. data/lib/core/facets/string/fold.rb +1 -1
  622. data/lib/core/facets/string/indent.rb +25 -0
  623. data/lib/core/facets/string/interpolate.rb +1 -1
  624. data/lib/core/facets/string/line_wrap.rb +1 -1
  625. data/lib/core/facets/string/lines.rb +1 -2
  626. data/lib/core/facets/string/margin.rb +30 -0
  627. data/lib/core/facets/string/methodize.rb +1 -1
  628. data/lib/core/facets/string/mscan.rb +1 -1
  629. data/lib/core/facets/string/natcmp.rb +1 -2
  630. data/lib/core/facets/string/nchar.rb +0 -2
  631. data/lib/core/facets/string/op_sub.rb +1 -1
  632. data/lib/core/facets/string/outdent.rb +1 -0
  633. data/lib/core/facets/string/range.rb +4 -5
  634. data/lib/core/facets/string/rewrite.rb +1 -1
  635. data/lib/core/facets/string/shatter.rb +1 -1
  636. data/lib/core/facets/string/snakecase.rb +1 -1
  637. data/lib/core/facets/string/splice.rb +2 -2
  638. data/lib/core/facets/string/start_with.rb +2 -4
  639. data/lib/core/facets/string/tab.rb +9 -92
  640. data/lib/core/facets/string/tabto.rb +19 -0
  641. data/lib/core/facets/string/titlecase.rb +1 -1
  642. data/lib/core/facets/string/to_re.rb +2 -2
  643. data/lib/core/facets/string/word_wrap.rb +2 -4
  644. data/lib/core/facets/struct.rb +6 -0
  645. data/lib/core/facets/struct/attributes.rb +11 -0
  646. data/lib/core/facets/symbol/chomp.rb +2 -2
  647. data/lib/core/facets/symbol/generate.rb +1 -1
  648. data/lib/core/facets/symbol/not.rb +2 -2
  649. data/lib/core/facets/symbol/succ.rb +1 -1
  650. data/lib/core/facets/symbol/to_proc.rb +2 -3
  651. data/lib/core/facets/time/advance.rb +2 -1
  652. data/lib/core/facets/time/elapse.rb +1 -1
  653. data/lib/core/facets/time/hence.rb +16 -13
  654. data/lib/core/facets/time/stamp.rb +2 -2
  655. data/lib/core/facets/to_hash.rb +1 -1
  656. data/lib/core/facets/unboundmethod/arguments.rb +1 -1
  657. data/lib/core/facets/unboundmethod/name.rb +1 -1
  658. data/lib/lore/facets/date.rb +2 -2
  659. data/lib/lore/facets/enumerator.rb +67 -0
  660. data/lib/lore/facets/ostruct.rb +3 -7
  661. data/lib/more/facets/attr.rb +10 -9
  662. data/lib/more/facets/consoleutils.rb +1 -15
  663. data/lib/more/facets/dependency.rb +1 -1
  664. data/lib/more/facets/duration.rb +271 -525
  665. data/lib/more/facets/filter.rb +121 -0
  666. data/lib/more/facets/inheritor.rb +37 -58
  667. data/lib/more/facets/iteration.rb +1 -1
  668. data/lib/more/facets/kernel/meta.rb +1 -1
  669. data/lib/more/facets/{dictionarymatcher.rb → matcher.rb} +15 -11
  670. data/lib/more/facets/memoize.rb +9 -12
  671. data/lib/more/facets/memoizer.rb +74 -0
  672. data/lib/more/facets/multipliers.rb +54 -66
  673. data/lib/more/facets/nilstatus.rb +3 -2
  674. data/lib/more/facets/openmodule.rb +15 -0
  675. data/lib/more/facets/opesc.rb +1 -1
  676. data/lib/more/facets/ostructable.rb +212 -0
  677. data/lib/more/facets/pathlist.rb +1 -0
  678. data/lib/more/facets/sparse_array.rb +809 -0
  679. data/lib/more/facets/stash.rb +66 -0
  680. data/lib/more/facets/string/words.rb +8 -11
  681. data/lib/more/facets/succ.rb +3 -3
  682. data/lib/more/facets/thread.rb +2 -2
  683. data/lib/more/facets/ziputils.rb +238 -97
  684. data/test/core/array/test_index.rb +17 -0
  685. data/test/core/class/test_cattr.rb +1 -1
  686. data/test/core/class/test_to_proc.rb +13 -0
  687. data/test/core/comparable/test_cap.rb +25 -0
  688. data/test/core/comparable/{test_bound.rb → test_clip.rb} +1 -20
  689. data/test/core/file/test_split_all.rb +32 -0
  690. data/test/core/hash/test_op_mul.rb +1 -1
  691. data/test/core/hash/test_op_push.rb +7 -0
  692. data/test/core/hash/test_replace_each.rb +14 -0
  693. data/test/core/hash/test_update_each.rb +13 -0
  694. data/test/core/hash/test_update_keys.rb +18 -0
  695. data/test/core/hash/test_update_values.rb +12 -0
  696. data/test/core/kernel/test_callstack.rb +1 -1
  697. data/test/core/string/test_indent.rb +13 -0
  698. data/test/core/string/test_margin.rb +100 -0
  699. data/test/core/string/test_outdent.rb +65 -0
  700. data/test/core/string/test_tab.rb +1 -162
  701. data/test/core/string/test_tabto.rb +13 -0
  702. data/test/{more → core}/test_metaid.rb +8 -8
  703. data/test/core/time/test_hence.rb +118 -4
  704. data/test/core/unboundmethod/test_name.rb +1 -1
  705. data/test/more/{test_arguments.rb → test_argvector.rb} +8 -12
  706. data/test/more/test_filter.rb +87 -0
  707. data/test/more/test_memoize.rb +11 -9
  708. data/test/more/test_sparsearray.rb +279 -0
  709. metadata +741 -725
  710. data/demo/bench/bench_load.rb +0 -56
  711. data/demo/bench/enumerable/bench_collect.rb +0 -84
  712. data/demo/bench/enumerable/bench_count.rb +0 -58
  713. data/demo/bench/general/bench_calls.rb +0 -74
  714. data/demo/bench/general/bench_includes.rb +0 -25
  715. data/demo/bench/general/bench_methods.rb +0 -17
  716. data/demo/bench/general/bench_pathname.rb +0 -24
  717. data/demo/bench/general/bench_range.rb +0 -64
  718. data/demo/bench/general/bench_return.rb +0 -56
  719. data/demo/bench/general/bench_yeild.rb +0 -75
  720. data/demo/bench/general/comment_loading/bench.rb +0 -46
  721. data/demo/bench/general/comment_loading/comments_begin.rb +0 -109
  722. data/demo/bench/general/comment_loading/comments_end.rb +0 -127
  723. data/demo/bench/general/comment_loading/comments_none.rb +0 -1
  724. data/demo/bench/general/comment_loading/comments_sharp.rb +0 -125
  725. data/demo/bench/integer/bench_factorial.rb +0 -31
  726. data/demo/sample/annotations/annotations1.rb +0 -22
  727. data/demo/sample/ansicolor/cdiff.rb +0 -20
  728. data/demo/sample/ansicolor/example.rb +0 -82
  729. data/doc/book/notes.rdoc +0 -9
  730. data/doc/rdoc/more/classes/BigDuration.html +0 -323
  731. data/doc/rdoc/more/classes/CLI/Arguments.html +0 -488
  732. data/doc/rdoc/more/classes/CLI/Command.html +0 -316
  733. data/doc/rdoc/more/classes/Chain.html +0 -206
  734. data/doc/rdoc/more/classes/FileShell.html +0 -743
  735. data/doc/rdoc/more/classes/TagIterator.html +0 -581
  736. data/doc/rdoc/more/classes/UploadUtils.html +0 -497
  737. data/doc/rdoc/more/classes/Weekdays.html +0 -218
  738. data/doc/rdoc/more/files/lib/more/facets/annotations_rb.html +0 -180
  739. data/doc/rdoc/more/files/lib/more/facets/arguments_rb.html +0 -142
  740. data/doc/rdoc/more/files/lib/more/facets/cattr_rb.html +0 -125
  741. data/doc/rdoc/more/files/lib/more/facets/chain_rb.html +0 -114
  742. data/doc/rdoc/more/files/lib/more/facets/command_rb.html +0 -170
  743. data/doc/rdoc/more/files/lib/more/facets/eventhook_rb.html +0 -141
  744. data/doc/rdoc/more/files/lib/more/facets/tagiterator_rb.html +0 -111
  745. data/doc/rdoc/more/files/lib/more/facets/times_rb.html +0 -163
  746. data/doc/rdoc/more/files/lib/more/facets/uploadutils_rb.html +0 -176
  747. data/lib/more/facets/annotations.rb +0 -302
  748. data/lib/more/facets/arguments.rb +0 -365
  749. data/lib/more/facets/bytes.rb +0 -175
  750. data/lib/more/facets/cachedecorator.rb +0 -117
  751. data/lib/more/facets/chain.rb +0 -58
  752. data/lib/more/facets/command.rb +0 -439
  753. data/lib/more/facets/eventhook.rb +0 -132
  754. data/lib/more/facets/fileshell.rb +0 -202
  755. data/lib/more/facets/hash/symbolize_keys.rb +0 -94
  756. data/lib/more/facets/tagiter.rb +0 -366
  757. data/lib/more/facets/times.rb +0 -431
  758. data/lib/more/facets/uploadutils.rb +0 -464
  759. data/test/core/hash/test_update.rb +0 -46
  760. data/test/more/test_annotations.rb +0 -120
  761. data/test/more/test_bytes.rb +0 -71
  762. data/test/more/test_command.rb +0 -69
  763. data/test/more/test_times.rb +0 -89
@@ -19,7 +19,7 @@ class Time
19
19
 
20
20
  # Produce time stamp for Time.now. See #stamp.
21
21
  #
22
- # CREDIT: Trans
22
+ # CREDIT: Trans
23
23
 
24
24
  def self.stamp(*args)
25
25
  now.stamp(*args)
@@ -31,7 +31,7 @@ class Time
31
31
  #
32
32
  # Supported formats come from the Time::FORMAT constant.
33
33
  #
34
- # CREDIT: Trans
34
+ # CREDIT: Trans
35
35
 
36
36
  def stamp(fmt = nil)
37
37
  unless String === fmt
@@ -15,7 +15,7 @@ class Array
15
15
  #
16
16
  # array1.zip(array2).to_h
17
17
  #
18
- # CREDIT: Trans
18
+ # CREDIT: Trans
19
19
 
20
20
  def to_h(arrayed=nil)
21
21
  h = {}
@@ -16,7 +16,7 @@ class UnboundMethod
16
16
  #
17
17
  # When defaults are used the arguments must end in "*args".
18
18
  #
19
- # CREDIT: Trans
19
+ # CREDIT: Trans
20
20
 
21
21
  def arguments
22
22
  ar = arity
@@ -13,7 +13,7 @@ unless (RUBY_VERSION[0,3] == '1.9')
13
13
  #
14
14
  # meth.name #=> "foo"
15
15
  #
16
- # CREDIT: Trans
16
+ # CREDIT: Trans
17
17
 
18
18
  def name
19
19
  i = to_s.rindex('#')
@@ -84,7 +84,7 @@ class Date
84
84
  #
85
85
  # Date.new(2004,2).days_in_month #=> 28
86
86
  #
87
- # CREDIT: Ken Kunz.
87
+ # CREDIT: Ken Kunz.
88
88
 
89
89
  def days_in_month
90
90
  Date.civil(year, month, -1).day
@@ -96,7 +96,7 @@ class Date
96
96
 
97
97
  # Get the month name for this date object
98
98
  #
99
- # CREDIT Benjamin Oakes
99
+ # CREDIT: Benjamin Oakes
100
100
 
101
101
  def month_name
102
102
  MONTHNAMES[self.month]
@@ -0,0 +1,67 @@
1
+ require 'enumerator'
2
+
3
+ if RUBY_VERSION < "1.9"
4
+
5
+ module Enumerable
6
+
7
+ class Enumerator
8
+
9
+ alias :old_initialize :initialize
10
+
11
+ # Provides the ruby-1.9 block form of Enumerator, where you can write:
12
+ #
13
+ # obj = Enumerator.new do |yielder|
14
+ # .. do stuff
15
+ # yielder.yield data # or: yielder << data
16
+ # .. etc
17
+ # end
18
+ #
19
+ # When obj.each is called, the block is run once. It should call
20
+ # yielder.yield with each item it wishes to generate.
21
+ #
22
+ # Example:
23
+ #
24
+ # fib = Enumerator.new { |y|
25
+ # a = b = 1
26
+ # loop {
27
+ # y << a
28
+ # a, b = b, a + b
29
+ # }
30
+ # }
31
+ #
32
+ # assert_equal [1, 1, 2, 3, 5, 8, 13, 21, 34, 55], fib.take(10)
33
+
34
+ def initialize(*args, &block)
35
+ if block_given?
36
+ @body = block
37
+ old_initialize(self, :_start)
38
+ else
39
+ old_initialize(*args)
40
+ end
41
+ end
42
+
43
+ def _start(*args,&receiver) #:nodoc:
44
+ @body.call(Yielder.new(receiver), *args)
45
+ end
46
+
47
+ # Wrapper to allow yielder.yield(output) or yielder << output
48
+ # in the same way as ruby-1.9
49
+
50
+ class Yielder #:nodoc:
51
+ def initialize(proc)
52
+ @proc = proc
53
+ end
54
+ def yield(*args)
55
+ @proc[*args]
56
+ end
57
+ alias :<< :yield
58
+ end
59
+ end
60
+
61
+ end
62
+
63
+ # For ruby-1.9 compatibility, define Enumerator class at top level
64
+ Enumerator = Enumerable::Enumerator unless defined? ::Enumerator
65
+
66
+ end # if RUBY_VERSION
67
+
@@ -53,9 +53,7 @@ class OpenStruct
53
53
  # A setter block versus a defualt block is determined by the arity of
54
54
  # the block. You can not provide both at the same time.
55
55
  #
56
- # CREDIT Noah Gibbs
57
- # CREDIT Gavin Sinclair
58
- # CREDIT 7rans
56
+ # CREDIT: Noah Gibbs, Gavin Sinclair
59
57
  #
60
58
  def initialize(hash=nil, &block)
61
59
  if block && block.arity==2
@@ -108,7 +106,7 @@ class OpenStruct
108
106
  @table[key]=val
109
107
  end
110
108
 
111
- # CREDIT Robert J. Berger <rberger AT ibd.com>
109
+ # CREDIT: Robert J. Berger <rberger AT ibd.com>
112
110
  # Thanks for reporting issues that this method resolved.
113
111
 
114
112
  # Provides access to an OpenStruct's inner table.
@@ -200,9 +198,7 @@ class Hash
200
198
  OpenStruct.new(self)
201
199
  end
202
200
 
203
- # CREDIT Alison Rowland
204
- # CREDIT Jamie Macey
205
- # CREDIT Mat Schaffer
201
+ # CREDIT Alison Rowland, Jamie Macey, Mat Schaffer
206
202
 
207
203
  #--
208
204
  # Special thanks to Alison Rowland, Jamie Macey and Mat Schaffer
@@ -3,7 +3,7 @@ class Module
3
3
  # Like attr_writer, but the writer method validates the
4
4
  # setting against the given block.
5
5
  #
6
- # CREDIT: ?
6
+ # CREDIT: ?
7
7
 
8
8
  def attr_validator(*symbols, &validator)
9
9
  made = []
@@ -48,7 +48,7 @@ class Module
48
48
  # end
49
49
  # end
50
50
  #
51
- # CREDIT: Trans
51
+ # CREDIT: Trans
52
52
 
53
53
  def attr_setter(*args)
54
54
  code, made = '', []
@@ -76,7 +76,7 @@ class Module
76
76
  # x.b = 1
77
77
  # x.a #=> 1
78
78
  #
79
- # CREDIT: Trans
79
+ # CREDIT: Trans
80
80
 
81
81
  def alias_setter(*args)
82
82
  args = args - [orig]
@@ -102,7 +102,7 @@ class Module
102
102
  # self
103
103
  # end
104
104
  #
105
- # CREDIT: Trans
105
+ # CREDIT: Trans
106
106
 
107
107
  def attr_accessor!(*args)
108
108
  attr_reader!(*args) + attr_writer!(*args)
@@ -112,7 +112,7 @@ class Module
112
112
 
113
113
  # Create aliases for flag accessors.
114
114
  #
115
- # CREDIT: Trans
115
+ # CREDIT: Trans
116
116
 
117
117
  def alias_accessor!(*args)
118
118
  orig = args.last
@@ -135,7 +135,7 @@ class Module
135
135
  # def a?
136
136
  # @a ? true : @a
137
137
  # end
138
-
138
+ #
139
139
  def attr_reader!(*args)
140
140
  code, made = '', []
141
141
  args.each do |a|
@@ -154,7 +154,7 @@ class Module
154
154
 
155
155
  # Create aliases for flag reader.
156
156
  #
157
- # CREDIT: Trans
157
+ # CREDIT: Trans
158
158
 
159
159
  def alias_reader!(*args)
160
160
  orig = args.last
@@ -177,7 +177,7 @@ class Module
177
177
  # @a = value
178
178
  # self
179
179
  # end
180
-
180
+ #
181
181
  def attr_writer!(*args)
182
182
  code, made = '', []
183
183
  args.each do |a|
@@ -195,7 +195,7 @@ class Module
195
195
 
196
196
  # Create aliases for flag writer.
197
197
  #
198
- # CREDIT: Trans
198
+ # CREDIT: Trans
199
199
 
200
200
  def alias_writer!(*args)
201
201
  orig = args.last
@@ -206,3 +206,4 @@ class Module
206
206
  end
207
207
 
208
208
  end
209
+
@@ -1,18 +1,4 @@
1
- # = Console Utilities
2
- #
3
- # ConsoleUtils provides methods that are
4
- # generally useful in the context of
5
- # creating console output.
6
- #
7
- # = Authors
8
- #
9
- # * Thomas Sawyer
10
- #
11
- # == Copying
12
- #
13
- # Copyright (c) 2006,2007 Thomas Sawyer
14
- # Ruby/GPL
15
-
1
+ warn "WARNING: facets/consoleutils.rb will be deprecated. Use alternate solution, such as Clio, for future versions."
16
2
 
17
3
  # = ConsoleUtils
18
4
  #
@@ -142,7 +142,7 @@ class Module
142
142
 
143
143
  end
144
144
 
145
- class RecursiveDependency < StandardError; end
145
+ #class RecursiveDependency < StandardError; end
146
146
 
147
147
 
148
148
  #class Module
@@ -1,540 +1,286 @@
1
- # = Duration
2
- #
3
- # Duration is a simple class that provides ways of easily manipulating durations
4
- # (timespans) and formatting them as well.
5
- #
6
- # require 'duration'
7
- # => true
8
- # d = Duration.new(60 * 60 * 24 * 10 + 120 + 30)
9
- # => #<Duration: 1 week, 3 days, 2 minutes and 30 seconds>
10
- # d.to_s
11
- # => "1 week, 3 days, 2 minutes and 30 seconds"
12
- # [d.weeks, d.days]
13
- # => [1, 3]
14
- # d.days = 7; d
15
- # => #<Duration: 2 weeks, 2 minutes and 30 seconds>
16
- # d.strftime('%w w, %d d, %h h, %m m, %s s')
17
- # => "2 w, 0 d, 0 h, 2 m, 30 s"
18
- #
19
- # == Author
20
- #
21
- # * Matthew Harris (mailto:shugotenshi@gmail.com)
22
- #
23
- # == Notes
24
- #
25
- # * This library comes from the orginal Duration project.
26
- # See: http://www.rubyforge.org/projects/duration
27
- #
28
- # == Copying
29
- #
30
- # Copyright (c) 2006 Matthew Harris <shugotenshi at gmail.com>
31
-
32
- # = Duration
33
- #
34
- # Duration is a simple class that provides ways of easily manipulating durations
35
- # (timespans) and formatting them as well.
36
- #
37
- # require 'duration'
38
- # => true
39
- # d = Duration.new(60 * 60 * 24 * 10 + 120 + 30)
40
- # => #<Duration: 1 week, 3 days, 2 minutes and 30 seconds>
41
- # d.to_s
42
- # => "1 week, 3 days, 2 minutes and 30 seconds"
43
- # [d.weeks, d.days]
44
- # => [1, 3]
45
- # d.days = 7; d
46
- # => #<Duration: 2 weeks, 2 minutes and 30 seconds>
47
- # d.strftime('%w w, %d d, %h h, %m m, %s s')
48
- # => "2 w, 0 d, 0 h, 2 m, 30 s"
49
-
50
1
  class Duration
51
- include Comparable
52
- include Enumerable
53
-
54
- attr_reader :total, :weeks, :days, :hours, :minutes
55
-
56
- WEEK = 60 * 60 * 24 * 7
57
- DAY = 60 * 60 * 24
58
- HOUR = 60 * 60
59
- MINUTE = 60
60
- SECOND = 1
61
-
62
- # Initialize Duration class.
63
- #
64
- # *Example*
65
- #
66
- # d = Duration.new(60 * 60 * 24 * 10 + 120 + 30)
67
- # => #<Duration: 1 week, 3 days, 2 minutes and 30 seconds>
68
- # d = Duration.new(:weeks => 1, :days => 3, :minutes => 2, :seconds => 30)
69
- # => #<Duration: 1 week, 3 days, 2 minutes and 30 seconds>
70
- #
71
- def initialize(seconds_or_attr = 0)
72
- if seconds_or_attr.kind_of? Hash
73
- # Part->time map table.
74
- h = {:weeks => WEEK, :days => DAY, :hours => HOUR, :minutes => MINUTE, :seconds => SECOND}
75
-
76
- # Loop through each valid part, ignore all others.
77
- seconds = seconds_or_attr.inject(0) do |sec, args|
78
- # Grab the part of the duration (week, day, whatever) and the number of seconds for it.
79
- part, time = args
80
-
81
- # Map each part to their number of seconds and the given value.
82
- # {:weeks => 2} maps to h[:weeks] -- so... weeks = WEEK * 2
83
- if h.key?(prt = part.to_s.to_sym) then sec + time * h[prt] else 0 end
84
- end
85
- else
86
- seconds = seconds_or_attr
87
- end
88
-
89
- @total, array = seconds.to_f.round, []
90
- @seconds = [WEEK, DAY, HOUR, MINUTE].inject(@total) do |left, part|
91
- array << left / part; left % part
92
- end
93
-
94
- @weeks, @days, @hours, @minutes = array
95
- end
96
-
97
- # Format duration.
98
- #
99
- # *Identifiers*
100
- #
101
- # %w -- Number of weeks
102
- # %d -- Number of days
103
- # %h -- Number of hours
104
- # %m -- Number of minutes
105
- # %s -- Number of seconds
106
- # %t -- Total number of seconds
107
- # %x -- Duration#to_s
108
- # %% -- Literal `%' character
109
- #
110
- # *Example*
111
- #
112
- # d = Duration.new(:weeks => 10, :days => 7)
113
- # => #<Duration: 11 weeks>
114
- # d.strftime("It's been %w weeks!")
115
- # => "It's been 11 weeks!"
116
- #
117
- def strftime(fmt)
118
- h =\
119
- {'w' => @weeks ,
120
- 'd' => @days ,
121
- 'h' => @hours ,
122
- 'm' => @minutes,
123
- 's' => @seconds,
124
- 't' => @total ,
125
- 'x' => to_s}
126
-
127
- fmt.gsub(/%?%(w|d|h|m|s|t|x)/) do |match|
128
- match.size == 3 ? match : h[match[1..1]]
129
- end.gsub('%%', '%')
2
+ include Comparable
3
+
4
+ SECOND = 1
5
+ MINUTE = 60 * SECOND
6
+ HOUR = 60 * MINUTE
7
+ DAY = 24 * HOUR
8
+ WEEK = 7 * DAY
9
+ YEAR = 365 * DAY
10
+
11
+ SEGMENTS = %w{years weeks days hours minutes seconds}.collect{ |s| s.to_sym }
12
+
13
+ #
14
+ def self.[](seconds, *segments)
15
+ new(seconds, *segments)
16
+ end
17
+
18
+ #
19
+ def initialize(seconds=0, *segments)
20
+ @seconds = seconds.to_i
21
+ reset_segments(*segments)
22
+ end
23
+
24
+ #
25
+ def segments; @segments; end
26
+
27
+ #
28
+ def reset_segments(*segments)
29
+ case segments.size
30
+ when 0
31
+ @segments = [:days, :hours, :minutes, :seconds]
32
+ when 1
33
+ case segments = segments[0]
34
+ when Array
35
+ @segments = segments.collect{ |p| (p.to_s.downcase.chomp('s') + 's').to_sym }
36
+ raise ArgumentError unless @segments.all?{ |s| SEGMENTS.include?(s) }
37
+ else
38
+ f = SEGMENTS.index(segments)
39
+ @segments = SEGMENTS[f..0]
40
+ end
41
+ when 2
42
+ f = SEGMENTS.index(segments[0])
43
+ t = SEGMENTS.index(segments[1])
44
+ @segments = SEGMENTS[f..t]
45
+ else
46
+ raise ArgumentError
130
47
  end
131
-
132
- # Get the number of seconds of a given part, or simply just get the number of
133
- # seconds.
134
- #
135
- # *Example*
136
- #
137
- # d = Duration.new(:weeks => 1, :days => 1, :hours => 1, :seconds => 30)
138
- # => #<Duration: 1 week, 1 day, 1 hour and 30 seconds>
139
- # d.seconds(:weeks)
140
- # => 604800
141
- # d.seconds(:days)
142
- # => 86400
143
- # d.seconds(:hours)
144
- # => 3600
145
- # d.seconds
146
- # => 30
147
- #
148
- def seconds(part = nil)
149
- # Table mapping
150
- h = {:weeks => WEEK, :days => DAY, :hours => HOUR, :minutes => MINUTE}
151
-
152
- if [:weeks, :days, :hours, :minutes].include? part
153
- __send__(part) * h[part]
154
- else
155
- @seconds
156
- end
157
- end
158
-
159
- # For iterating through the duration set of weeks, days, hours, minutes, and
160
- # seconds.
161
- #
162
- # *Example*
163
- #
164
- # Duration.new(:weeks => 1, :seconds => 30).each do |part, time|
165
- # puts "part: #{part}, time: #{time}"
166
- # end
167
- #
168
- # _Output_
169
- #
170
- # part: weeks, time: 1
171
- # part: days, time: 0
172
- # part: hours, time: 0
173
- # part: minutes, time: 0
174
- # part: seconds, time: 30
175
- #
176
- def each
177
- [['weeks' , @weeks ],
178
- ['days' , @days ],
179
- ['hours' , @hours ],
180
- ['minutes' , @minutes],
181
- ['seconds' , @seconds]].each do |part, time|
182
- # Yield to block
183
- yield part, time
184
- end
185
- end
186
-
187
- # Calls `<=>' on Duration#total.
188
- #
189
- # *Example*
190
- #
191
- # 5.days == 24.hours * 5
192
- # => true
193
- #
194
- def <=>(other)
195
- @total <=> other.to_i
48
+ end
49
+
50
+ def inspect
51
+ h = to_h
52
+ segments.reverse.collect do |l|
53
+ "#{h[l.to_sym]} #{l}"
54
+ end.join(' ')
55
+ end
56
+
57
+ def to_i ; @seconds.to_i ; end
58
+ def to_f ; @seconds.to_f ; end
59
+
60
+ public
61
+
62
+ def to_a
63
+ a, s = [], @seconds
64
+ a[5], s = *s.divmod(YEAR) if @segments.include?(:years)
65
+ a[4], s = *s.divmod(WEEK) if @segments.include?(:weeks)
66
+ a[3], s = *s.divmod(DAY) if @segments.include?(:days)
67
+ a[2], s = *s.divmod(HOUR) if @segments.include?(:hours)
68
+ a[1], s = *s.divmod(MINUTE) if @segments.include?(:minutes)
69
+ a[0], s = *s.divmod(SECOND) if @segments.include?(:seconds)
70
+ a.compact.reverse
71
+ end
72
+
73
+ #
74
+ def to_h
75
+ h, s = {}, @seconds
76
+ h[:years], s = *s.divmod(YEAR) if @segments.include?(:years)
77
+ h[:weeks], s = *s.divmod(WEEK) if @segments.include?(:weeks)
78
+ h[:days], s = *s.divmod(DAY) if @segments.include?(:days)
79
+ h[:hours], s = *s.divmod(HOUR) if @segments.include?(:hours)
80
+ h[:minutes], s = *s.divmod(MINUTE) if @segments.include?(:minutes)
81
+ h[:seconds], s = *s.divmod(SECOND) if @segments.include?(:seconds)
82
+ h
83
+ end
84
+
85
+ def to_s
86
+ h = to_h
87
+ segments.reverse.collect do |l|
88
+ "#{h[l.to_sym]} #{l}"
89
+ end.join(' ')
90
+ end
91
+
92
+ # Returns true if <tt>other</tt> is also a Duration instance with the
93
+ # same <tt>value</tt>, or if <tt>other == value</tt>.
94
+ def ==(other)
95
+ if Duration === other
96
+ other.seconds == seconds
97
+ else
98
+ other == seconds
196
99
  end
197
-
198
- # Set the number of weeks.
199
- #
200
- # *Example*
201
- #
202
- # d = Duration.new(0)
203
- # => #<Duration: ...>
204
- # d.weeks = 2; d
205
- # => #<Duration: 2 weeks>
206
- #
207
- def weeks=(n)
208
- initialize(:weeks => n, :seconds => @total - seconds(:weeks))
209
- end
210
-
211
- # Set the number of days.
212
- #
213
- # *Example*
214
- #
215
- # d = Duration.new(0)
216
- # => #<Duration: ...>
217
- # d.days = 5; d
218
- # => #<Duration: 5 days>
219
- #
220
- def days=(n)
221
- initialize(:days => n, :seconds => @total - seconds(:days))
222
- end
223
-
224
- # Set the number of hours.
225
- #
226
- # *Example*
227
- #
228
- # d = Duration.new(0)
229
- # => #<Duration: ...>
230
- # d.hours = 5; d
231
- # => #<Duration: 5 hours>
232
- #
233
- def hours=(n)
234
- initialize(:hours => n, :seconds => @total - seconds(:hours))
235
- end
236
-
237
- # Set the number of minutes.
238
- #
239
- # *Example*
240
- #
241
- # d = Duration.new(0)
242
- # => #<Duration: ...>
243
- # d.minutes = 30; d
244
- # => #<Duration: 30 minutes>
245
- #
246
- def minutes=(n)
247
- initialize(:minutes => n, :seconds => @total - seconds(:minutes))
248
- end
249
-
250
- # Set the number of minutes.
251
- #
252
- # *Example*
253
- #
254
- # d = Duration.new(0)
255
- # => #<Duration: ...>
256
- # d.seconds = 30; d
257
- # => #<Duration: 30 seconds>
258
- #
259
- def seconds=(n)
260
- initialize(:seconds => (@total + n) - @seconds)
261
- end
262
-
263
- # Friendly, human-readable string representation of the duration.
264
- #
265
- # *Example*
266
- #
267
- # d = Duration.new(:seconds => 140)
268
- # => #<Duration: 2 minutes and 20 seconds>
269
- # d.to_s
270
- # => "2 minutes and 20 seconds"
271
- #
272
- def to_s
273
- str = ''
274
-
275
- each do |part, time|
276
- # Skip any zero times.
277
- next if time.zero?
278
-
279
- # Concatenate the part of the time and the time itself.
280
- str << "#{time} #{time == 1 ? part[0..-2] : part}, "
281
- end
282
-
283
- str.chomp(', ').sub(/(.+), (.+)/, '\1 and \2')
284
- end
285
-
286
- # Inspection string--Similar to #to_s except that it has the class name.
287
- #
288
- # *Example*
289
- #
290
- # Duration.new(:seconds => 140)
291
- # => #<Duration: 2 minutes and 20 seconds>
292
- #
293
- def inspect
294
- "#<#{self.class}: #{(s = to_s).empty? ? '...' : s}>"
295
- end
296
-
297
- # Add to Duration.
298
- #
299
- # *Example*
300
- #
301
- # d = Duration.new(30)
302
- # => #<Duration: 30 seconds>
303
- # d + 30
304
- # => #<Duration: 1 minute>
305
- #
306
- def +(other)
307
- self.class.new(@total + other.to_i)
308
- end
309
-
310
- # Subtract from Duration.
311
- #
312
- # *Example*
313
- #
314
- # d = Duration.new(30)
315
- # => #<Duration: 30 seconds>
316
- # d - 15
317
- # => #<Duration: 15 seconds>
318
- #
319
- def -(other)
320
- self.class.new(@total - other.to_i)
321
- end
322
-
323
- # Multiply two Durations.
324
- #
325
- # *Example*
326
- #
327
- # d = Duration.new(30)
328
- # => #<Duration: 30 seconds>
329
- # d * 2
330
- # => #<Duration: 1 minute>
331
- #
332
- def *(other)
333
- self.class.new(@total * other.to_i)
334
- end
335
-
336
- # Divide two Durations.
100
+ end
101
+
102
+ def <=>(other)
103
+ @seconds <=> other.to_i
104
+ end
105
+
106
+ #def is_a?(klass) #:nodoc:
107
+ # klass == self.class
108
+ #end
109
+
110
+ #def self.===(other) #:nodoc:
111
+ # other.is_a?(Duration) rescue super
112
+ #end
113
+
114
+ def years ; to_h[:years] ; end
115
+ def weeks ; to_h[:weeks] ; end
116
+ def days ; to_h[:days] ; end
117
+ def hours ; to_h[:hours] ; end
118
+ def minutes ; to_h[:minutes] ; end
119
+ def seconds ; to_h[:seconds] ; end
120
+
121
+ def total ; seconds ; end
122
+
123
+ def +(other)
124
+ self.class.new(@seconds + other.to_i, segments)
125
+ end
126
+
127
+ def -(other)
128
+ self.class.new(@seconds - other.to_i, segments)
129
+ end
130
+
131
+ def +(other)
132
+ self.class.new(@seconds * other.to_i, segments)
133
+ end
134
+
135
+ def /(other)
136
+ self.class.new(@seconds / other.to_i, segments)
137
+ end
138
+
139
+ #
140
+ def segmented(*segments)
141
+ self.class.new(@seconds, segments)
142
+ #segments = segments.collect{ |p| p.to_s.downcase.chomp('s') }
143
+ #y,w,d,h,m,s = nil,nil,nil,nil,nil,nil
144
+ #x = @seconds
145
+ #y, x = *x.divmod(YEAR) if segments.include?('year')
146
+ #w, x = *x.divmod(WEEK) if segments.include?('week')
147
+ #d, x = *x.divmod(DAY) if segments.include?('day')
148
+ #h, x = *x.divmod(HOUR) if segments.include?('hour')
149
+ #m, x = *x.divmod(MINUTE) if segments.include?('minute')
150
+ #s = x if segments.include?('second')
151
+ #[y, w, d, h, m, s].compact
152
+ end
153
+
154
+ # Format duration.
155
+ #
156
+ # *Identifiers*
157
+ #
158
+ # %w -- Number of weeks
159
+ # %d -- Number of days
160
+ # %h -- Number of hours
161
+ # %m -- Number of minutes
162
+ # %s -- Number of seconds
163
+ # %t -- Total number of seconds
164
+ # %x -- Duration#to_s
165
+ # %% -- Literal `%' character
166
+ #
167
+ # *Example*
168
+ #
169
+ # d = Duration.new(:weeks => 10, :days => 7)
170
+ # => #<Duration: 11 weeks>
171
+ # d.strftime("It's been %w weeks!")
172
+ # => "It's been 11 weeks!"
173
+ #
174
+ def strftime(fmt)
175
+ h = to_h
176
+ hx = {
177
+ 'y' => h[:years] ,
178
+ 'w' => h[:weeks] ,
179
+ 'd' => h[:days] ,
180
+ 'h' => h[:hours] ,
181
+ 'm' => h[:minutes],
182
+ 's' => h[:seconds],
183
+ 't' => total,
184
+ 'x' => to_s
185
+ }
186
+ fmt.gsub(/%?%(w|d|h|m|s|t|x)/) do |match|
187
+ hx[match[1..1]]
188
+ end.gsub('%%', '%')
189
+ end
190
+
191
+ #
192
+ def -@ #:nodoc:
193
+ self.class.new(-@seconds)
194
+ end
195
+
196
+ #
197
+ def +@ #:nodoc:
198
+ self.class.new(+@seconds)
199
+ end
200
+
201
+ #
202
+ # Need to wrap back to numeric methods, maybe use method_missing?
203
+ #
204
+
205
+ #
206
+ def before(time)
207
+ @seconds.before(time)
208
+ end
209
+
210
+ #
211
+ def after(time)
212
+ @seconds.after(time)
213
+ end
214
+
215
+
216
+ # = Numeric Extensions for Durations
217
+ #
218
+ module Numeric
219
+
220
+ # Enables the use of time calculations and declarations,
221
+ # like 45.minutes + 2.hours + 4.years. The base unit for
222
+ # all of these Numeric time methods is seconds.
223
+ def seconds ; Duration[self] ; end
224
+ alias_method :second, :seconds
225
+
226
+ # Converts minutes into seconds.
227
+ def minutes ; Duration[self * 60] ; end
228
+ alias_method :minute, :minutes
229
+
230
+ # Converts hours into seconds.
231
+ def hours ; Duration[self * 3600] ; end
232
+ alias_method :hour, :hours
233
+ #def as_hours ; self / 60.minutes ; end
234
+
235
+ # Converts days into seconds.
236
+ def days ; Duration[self * 86400] ; end
237
+ alias_method :day, :days
238
+
239
+ # Converts weeks into seconds.
240
+ def weeks ; Duration[self * 604800] ; end
241
+ alias_method :week, :weeks
242
+
243
+ # Converts fortnights into seconds.
244
+ # (A fortnight is 2 weeks)
245
+ def fortnights ; Duration[self * 1209600] ; end
246
+ alias_method :fortnight, :fortnights
247
+
248
+ # Converts months into seconds.
249
+ # WARNING: This is not exact as it assumes 30 days to a month.
250
+ def months ; Duration[self * 30 * 86400] ; end
251
+ alias_method :month, :months
252
+
253
+ # Converts years into seconds.
254
+ # WARNING: This is not exact as it assumes 365 days to a year.
255
+ # ie. It doesn not account for leap years.
256
+ def years ; Duration[self * 365 * 86400, :years] ; end
257
+ alias_method :year, :years
258
+
259
+ end
260
+
261
+ # Time#duration has been added to convert the UNIX timestamp into a Duration.
262
+ # See Time#duration for an example.
263
+ #
264
+ module Time
265
+ # Create a Duration object from the UNIX timestamp.
337
266
  #
338
267
  # *Example*
339
268
  #
340
- # d = Duration.new(30)
341
- # => #<Duration: 30 seconds>
342
- # d / 2
343
- # => #<Duration: 15 seconds>
269
+ # Time.now.duration
270
+ # => #<Duration: 1898 weeks, 6 days, 1 hour, 12 minutes and 1 second>
344
271
  #
345
- def /(other)
346
- self.class.new(@total / other.to_i)
272
+ def duration
273
+ Duration[to_i]
347
274
  end
275
+ end
348
276
 
349
- alias to_i total
350
277
  end
351
278
 
352
- # BigDuration is a variant of Duration that supports years and months. Support
353
- # for months is not accurate, as a month is assumed to be 30 days so use at your
354
- # own risk.
355
- #
356
- class BigDuration < Duration
357
- attr_reader :years, :months
358
-
359
- YEAR = 60 * 60 * 24 * 30 * 12
360
- MONTH = 60 * 60 * 24 * 30
361
-
362
- # Similar to Duration.new except that BigDuration.new supports `:years' and
363
- # `:months' and will also handle years and months correctly when breaking down
364
- # the seconds.
365
- #
366
- def initialize(seconds_or_attr = 0)
367
- if seconds_or_attr.kind_of? Hash
368
- # Part->time map table.
369
- h =\
370
- {:years => YEAR ,
371
- :months => MONTH ,
372
- :weeks => WEEK ,
373
- :days => DAY ,
374
- :hours => HOUR ,
375
- :minutes => MINUTE,
376
- :seconds => SECOND}
377
-
378
- # Loop through each valid part, ignore all others.
379
- seconds = seconds_or_attr.inject(0) do |sec, args|
380
- # Grab the part of the duration (week, day, whatever) and the number of seconds for it.
381
- part, time = args
382
-
383
- # Map each part to their number of seconds and the given value.
384
- # {:weeks => 2} maps to h[:weeks] -- so... weeks = WEEK * 2
385
- if h.key?(prt = part.to_s.to_sym) then sec + time * h[prt] else 0 end
386
- end
387
- else
388
- seconds = seconds_or_attr
389
- end
390
-
391
- @total, array = seconds.to_f.round, []
392
- @seconds = [YEAR, MONTH, WEEK, DAY, HOUR, MINUTE].inject(@total) do |left, part|
393
- array << left / part; left % part
394
- end
395
-
396
- @years, @months, @weeks, @days, @hours, @minutes = array
397
- end
398
-
399
- # BigDuration variant of Duration#strftime.
400
- #
401
- # *Identifiers: BigDuration*
402
- #
403
- # %y -- Number of years
404
- # %m -- Number of months
405
- #
406
- def strftime(fmt)
407
- h = {'y' => @years, 'M' => @months}
408
- super(fmt.gsub(/%?%(y|M)/) { |match| match.size == 3 ? match : h[match[1..1]] })
409
- end
410
-
411
- # Similar to Duration#each except includes years and months in the interation.
412
- #
413
- def each
414
- [['years' , @years ],
415
- ['months' , @months ],
416
- ['weeks' , @weeks ],
417
- ['days' , @days ],
418
- ['hours' , @hours ],
419
- ['minutes' , @minutes],
420
- ['seconds' , @seconds]].each do |part, time|
421
- # Yield to block
422
- yield part, time
423
- end
424
- end
425
-
426
- # Derived from Duration#seconds, but supports `:years' and `:months' as well.
427
- #
428
- def seconds(part = nil)
429
- h = {:years => YEAR, :months => MONTH}
430
- if [:years, :months].include? part
431
- __send__(part) * h[part]
432
- else
433
- super(part)
434
- end
435
- end
436
-
437
- # Set the number of years in the BigDuration.
438
- #
439
- def years=(n)
440
- initialize(:years => n, :seconds => @total - seconds(:years))
441
- end
442
-
443
- # Set the number of months in the BigDuration.
444
- #
445
- def months=(n)
446
- initialize(:months => n, :seconds => @total - seconds(:months))
447
- end
279
+ class Numeric #:nodoc:
280
+ include Duration::Numeric
448
281
  end
449
282
 
450
- # The following important additions are made to Numeric:
451
- #
452
- # Numeric#weeks -- Create a Duration object with given weeks
453
- # Numeric#days -- Create a Duration object with given days
454
- # Numeric#hours -- Create a Duration object with given hours
455
- # Numeric#minutes -- Create a Duration object with given minutes
456
- # Numeric#seconds -- Create a Duration object with given seconds
457
- #
458
- # BigDuration support:
459
- #
460
- # Numeric#years -- Create a BigDuration object with given years
461
- # Numeric#months -- Create a BigDuration object with given months
462
- #
463
- # BigDuration objects can be created from regular weeks, days, hours, etc by
464
- # providing `:big' as an argument to the above Numeric methods.
465
-
466
- #
467
- class Numeric
468
- # Create a Duration object using self where self could represent weeks, days,
469
- # hours, minutes, and seconds.
470
- #
471
- # *Example*
472
- #
473
- # 10.duration(:weeks)
474
- # => #<Duration: 10 weeks>
475
- # 10.duration
476
- # => #<Duration: 10 seconds>
477
- #
478
- def duration(part = nil, klass = Duration)
479
- if [:years, :months, :weeks, :days, :hours, :minutes, :seconds].include? part
480
- klass.new(part => self)
481
- else
482
- klass.new(self)
483
- end
484
- end
485
-
486
- # TODO: IF WE WANT TO DO THIS IT NEEDS TO BE ADDED TO times.rb ???
487
- #
488
- # alias __numeric_old_method_missing method_missing
489
- #
490
- # # Intercept calls to .weeks, .days, .hours, .minutes and .seconds because
491
- # # Rails defines its own methods, so I'd like to prevent any redefining of
492
- # # Rails' methods. If these methods don't get captured, then alternatively
493
- # # Numeric#duration can be used.
494
- # #
495
- # # BigDuration methods include .years and .months, also BigDuration objects
496
- # # can be created from any time such as weeks or minutes and even seconds.
497
- # #
498
- # # *Example: BigDuration*
499
- # #
500
- # # 5.years
501
- # # => #<BigDuration: 5 years>
502
- # # 10.minutes(:big)
503
- # # => #<BigDuration: 10 minutes>
504
- # #
505
- # # *Example*
506
- # #
507
- # # 140.seconds
508
- # # => #<Duration: 2 minutes and 20 seconds>
509
- # #
510
- # def method_missing(method, *args)
511
- # if [:weeks, :days, :hours, :minutes, :seconds].include? method
512
- # if args.size > 0 && args[0] == :big
513
- # duration(method, BigDuration)
514
- # else
515
- # duration(method)
516
- # end
517
- # elsif [:years, :months].include? method
518
- # duration(method, BigDuration)
519
- # else
520
- # __numeric_old_method_missing(method, *args)
521
- # end
522
- # end
523
-
283
+ class Time #:nodoc:
284
+ include Duration::Time
524
285
  end
525
286
 
526
- # Time#duration has been added to convert the UNIX timestamp into a Duration.
527
- # See Time#duration for an example.
528
- #
529
- class Time
530
- # Create a Duration object from the UNIX timestamp.
531
- #
532
- # *Example*
533
- #
534
- # Time.now.duration
535
- # => #<Duration: 1898 weeks, 6 days, 1 hour, 12 minutes and 1 second>
536
- #
537
- def duration(type = nil)
538
- if type == :big then BigDuration.new(to_i) else Duration.new(to_i) end
539
- end
540
- end