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
@@ -1,431 +0,0 @@
1
- # = Times
2
- #
3
- # WARNING: Use Rich Units package for future compatibilty!
4
- #
5
- # == Synopsis
6
- #
7
- # Plain-English convenience methods for dealing with dates and times.
8
- #
9
- # == HISTORY
10
- #
11
- # Thanks to Richard Kilmer for the orignal work and Alexander Kellett
12
- # for suggesting it for Facets.
13
- #
14
- # Thanks to Dave Hoover and Ryan Platte for the Weekdays implementation.
15
- #
16
- # == AUTHORS
17
- #
18
- # * Rich Kilmer
19
- # * Thomas Sawyer
20
- # * Dave Hoover
21
- # * Ryan Platte
22
- # * George Moschovitis
23
- #
24
- # == NOTES
25
- #
26
- # * This library is not compatible with STICK's units.rb (an spin-off
27
- # of Facets old units.rb library). Do not attempt to use both at the same time.
28
- #
29
- # == TODOs
30
- #
31
- # * Extra Add in_* methods, like in_days, in_hours, etc.
32
- #
33
- # == COPYRIGHT
34
- #
35
- # Copyright (c) 2005 Rich Kilmer, Thomas Sawyer
36
- #
37
- # == LICENSE
38
- #
39
- # Ruby License
40
- #
41
- # This module is free software. You may use, modify, and/or redistribute this
42
- # software under the same terms as Ruby.
43
- #
44
- # This program is distributed in the hope that it will be useful, but WITHOUT
45
- # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
46
- # FITNESS FOR A PARTICULAR PURPOSE.
47
-
48
- require 'facets/time/change'
49
- require 'facets/time/set'
50
- require 'facets/time/ago'
51
- require 'facets/time/hence'
52
-
53
- class Time
54
-
55
- NEVER = Time.mktime(2038)
56
- ZERO = Time.mktime(1972)
57
-
58
- # This method calculates the days extrema given two time objects.
59
- # start time is the given time1 at 00:00:00
60
- # end time is the given time2 at 23:59:59:999
61
- #
62
- # Input:
63
- # - the two times (if only time1 is provided then you get an extrema
64
- # of exactly one day extrema.
65
- #
66
- # Output:
67
- # - the time range. you can get the start/end times using
68
- # range methods.
69
- #
70
- # CREDIT George Moschovitis
71
-
72
- def self.days_extrema(time1, time2=nil)
73
- time2 = time1 if (not time2.valid? Time)
74
- time2 = NEVER if (time2 <= time1)
75
- start_time = Time.self.start_of_day(time1)
76
- end_time = self.end_of_day(time2)
77
- return (start_time..end_time)
78
- end
79
-
80
- # Seconds since midnight: Time.now.seconds_since_midnight
81
-
82
- def seconds_since_midnight
83
- self.hour.hours + self.min.minutes + self.sec + (self.usec/1.0e+6)
84
- end
85
-
86
- # Returns a new Time representing the time a number of seconds ago.
87
- # Do not use this method in combination with x.months, use months_ago instead!
88
- #def ago(seconds)
89
- # # This is basically a wrapper around the Numeric extension.
90
- # #seconds.until(self)
91
- # self - seconds
92
- #end
93
-
94
- # Returns a new Time representing the time
95
- # a number of minutes ago.
96
-
97
- def minutes_ago(minutes)
98
- self - (minutes * 60)
99
- end
100
-
101
- # Returns a new Time representing the time
102
- # a number of hours ago.
103
-
104
- def hours_ago(hours)
105
- self - (hours * 3600)
106
- end
107
-
108
- # Returns a new Time representing the time
109
- # a number of days ago.
110
-
111
- def days_ago(days)
112
- self - (days * 86400)
113
- end
114
-
115
- # Returns a new Time representing the time
116
- # a number of weeks ago.
117
-
118
- def weeks_ago(weeks)
119
- self - (weeks * 604800)
120
- end
121
-
122
- # Returns a new Time representing the time
123
- # a number of months ago.
124
-
125
- def months_ago(months)
126
- years = (month - months / 12).to_i
127
- set(:year=>(year - years), :month=>(month - months) % 12)
128
- end
129
-
130
- # Returns a new Time representing the time a number of specified
131
- # months ago.
132
- #def months_ago(months)
133
- # if months >= self.month
134
- # change(:year => self.year - 1, :month => 12).months_ago(months - self.month)
135
- # else
136
- # change(:year => self.year, :month => self.month - months)
137
- # end
138
- #end
139
-
140
- # Returns a new Time representing the time
141
- # a number of years ago.
142
-
143
- def years_ago(years)
144
- set(:year=>(year - years))
145
- end
146
-
147
- # Returns a new Time representing the time a number of specified
148
- # years ago.
149
- #def years_ago(years)
150
- # change(:year => self.year - years)
151
- #end
152
-
153
- # Returns a new Time representing the time
154
- # a number of minutes hence.
155
-
156
- def minutes_hence(minutes)
157
- self + (minutes * 60)
158
- end
159
-
160
- # Returns a new Time representing the time
161
- # a number of hours hence.
162
-
163
- def hours_hence(hours)
164
- self + (hours * 3600)
165
- end
166
-
167
- # Returns a new Time representing the time
168
- # a number of days hence.
169
-
170
- def days_hence(days)
171
- self + (days * 86400)
172
- end
173
-
174
- # Returns a new Time representing the time
175
- # a number of weeks hence.
176
-
177
- def weeks_hence(weeks)
178
- self + (weeks * 604800)
179
- end
180
-
181
- # Returns a new Time representing the time
182
- # a number of months hence.
183
-
184
- def months_hence(months)
185
- years = (month + months / 12).to_i
186
- set(:year=>(year + years), :month=>(month + months) % 12)
187
- end
188
-
189
- #def months_hence(months)
190
- # if months + self.month > 12
191
- # change(:year => self.year + 1, :month => 1).months_since(months - (self.month == 1 ? 12 : (self.month + 1)))
192
- # else
193
- # change(:year => self.year, :month => self.month + months)
194
- # end
195
- #end
196
-
197
- # Returns a new Time representing the time
198
- # a number of years hence.
199
-
200
- def years_hence(years)
201
- set(:year=>(year + years))
202
- end
203
-
204
- # Returns a new Time representing the time a number of seconds
205
- # since the instance time. Do not use this method in combination
206
- # with x.months, use months_since instead!
207
- alias_method :since, :hence
208
-
209
- alias_method :minutes_since, :minutes_hence
210
- alias_method :days_since, :days_hence
211
- alias_method :weeks_since, :weeks_hence
212
- alias_method :months_since, :months_hence
213
- alias_method :years_since, :years_hence
214
-
215
- #def years_since(years)
216
- # change(:year => self.year + years)
217
- #end
218
-
219
- # Short-hand for years_ago(1)
220
- def last_year
221
- years_ago(1)
222
- end
223
-
224
- # Short-hand for years_since(1)
225
- def next_year
226
- years_since(1)
227
- end
228
-
229
- # Short-hand for months_ago(1)
230
- def last_month
231
- months_ago(1)
232
- end
233
-
234
- # Short-hand for months_since(1)
235
- def next_month
236
- months_since(1)
237
- end
238
-
239
- # Returns a new Time representing the "start" of this week (Monday, 0:00)
240
- def beginning_of_week
241
- (self - self.wday.days).midnight + 1.day
242
- end
243
- alias :monday :beginning_of_week
244
- alias :at_beginning_of_week :beginning_of_week
245
-
246
- # Returns a new Time representing the start of the given
247
- # day in next week (default is Monday).
248
- def next_week(day = :monday)
249
- days_into_week = { :monday => 0, :tuesday => 1, :wednesday => 2,
250
- :thursday => 3, :friday => 4, :saturday => 5,
251
- :sunday => 6 }
252
- since(1.week).beginning_of_week.since(days_into_week[day].day).change(:hour => 0)
253
- end
254
-
255
- # Set time to end of day
256
- #def end_of_day
257
- # return Time.mktime(year, month, day, 23, 59, 59, 999)
258
- #end
259
-
260
- # Returns a new Time representing the start of the day (0:00)
261
- def beginning_of_day
262
- self - self.seconds_since_midnight
263
- end
264
- alias :midnight :beginning_of_day
265
- alias :at_midnight :beginning_of_day
266
- alias :at_beginning_of_day :beginning_of_day
267
- alias :start_of_day :beginning_of_day
268
-
269
- # Returns a new Time representing the start of the month
270
- # (1st of the month, 0:00)
271
- def beginning_of_month
272
- #self - ((self.mday-1).days + self.seconds_since_midnight)
273
- change(:day => 1,:hour => 0, :min => 0, :sec => 0, :usec => 0)
274
- end
275
- alias_method :at_beginning_of_month, :beginning_of_month
276
-
277
- # Returns a new Time representing the start of the year (1st of january, 0:00)
278
- def beginning_of_year
279
- change(:month => 1,:day => 1,:hour => 0, :min => 0, :sec => 0, :usec => 0)
280
- end
281
- alias :at_beginning_of_year :beginning_of_year
282
-
283
- # Convenience method which returns a new Time representing
284
- # the time 1 day ago
285
- def yesterday
286
- self.ago(1.day)
287
- end
288
-
289
- # Convenience method which returns a new Time representing
290
- # the time 1 day since the instance time
291
- def tomorrow
292
- self.since(1.day)
293
- end
294
-
295
- # Returns a new time at start of day
296
- def to_start_of_day
297
- return Time.mktime(year, month, day, 0, 0, 0, 0)
298
- end
299
-
300
- # Returns a new time at end of day
301
- def to_end_of_day
302
- Time.mktime(year, month, day, 23, 59, 59, 999)
303
- end
304
-
305
- # Returns true only if day of time is included in the
306
- # range (stime..etime). Only year days are checked.
307
- def in_day_range?(stime=ZERO, etime=NEVER)
308
- if (etime <= stime)
309
- warn "invalid end time (#{etime} < #{stime})" if $DEBUG
310
- etime = NEVER
311
- end
312
-
313
- stime = stime.to_start_of_day
314
- etime = etime.to_end_of_day
315
-
316
- return (stime..etime).include?(time)
317
- end
318
- end
319
-
320
-
321
- class Numeric
322
-
323
- # Enables the use of time calculations and declarations,
324
- # like 45.minutes + 2.hours + 4.years. The base unit for
325
- # all of these Numeric time methods is seconds.
326
- def seconds ; self ; end
327
- alias_method :second, :seconds
328
- #def as_seconds ; self ; end
329
-
330
- # Converts minutes into seconds.
331
- def minutes ; self * 60 ; end
332
- alias_method :minute, :minutes
333
- #def as_minutes ; self.to_f / 60 ; end
334
-
335
- # Converts hours into seconds.
336
- def hours ; self * 60.minutes ; end
337
- alias_method :hour, :hours
338
- #def as_hours ; self / 60.minutes ; end
339
-
340
- # Converts days into seconds.
341
- def days ; self * 24.hours ; end
342
- alias_method :day, :days
343
- #def as_days ; self / 24.hours ; end
344
-
345
- # Converts weeks into seconds.
346
- def weeks ; self * 7.days ; end
347
- alias_method :week, :weeks
348
- #def as_weeks ; self / 7.days ; end
349
-
350
- # Converts fortnights into seconds.
351
- # (A fortnight is 2 weeks)
352
- def fortnights ; self * 2.weeks ; end
353
- alias_method :fortnight, :fortnights
354
- #def as_fortnights ; self / 2.weeks ; end
355
-
356
- # Converts months into seconds.
357
- # WARNING: This is not exact as it assumes 30 days to a month.
358
- def months ; self * 30.days ; end
359
- alias_method :month, :months
360
- #def as_months ; self / 30.days ; end
361
-
362
- # Converts years into seconds.
363
- def years ; self * 365.days ; end
364
- alias_method :year, :years
365
- #def as_years ; self / 365.days ; end
366
-
367
- # Calculates time _before_ a given time. Default time is now.
368
- # Reads best with arguments: 10.days.before( Time.now - 1.day )
369
- def before(time = ::Time.now)
370
- time - self
371
- end
372
- alias_method :until, :before # Reads best with argument: 10.minutes.until(time)
373
- alias_method :ago, :before # Reads best without arguments: 10.minutes.ago
374
-
375
- # Calculates time _after_ a given time. Default time is now.
376
- # Reads best with argument: 10.minutes.after(time)
377
- def after(time = ::Time.now)
378
- time + self
379
- end
380
- alias_method :since, :after # Reads best with argument: 10.minutes.since(time)
381
- alias_method :from_now, :after # Reads best without arguments: 10.minutes.from_now
382
- alias_method :later, :after # Reads best without arguments: 10.minutes.later
383
-
384
- # Works with day in terms of weekdays.
385
- def weekdays
386
- Weekdays.new(self)
387
- end
388
- alias :weekday :weekdays
389
-
390
- end
391
-
392
-
393
- # The Weekdays class provides useful weekday terminology to Numeric.
394
-
395
- class Weekdays
396
- WEEKDAYS = 1..5 # Monday is wday 1
397
- ONE_DAY = 60 * 60 * 24
398
-
399
- def initialize(n)
400
- @n = n
401
- end
402
-
403
- def ago(time = ::Time.now)
404
- step :down, time
405
- end
406
- alias :until :ago
407
- alias :before :ago
408
-
409
- def since(time = ::Time.now)
410
- step :up, time
411
- end
412
- alias :from_now :since
413
- alias :after :since
414
-
415
- private
416
-
417
- def step(direction, original_time)
418
- result = original_time
419
- time = ONE_DAY
420
-
421
- compare = direction == :up ? ">" : "<"
422
- time *= -1 if direction == :down
423
-
424
- @n.times do
425
- result += time until result.send(compare, original_time) && WEEKDAYS.member?(result.wday)
426
- original_time = result
427
- end
428
- result
429
- end
430
- end
431
-
@@ -1,464 +0,0 @@
1
- # = UploadUtils
2
- #
3
- # Upload files to host. These means of uploading are current
4
- # supported: ftp, sftp, scp and rsync.
5
- #
6
- # user Username for host.
7
- # host Host server's domain name.
8
- # root Document root path on host.
9
- # copy Directory of files to publish, or
10
- # Files to publish using from and to.
11
- #
12
- # dryrun If true only pretend to upload.
13
- # quiet Supress all output.
14
- # verbose Provide extra details.
15
- #
16
- # The copy parameter allows you to simply specify a file
17
- # or directory which will be published to host's document
18
- # root location.
19
- #
20
- # If you need more control over which files to publish
21
- # where, you can use the copy parameter instead. Provide
22
- # an array of pattern strings in the form of "{from} {to}".
23
- # If the desitination is the host's document root you do
24
- # not need to specify the {to} part. For example:
25
- #
26
- # copy = [ 'web/*', 'doc/api/* doc/api' ]
27
- #
28
- # The first copies the files under your project's web directory
29
- # to the host's document root. The second copies your projects
30
- # doc/api files to the doc/api location on the host.
31
- #
32
- # The internal template used for the outbound destination
33
- # is 'username@host:root/'.
34
- #
35
- # == AUTHORS
36
- #
37
- # * Thomas Sawyer
38
- #
39
- # == TODOs
40
- #
41
- # * Needs general improvements.
42
- # * Reduce shelling-out.
43
- # * Incorporate password into scp and ftp ?
44
- # * rsync needs --delete option
45
- #
46
- # == COPYRIGHT
47
- #
48
- # Copyright (c) 2006 Thomas Sawyer
49
- #
50
- # == LICENSE
51
- #
52
- # Ruby License
53
- #
54
- # This module is free software. You may use, modify, and/or redistribute this
55
- # software under the same terms as Ruby.
56
- #
57
- # This program is distributed in the hope that it will be useful, but WITHOUT
58
- # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
59
- # FOR A PARTICULAR PURPOSE.
60
-
61
- require 'openssl'
62
- require 'shellwords'
63
- require 'tmpdir'
64
- require 'facets/openobject'
65
-
66
- # = UploadUtils
67
- #
68
- # Upload files to host. These means of uploading are current
69
- # supported: ftp, sftp, scp and rsync.
70
- #
71
- # user Username for host.
72
- # host Host server's domain name.
73
- # root Document root path on host.
74
- # copy Directory of files to publish, or
75
- # Files to publish using from and to.
76
- #
77
- # dryrun If true only pretend to upload.
78
- # quiet Supress all output.
79
- # verbose Provide extra details.
80
- #
81
- # The copy parameter allows you to simply specify a file
82
- # or directory which will be published to host's document
83
- # root location.
84
- #
85
- # If you need more control over which files to publish
86
- # where, you can use the copy parameter instead. Provide
87
- # an array of pattern strings in the form of "{from} {to}".
88
- # If the desitination is the host's document root you do
89
- # not need to specify the {to} part. For example:
90
- #
91
- # copy = [ 'web/*', 'doc/api/* doc/api' ]
92
- #
93
- # The first copies the files under your project's web directory
94
- # to the host's document root. The second copies your projects
95
- # doc/api files to the doc/api location on the host.
96
- #
97
- # The internal template used for the outbound destination
98
- # is 'username@host:root/'.
99
-
100
- module UploadUtils
101
-
102
- module_function
103
-
104
- #
105
- # Upload via given protocol.
106
- #
107
-
108
- def upload( protocol, opts )
109
- send(protocol.to_s.downcase,opts)
110
- end
111
-
112
- #
113
- # Use ftp to upload files.
114
- #
115
-
116
- def ftp( keys )
117
- keys = upload_parameters(keys)
118
-
119
- # set transfer rules
120
- if keys.stage
121
- trans = stage_transfer(keys.stage)
122
- else
123
- files(keys.dir, keys.copy).each do |from|
124
- trans << [from,from]
125
- end
126
- end
127
-
128
- # append location of publication dir to from
129
- dir = keys.dir
130
- trans.collect!{ |from,to| [File.join(dir,from), to] }
131
-
132
- if keys.dryrun
133
- puts "ftp open #{keys.user}@#{keys.host}:#{keys.root}/"
134
- keys.trans.each do |f, t|
135
- puts "ftp put #{f} #{t}"
136
- end
137
- else
138
- require 'net/ftp'
139
- Net::FTP.open(keys.host) do |ftp|
140
- ftp.login(keys.user) #password?
141
- ftp.chdir(keys.root)
142
- keys.trans.each do |f, t|
143
- puts "ftp #{f} #{t}" unless keys.quiet
144
- ftp.putbinaryfile( f, t, 1024 )
145
- end
146
- end
147
- end
148
- end
149
-
150
- #
151
- # Use sftp to upload files.
152
- #
153
-
154
- def sftp( keys )
155
- keys = upload_parameters(keys)
156
-
157
- # set transfer rules
158
- if keys.stage
159
- trans = stage_transfer(keys.stage)
160
- else
161
- files(keys.dir, keys.copy).each do |from|
162
- trans << [from,from]
163
- end
164
- end
165
-
166
- # append location of publication dir to from
167
- dir = keys.dir
168
- trans.collect!{ |from,to| [File.join(dir,from), to] }
169
-
170
- if keys.dryrun
171
- puts "sftp open #{keys.user}@#{keys.host}:#{keys.root}/"
172
- keys.trans.each do |f,t|
173
- puts "sftp put #{f} #{t}"
174
- end
175
- else
176
- require 'net/sftp'
177
- Net::SFTP.start(keys.host, keys.user, keys.pass) do |sftp|
178
- #sftp.login( user )
179
- sftp.chdir(keys.root)
180
- keys.trans.each do |f,t|
181
- puts "sftp #{f} #{t}" unless keys.quiet
182
- sftp.put_file(f,t) #, 1024 )
183
- end
184
- end
185
- end
186
- end
187
-
188
- #
189
- # Use rsync to upload files.
190
- #
191
-
192
- def rsync( keys )
193
- keys = upload_parameters(keys)
194
-
195
- flags = []
196
- flags << "-n" if keys.dryrun
197
- flags << "-q" if keys.quiet
198
- flags << "-v" if keys.verbose
199
- flags << "--progress" unless keys.quiet
200
- flags = flags.join(' ').strip
201
- flags = ' ' + flags unless flags.empty?
202
-
203
- manfile = 'Publish.txt'
204
-
205
- if keys.stage
206
- dir = stage_linkdir(keys.dir, keys.stage)
207
- Dir.chdir(dir) do
208
- cpy = files(keys.copy)
209
- end
210
- manifest = File.join(dir,manfile)
211
- cmd = %{rsync#{flags} -L -arz --files-from='#{manifest}' #{dir} #{keys.user}@#{keys.host}:/#{keys.root}}
212
- else
213
- dir = keys.dir
214
- cpy = files(dir, keys.copy)
215
- manifest = File.join(dir,manfile)
216
- cmd = %{rsync#{flags} -arz --files-from='#{manifest}' #{dir} #{keys.user}@#{keys.host}:/#{keys.root}}
217
- end
218
-
219
- #Dir.chdir(keys.dir) do
220
- begin
221
- File.open(manifest, 'w'){ |f| f << cpy.join("\n") }
222
- ENV['RSYNC_PASSWORD'] = keys.pass if keys.pass
223
- puts cmd unless keys.quiet
224
- system cmd
225
- ensure
226
- ENV.delete('RSYNC_PASSWORD') if keys.pass
227
- end
228
- #end
229
-
230
- end
231
-
232
- # private (can't do b/c of module_function)
233
-
234
- # parse publishing options.
235
-
236
- def upload_parameters( keys )
237
- keys = OpenObject.new(keys)
238
-
239
- keys.copy = keys.copy || '**/*'
240
- keys.host = keys.host || keys.domain
241
- keys.user = keys.user || keys.username
242
- keys.root = keys.root || '/'
243
- #keys.pass = keys.pass || keys.password
244
-
245
- # validate
246
- raise ArgumentError, "missing publish parameter -- dir" unless keys.dir
247
- raise ArgumentError, "missing publish parameter -- host" unless keys.host
248
- raise ArgumentError, "missing publish parameter -- user" unless keys.user
249
- #raise ArgumentError, "missing publish parameter -- copy" unless keys.copy
250
- #raise ArgumentError, "missing publish parameter -- root" unless keys.root
251
-
252
- keys.root = '' if keys.root.nil?
253
- keys.root.sub!(/^\//,'')
254
-
255
- if String===keys.copy and File.directory?(keys.copy)
256
- copy = File.join(keys.copy, '*')
257
- end
258
- keys.copy = [keys.copy].flatten.compact
259
-
260
- # trans = []
261
- # keys.copy.each do |from|
262
- # #from, to = *Shellwords.shellwords(c)
263
- # #to = from if to.nil?
264
- # #to = to[1..-1] if to[0,1] == '/'
265
- # from.sub('*','**/*') unless from =~ /\*\*/
266
- # files = Dir.glob(from)
267
- # files.each do |f|
268
- # #t = File.join(to,File.basename(f))
269
- # #t = t[1..-1] if t[0,1] == '/'
270
- # trans << [f,f]
271
- # end
272
- # end
273
- # keys.trans = trans
274
-
275
- return keys
276
- end
277
-
278
- # Put together the list of files to copy.
279
-
280
- def files( dir, copy )
281
- Dir.chdir(dir) do
282
- del, add = copy.partition{ |f| /^[-]/ =~ f }
283
-
284
- # remove - and + prefixes
285
- del.collect!{ |f| f.sub(/^[-]/,'') }
286
- add.collect!{ |f| f.sub(/^[+]/,'') }
287
-
288
- #del.concat(must_exclude)
289
-
290
- files = []
291
- add.each{ |g| files += Dir.multiglob(g) }
292
- del.each{ |g| files -= Dir.multiglob(g) }
293
-
294
- files.collect!{ |f| f.sub(/^\//,'') }
295
-
296
- return files
297
- end
298
- end
299
-
300
- # Combine three part stage list into a two part from->to list.
301
- #
302
- # Using the stage list of three space separated fields.
303
- #
304
- # fromdir file todir
305
- #
306
- # This is used to generate a from -> to list of the form:
307
- #
308
- # fromdir/file todir/file
309
- #
310
-
311
- def stage_transfer( list )
312
- trans = []
313
- list.each do |line|
314
- trans << Shellwords.shellwords(line)
315
- end
316
-
317
- trans.collect! do |from, base, to|
318
- file = File.join(from,base)
319
- to = File.join(to,base)
320
- [from, to]
321
- end
322
- end
323
-
324
- # When using stage options this will create temporary linked location.
325
-
326
- def stage_linkdir( dir, list )
327
- folder = File.join(Dir.tmpdir, 'ratchets', 'project', object_id.abs.to_s)
328
- FileUtils.mkdir_p(folder)
329
-
330
- Dir.chdir(dir) do
331
- stage_transfer(list).each do |file, to|
332
- link = File.join(folder,to)
333
- FileUtils.ln_s(link,file)
334
- end
335
- end
336
-
337
- return folder
338
- end
339
-
340
-
341
- =begin
342
-
343
-
344
- #--
345
- # SHELLS OUT! Need net/scp library to fix.
346
- #++
347
-
348
- # Use scp to upload files.
349
-
350
- def scp( keys )
351
- keys = upload_parameters(keys)
352
-
353
- flags = []
354
- flags << "-v" if keys.verbose
355
- flags << "-q" if keys.quiet
356
- flags = flags.join(' ').strip
357
- flags = ' ' + flags unless flags.empty?
358
-
359
- upload_stage(keys) do #|tmpdir|
360
- cmd = "scp -r#{flags} * #{keys.user}@#{keys.host}:/#{keys.root}"
361
- puts cmd unless keys.quiet
362
- system cmd unless keys.dryrun
363
- end
364
- end
365
-
366
- # Use rsync to upload files.
367
-
368
- def rsync( keys )
369
- keys = upload_parameters(keys)
370
-
371
- flags = []
372
- flags << "-n" if keys.dryrun
373
- flags << "-v" if keys.verbose
374
- flags << "-q" if keys.quiet
375
- flags = flags.join(' ').strip
376
- flags = ' ' + flags unless flags.empty?
377
-
378
- upload_stage(keys) do #|tmpdir|
379
- begin
380
- ENV['RSYNC_PASSWORD'] = keys.pass if keys.pass
381
- cmd = "rsync -R#{flags} -arz * #{keys.user}@#{keys.host} /#{keys.root}"
382
- ensure
383
- ENV.delete('RSYNC_PASSWORD') if keys.pass
384
- end
385
- end
386
- end
387
-
388
- # Use ftp to upload files.
389
-
390
- def ftp( keys )
391
- keys = upload_parameters(keys)
392
-
393
- if keys.dryrun
394
- puts "ftp open #{keys.user}@#{keys.host}:#{keys.root}/"
395
- keys.trans.each do |f, t|
396
- puts "ftp put #{f} #{t}"
397
- end
398
- else
399
- require 'net/ftp'
400
- Net::FTP.open(keys.host) do |ftp|
401
- ftp.login(keys.user) #password?
402
- ftp.chdir(keys.root)
403
- keys.trans.each do |f, t|
404
- puts "ftp #{f} #{t}" unless keys.quiet
405
- ftp.putbinaryfile( f, t, 1024 )
406
- end
407
- end
408
- end
409
- end
410
-
411
- # Use sftp to upload files.
412
-
413
- def sftp( keys )
414
- keys = upload_parameters(keys)
415
-
416
- if keys.dryrun
417
- puts "sftp open #{keys.user}@#{keys.host}:#{keys.root}/"
418
- keys.trans.each do |f,t|
419
- puts "sftp put #{f} #{t}"
420
- end
421
- else
422
- require 'net/sftp'
423
- Net::SFTP.start(keys.host, keys.user, keys.pass) do |sftp|
424
- #sftp.login( user )
425
- sftp.chdir(keys.root)
426
- keys.trans.each do |f,t|
427
- puts "sftp #{f} #{t}" unless keys.quiet
428
- sftp.put_file(f,t) #, 1024 )
429
- end
430
- end
431
- end
432
- end
433
-
434
-
435
-
436
- # Creates a stage from which the whole directory can be uploaded.
437
- # This is needed for scp and rsync which have to shelled out,
438
- # and can't conveniently copy one file at a time.
439
-
440
- def upload_stage(keys) #:yield:
441
- tmp = "scp_#{object_id.abs}_#{ Time.now.strftime("%Y%m%d%H%M%S")}"
442
- tmpdir = File.join(Dir.tmpdir,tmp)
443
-
444
- puts "mkdir -p #{tmpdir}" unless keys.quiet
445
- FileUtils.mkdir_p(tmpdir) # go ahead and do this even if dryrun
446
-
447
- fu = keys.dryrun ? FileUtils::DryRun : FileUtils
448
- keys.trans.each do |f, t|
449
- to = File.join(tmpdir, t)
450
- fu.mv(f,to)
451
- end
452
-
453
- puts "cd #{tmpdir}" unless keys.quiet
454
- Dir.chdir(tmpdir) do
455
- yield #(tmpdir)
456
- end
457
-
458
- puts "rm -r #{tmpdir}" unless keys.quiet
459
- FileUtils.rm_r(tmpdir) # now remove the temp dir
460
- end
461
-
462
- =end
463
-
464
- end