facets 1.8.8 → 1.8.20

Sign up to get free protection for your applications and to get access to all the features.
Files changed (448) hide show
  1. data/{doc/COPYING → COPYING} +0 -0
  2. data/PROJECT +18 -11
  3. data/README +8 -14
  4. data/Rakefile +3 -7
  5. data/VERSION +1 -1
  6. data/doc/AUTHORS +6 -1
  7. data/doc/{HISTORY.txt → ChangeLog} +96 -0
  8. data/doc/{HISTORY.1 → History} +0 -0
  9. data/lib/facet/array/pad.rb +1 -0
  10. data/lib/facet/dir/self/multiglob_r.rb +1 -0
  11. data/lib/facet/dir/self/multiglob_with_default.rb +1 -0
  12. data/lib/facet/string/capitalize_all.rb +1 -0
  13. data/lib/facet/string/cleave.rb +1 -0
  14. data/lib/facets/core/array/pad.rb +76 -0
  15. data/lib/facets/core/dir/self/ls_r.rb +2 -3
  16. data/lib/facets/core/dir/self/multiglob.rb +90 -12
  17. data/lib/facets/core/dir/self/{multiglob_recurse.rb → multiglob_r.rb} +1 -1
  18. data/lib/facets/core/dir/self/multiglob_with_default.rb +3 -0
  19. data/lib/facets/core/enumerable/accumulate.rb +1 -3
  20. data/lib/facets/core/enumerable/cart.rb +28 -53
  21. data/lib/facets/core/enumerable/graph.rb +1 -4
  22. data/lib/facets/core/enumerable/self/cart.rb +5 -117
  23. data/lib/facets/core/enumerable/self/cartesian_product.rb +3 -3
  24. data/lib/facets/core/file/self/create.rb +1 -3
  25. data/lib/facets/core/hash/rekey.rb +1 -5
  26. data/lib/facets/core/kernel/ask.rb +2 -2
  27. data/lib/facets/core/kernel/autoreload.rb +3 -5
  28. data/lib/facets/core/module/attr_tester.rb +40 -12
  29. data/lib/facets/core/module/on_included.rb +1 -3
  30. data/lib/facets/core/nilclass/op_cmp.rb +2 -1
  31. data/lib/facets/core/string/capitalize_all.rb +30 -0
  32. data/lib/facets/core/string/capitalized.rb +2 -4
  33. data/lib/facets/core/string/cleave.rb +66 -0
  34. data/lib/facets/core/symbol/self/generate.rb +5 -4
  35. data/lib/facets/core/symbol/to_s.rb +3 -1
  36. data/lib/facets/more/aspects.rb +4 -8
  37. data/lib/facets/more/expirable.rb +2 -2
  38. data/lib/facets/more/lrucache.rb +173 -173
  39. data/lib/facets/more/openobject.rb +1 -1
  40. data/lib/facets/more/pool.rb +2 -2
  41. data/lib/facets/more/syncarray.rb +3 -3
  42. data/lib/facets/more/synchash.rb +3 -3
  43. data/lib/facets/more/uploadutils.rb +14 -16
  44. data/lib/facets/yore/enumerable/cross.rb +117 -0
  45. data/test/lib/facets/core/array/test_at_rand.rb +34 -0
  46. data/test/lib/facets/core/array/test_delete_unless.rb +28 -0
  47. data/test/lib/facets/core/array/test_delete_values.rb +28 -0
  48. data/test/lib/facets/core/array/test_delete_values_at.rb +31 -0
  49. data/test/lib/facets/core/array/test_first.rb +46 -0
  50. data/test/lib/facets/core/array/test_head.rb +42 -0
  51. data/test/lib/facets/core/array/test_last_index.rb +26 -0
  52. data/test/lib/facets/core/array/test_merge.rb +35 -0
  53. data/test/lib/facets/core/array/test_mid.rb +33 -0
  54. data/test/lib/facets/core/array/test_middle.rb +29 -0
  55. data/test/lib/facets/core/array/test_op_fetch.rb +35 -0
  56. data/test/lib/facets/core/array/test_pad.rb +48 -0
  57. data/test/lib/facets/core/array/test_pick.rb +40 -0
  58. data/test/lib/facets/core/array/test_pos.rb +28 -0
  59. data/test/lib/facets/core/array/test_pot.rb +28 -0
  60. data/test/lib/facets/core/array/test_pull.rb +28 -0
  61. data/test/lib/facets/core/array/test_rand_index.rb +29 -0
  62. data/test/lib/facets/core/array/test_rand_subset.rb +29 -0
  63. data/test/lib/facets/core/array/test_range.rb +32 -0
  64. data/test/lib/facets/core/array/test_rotate.rb +36 -0
  65. data/test/lib/facets/core/array/test_select.rb +28 -0
  66. data/test/lib/facets/core/array/test_shuffle.rb +35 -0
  67. data/test/lib/facets/core/array/test_thru.rb +27 -0
  68. data/test/lib/facets/core/array/test_to_b.rb +27 -0
  69. data/test/lib/facets/core/array/test_to_h.rb +33 -0
  70. data/test/lib/facets/core/array/test_to_hash.rb +27 -0
  71. data/test/lib/facets/core/binding/self/test_of_caller.rb +35 -0
  72. data/test/lib/facets/core/binding/test___LINE__.rb +43 -0
  73. data/test/lib/facets/core/binding/test_call_stack.rb +34 -0
  74. data/test/lib/facets/core/binding/test_called.rb +30 -0
  75. data/test/lib/facets/core/binding/test_caller.rb +35 -0
  76. data/test/lib/facets/core/binding/test_defined.rb +34 -0
  77. data/test/lib/facets/core/binding/test_eval.rb +34 -0
  78. data/test/lib/facets/core/binding/test_local_variables.rb +34 -0
  79. data/test/lib/facets/core/binding/test_method_name.rb +34 -0
  80. data/test/lib/facets/core/binding/test_op_fetch.rb +34 -0
  81. data/test/lib/facets/core/binding/test_op_store.rb +35 -0
  82. data/test/lib/facets/core/binding/test_self.rb +34 -0
  83. data/test/lib/facets/core/class/test_cattr.rb +63 -0
  84. data/test/lib/facets/core/class/test_descendents.rb +30 -0
  85. data/test/lib/facets/core/class/test_method_name.rb +26 -0
  86. data/test/lib/facets/core/class/test_remove_descendents.rb +32 -0
  87. data/test/lib/facets/core/class/test_unix_path.rb +26 -0
  88. data/test/lib/facets/core/comparable/test_at_least.rb +34 -0
  89. data/test/lib/facets/core/comparable/test_clip.rb +44 -0
  90. data/test/lib/facets/core/comparable/test_cmp.rb +28 -0
  91. data/test/lib/facets/core/continuation/self/test_create.rb +26 -0
  92. data/test/lib/facets/core/date/test_days_in_month.rb +30 -0
  93. data/test/lib/facets/core/date/test_days_of_month.rb +30 -0
  94. data/test/lib/facets/core/date/test_stamp.rb +38 -0
  95. data/test/lib/facets/core/date/test_to_date.rb +30 -0
  96. data/test/lib/facets/core/date/test_to_s.rb +30 -0
  97. data/test/lib/facets/core/date/test_to_time.rb +30 -0
  98. data/test/lib/facets/core/dir/self/test_ancestor.rb +26 -0
  99. data/test/lib/facets/core/dir/self/test_ascend.rb +41 -0
  100. data/test/lib/facets/core/enumerable/self/test_cart.rb +44 -0
  101. data/test/lib/facets/core/enumerable/self/test_combinations.rb +46 -0
  102. data/test/lib/facets/core/enumerable/self/test_cross.rb +31 -0
  103. data/test/lib/facets/core/enumerable/test_cart.rb +49 -0
  104. data/test/lib/facets/core/enumerable/test_collect_with_index.rb +27 -0
  105. data/test/lib/facets/core/enumerable/test_commonality.rb +31 -0
  106. data/test/lib/facets/core/enumerable/test_compact_collect.rb +27 -0
  107. data/test/lib/facets/core/enumerable/test_count.rb +38 -0
  108. data/test/lib/facets/core/enumerable/test_cross.rb +30 -0
  109. data/test/lib/facets/core/enumerable/test_each_by.rb +71 -0
  110. data/test/lib/facets/core/enumerable/test_each_combination.rb +29 -0
  111. data/test/lib/facets/core/enumerable/test_each_pair.rb +29 -0
  112. data/test/lib/facets/core/enumerable/test_each_slice.rb +57 -0
  113. data/test/lib/facets/core/enumerable/test_each_unique_pair.rb +29 -0
  114. data/test/lib/facets/core/enumerable/test_eachn.rb +34 -0
  115. data/test/lib/facets/core/enumerable/test_entropy.rb +26 -0
  116. data/test/lib/facets/core/enumerable/test_every.rb +35 -0
  117. data/test/lib/facets/core/enumerable/test_ew.rb +31 -0
  118. data/test/lib/facets/core/enumerable/test_filter_collect.rb +31 -0
  119. data/test/lib/facets/core/enumerable/test_find_collisions.rb +30 -0
  120. data/test/lib/facets/core/enumerable/test_frequency.rb +27 -0
  121. data/test/lib/facets/core/enumerable/test_graph.rb +30 -0
  122. data/test/lib/facets/core/enumerable/test_ideal_entropy.rb +27 -0
  123. data/test/lib/facets/core/enumerable/test_none.rb +33 -0
  124. data/test/lib/facets/core/enumerable/test_occur.rb +30 -0
  125. data/test/lib/facets/core/enumerable/test_one.rb +35 -0
  126. data/test/lib/facets/core/enumerable/test_op_pow.rb +27 -0
  127. data/test/lib/facets/core/enumerable/test_partition_by.rb +31 -0
  128. data/test/lib/facets/core/enumerable/test_permutation.rb +29 -0
  129. data/test/lib/facets/core/enumerable/test_probability.rb +27 -0
  130. data/test/lib/facets/core/enumerable/test_to_h.rb +27 -0
  131. data/test/lib/facets/core/enumerable/test_uniq_by.rb +28 -0
  132. data/test/lib/facets/core/file/self/test_create.rb +44 -0
  133. data/test/lib/facets/core/file/self/test_open_as_string.rb +50 -0
  134. data/test/lib/facets/core/file/self/test_read_list.rb +40 -0
  135. data/test/lib/facets/core/file/self/test_sanitize.rb +46 -0
  136. data/test/lib/facets/core/file/self/test_split_all.rb +27 -0
  137. data/test/lib/facets/core/float/test_round_at.rb +46 -0
  138. data/test/lib/facets/core/float/test_round_to.rb +46 -0
  139. data/test/lib/facets/core/hash/self/test_zipnew.rb +28 -0
  140. data/test/lib/facets/core/hash/test_alias.rb +31 -0
  141. data/test/lib/facets/core/hash/test_assert_has_keys.rb +27 -0
  142. data/test/lib/facets/core/hash/test_assert_has_only_keys.rb +27 -0
  143. data/test/lib/facets/core/hash/test_at.rb +28 -0
  144. data/test/lib/facets/core/hash/test_collate.rb +35 -0
  145. data/test/lib/facets/core/hash/test_each_with_index.rb +29 -0
  146. data/test/lib/facets/core/hash/test_each_with_key.rb +29 -0
  147. data/test/lib/facets/core/hash/test_graph.rb +28 -0
  148. data/test/lib/facets/core/hash/test_has_keys.rb +27 -0
  149. data/test/lib/facets/core/hash/test_has_only_keys.rb +27 -0
  150. data/test/lib/facets/core/hash/test_inverse.rb +30 -0
  151. data/test/lib/facets/core/hash/test_normalize_keys.rb +34 -0
  152. data/test/lib/facets/core/hash/test_op_fetch.rb +111 -0
  153. data/test/lib/facets/core/hash/test_op_lshift.rb +29 -0
  154. data/test/lib/facets/core/hash/test_rand_key.rb +27 -0
  155. data/test/lib/facets/core/hash/test_rand_pair.rb +27 -0
  156. data/test/lib/facets/core/hash/test_rand_value.rb +27 -0
  157. data/test/lib/facets/core/hash/test_rekey.rb +52 -0
  158. data/test/lib/facets/core/hash/test_replace_each.rb +29 -0
  159. data/test/lib/facets/core/hash/test_shuffle.rb +32 -0
  160. data/test/lib/facets/core/hash/test_slice.rb +27 -0
  161. data/test/lib/facets/core/hash/test_stringify_keys.rb +34 -0
  162. data/test/lib/facets/core/hash/test_swap.rb +27 -0
  163. data/test/lib/facets/core/hash/test_swapkey.rb +29 -0
  164. data/test/lib/facets/core/hash/test_symbolize_keys.rb +34 -0
  165. data/test/lib/facets/core/hash/test_to_h.rb +27 -0
  166. data/test/lib/facets/core/hash/test_to_ostruct.rb +30 -0
  167. data/test/lib/facets/core/hash/test_to_ostruct_recurse.rb +44 -0
  168. data/test/lib/facets/core/hash/test_traverse.rb +37 -0
  169. data/test/lib/facets/core/hash/test_update_each.rb +29 -0
  170. data/test/lib/facets/core/hash/test_update_keys.rb +28 -0
  171. data/test/lib/facets/core/hash/test_update_values.rb +28 -0
  172. data/test/lib/facets/core/hash/test_weave.rb +29 -0
  173. data/test/lib/facets/core/integer/test_factorial.rb +30 -0
  174. data/test/lib/facets/core/integer/test_multiple.rb +43 -0
  175. data/test/lib/facets/core/integer/test_of.rb +28 -0
  176. data/test/lib/facets/core/integer/test_ordinal.rb +29 -0
  177. data/test/lib/facets/core/integer/test_times_collect.rb +28 -0
  178. data/test/lib/facets/core/kernel/test___class__.rb +26 -0
  179. data/test/lib/facets/core/kernel/test_as.rb +42 -0
  180. data/test/lib/facets/core/kernel/test_assign_from.rb +31 -0
  181. data/test/lib/facets/core/kernel/test_assign_with.rb +31 -0
  182. data/test/lib/facets/core/kernel/test_bool.rb +41 -0
  183. data/test/lib/facets/core/kernel/test_bug.rb +26 -0
  184. data/test/lib/facets/core/kernel/test_call_stack.rb +26 -0
  185. data/test/lib/facets/core/kernel/test_called.rb +26 -0
  186. data/test/lib/facets/core/kernel/test_callee.rb +26 -0
  187. data/test/lib/facets/core/kernel/test_constant.rb +33 -0
  188. data/test/lib/facets/core/kernel/test_copy.rb +40 -0
  189. data/test/lib/facets/core/kernel/test_deep_copy.rb +40 -0
  190. data/test/lib/facets/core/kernel/test_demo.rb +28 -0
  191. data/test/lib/facets/core/kernel/test_fn.rb +26 -0
  192. data/test/lib/facets/core/kernel/test_get_by_id.rb +28 -0
  193. data/test/lib/facets/core/kernel/test_here.rb +26 -0
  194. data/test/lib/facets/core/kernel/test_in.rb +27 -0
  195. data/test/lib/facets/core/kernel/test_instance_class.rb +27 -0
  196. data/test/lib/facets/core/kernel/test_instance_exec.rb +58 -0
  197. data/test/lib/facets/core/kernel/test_maybe.rb +26 -0
  198. data/test/lib/facets/core/kernel/test_meta_class.rb +27 -0
  199. data/test/lib/facets/core/kernel/test_metaclass.rb +27 -0
  200. data/test/lib/facets/core/kernel/test_method.rb +32 -0
  201. data/test/lib/facets/core/kernel/test_methods.rb +50 -0
  202. data/test/lib/facets/core/kernel/test_new.rb +30 -0
  203. data/test/lib/facets/core/kernel/test_object_class.rb +26 -0
  204. data/test/lib/facets/core/kernel/test_object_hexid.rb +27 -0
  205. data/test/lib/facets/core/kernel/test_qua_class.rb +27 -0
  206. data/test/lib/facets/core/kernel/test_require_all.rb +26 -0
  207. data/test/lib/facets/core/kernel/test_require_esc.rb +27 -0
  208. data/test/lib/facets/core/kernel/test_resc.rb +27 -0
  209. data/test/lib/facets/core/kernel/test_send_as.rb +26 -0
  210. data/test/lib/facets/core/kernel/test_set_from.rb +33 -0
  211. data/test/lib/facets/core/kernel/test_set_with.rb +42 -0
  212. data/test/lib/facets/core/kernel/test_silently.rb +28 -0
  213. data/test/lib/facets/core/kernel/test_singleton.rb +40 -0
  214. data/test/lib/facets/core/kernel/test_singleton_class.rb +27 -0
  215. data/test/lib/facets/core/kernel/test_super_at.rb +30 -0
  216. data/test/lib/facets/core/kernel/test_supermethod.rb +33 -0
  217. data/test/lib/facets/core/kernel/test_this.rb +26 -0
  218. data/test/lib/facets/core/kernel/test_to_b.rb +28 -0
  219. data/test/lib/facets/core/kernel/test_to_bool.rb +28 -0
  220. data/test/lib/facets/core/kernel/test_to_data.rb +59 -0
  221. data/test/lib/facets/core/kernel/test_uri.rb +30 -0
  222. data/test/lib/facets/core/kernel/test_val.rb +43 -0
  223. data/test/lib/facets/core/kernel/test_with.rb +30 -0
  224. data/test/lib/facets/core/kernel/test_with_accessor.rb +51 -0
  225. data/test/lib/facets/core/matchdata/test_match.rb +29 -0
  226. data/test/lib/facets/core/matchdata/test_matchtree.rb +37 -0
  227. data/test/lib/facets/core/module/self/test_op_add.rb +48 -0
  228. data/test/lib/facets/core/module/test_abstract.rb +36 -0
  229. data/test/lib/facets/core/module/test_alias_method_chain.rb +44 -0
  230. data/test/lib/facets/core/module/test_alias_module_function.rb +34 -0
  231. data/test/lib/facets/core/module/test_ancestor.rb +26 -0
  232. data/test/lib/facets/core/module/test_attr_tester.rb +39 -0
  233. data/test/lib/facets/core/module/test_basename.rb +26 -0
  234. data/test/lib/facets/core/module/test_by_name.rb +29 -0
  235. data/test/lib/facets/core/module/test_class_extension.rb +70 -0
  236. data/test/lib/facets/core/module/test_clone_using.rb +55 -0
  237. data/test/lib/facets/core/module/test_dirname.rb +26 -0
  238. data/test/lib/facets/core/module/test_equate_on.rb +37 -0
  239. data/test/lib/facets/core/module/test_include_as.rb +45 -0
  240. data/test/lib/facets/core/module/test_initializer.rb +32 -0
  241. data/test/lib/facets/core/module/test_instance_methods.rb +59 -0
  242. data/test/lib/facets/core/module/test_integrate.rb +35 -0
  243. data/test/lib/facets/core/module/test_memoize.rb +50 -0
  244. data/test/lib/facets/core/module/test_modspace.rb +27 -0
  245. data/test/lib/facets/core/module/test_namespace.rb +66 -0
  246. data/test/lib/facets/core/module/test_nesting.rb +36 -0
  247. data/test/lib/facets/core/module/test_new.rb +34 -0
  248. data/test/lib/facets/core/module/test_nodef.rb +30 -0
  249. data/test/lib/facets/core/module/test_on_included.rb +36 -0
  250. data/test/lib/facets/core/module/test_redef.rb +30 -0
  251. data/test/lib/facets/core/module/test_redefine_method.rb +30 -0
  252. data/test/lib/facets/core/module/test_redirect.rb +30 -0
  253. data/test/lib/facets/core/module/test_redirect_method.rb +30 -0
  254. data/test/lib/facets/core/module/test_remove.rb +30 -0
  255. data/test/lib/facets/core/module/test_rename.rb +31 -0
  256. data/test/lib/facets/core/module/test_rename_method.rb +31 -0
  257. data/test/lib/facets/core/module/test_revisal.rb +35 -0
  258. data/test/lib/facets/core/module/test_shadow_method.rb +30 -0
  259. data/test/lib/facets/core/module/test_sort_on.rb +42 -0
  260. data/test/lib/facets/core/module/test_this.rb +31 -0
  261. data/test/lib/facets/core/module/test_wrap.rb +30 -0
  262. data/test/lib/facets/core/module/test_wrap_method.rb +30 -0
  263. data/test/lib/facets/core/nilclass/test_blank.rb +26 -0
  264. data/test/lib/facets/core/nilclass/test_empty.rb +26 -0
  265. data/test/lib/facets/core/nilclass/test_include.rb +26 -0
  266. data/test/lib/facets/core/nilclass/test_op_fetch.rb +28 -0
  267. data/test/lib/facets/core/nilclass/test_size.rb +30 -0
  268. data/test/lib/facets/core/nilclass/test_to_h.rb +26 -0
  269. data/test/lib/facets/core/numeric/test_approx.rb +29 -0
  270. data/test/lib/facets/core/numeric/test_ceil_multiple.rb +31 -0
  271. data/test/lib/facets/core/numeric/test_distance.rb +28 -0
  272. data/test/lib/facets/core/numeric/test_succ.rb +40 -0
  273. data/test/lib/facets/core/numeric/test_to_b.rb +27 -0
  274. data/test/lib/facets/core/ostruct/test___update__.rb +45 -0
  275. data/test/lib/facets/core/ostruct/test_instance_delegate.rb +34 -0
  276. data/test/lib/facets/core/ostruct/test_op_fetch.rb +33 -0
  277. data/test/lib/facets/core/proc/test_compose.rb +29 -0
  278. data/test/lib/facets/core/proc/test_op_mul.rb +34 -0
  279. data/test/lib/facets/core/proc/test_to_method.rb +44 -0
  280. data/test/lib/facets/core/range/test_to_r.rb +27 -0
  281. data/test/lib/facets/core/range/test_to_range.rb +27 -0
  282. data/test/lib/facets/core/range/test_umbrella.rb +34 -0
  283. data/test/lib/facets/core/range/test_within.rb +29 -0
  284. data/test/lib/facets/core/regexp/test_arity.rb +33 -0
  285. data/test/lib/facets/core/regexp/test_to_re.rb +27 -0
  286. data/test/lib/facets/core/regexp/test_to_regexp.rb +27 -0
  287. data/test/lib/facets/core/string/self/test_interpolate.rb +27 -0
  288. data/test/lib/facets/core/string/self/test_patterns.rb +28 -0
  289. data/test/lib/facets/core/string/self/test_rand_letter.rb +26 -0
  290. data/test/lib/facets/core/string/test_align_center.rb +34 -0
  291. data/test/lib/facets/core/string/test_at_rand.rb +35 -0
  292. data/test/lib/facets/core/string/test_basename.rb +41 -0
  293. data/test/lib/facets/core/string/test_blank.rb +27 -0
  294. data/test/lib/facets/core/string/test_bracket.rb +49 -0
  295. data/test/lib/facets/core/string/test_camelcase.rb +39 -0
  296. data/test/lib/facets/core/string/test_camelize.rb +26 -0
  297. data/test/lib/facets/core/string/test_capitalize_all.rb +26 -0
  298. data/test/lib/facets/core/string/test_capitalized.rb +26 -0
  299. data/test/lib/facets/core/string/test_chars.rb +27 -0
  300. data/test/lib/facets/core/string/test_cleave.rb +43 -0
  301. data/test/lib/facets/core/string/test_cmp.rb +30 -0
  302. data/test/lib/facets/core/string/test_demodulize.rb +38 -0
  303. data/test/lib/facets/core/string/test_divide.rb +29 -0
  304. data/test/lib/facets/core/string/test_downcase.rb +26 -0
  305. data/test/lib/facets/core/string/test_dresner.rb +32 -0
  306. data/test/lib/facets/core/string/test_each_char.rb +29 -0
  307. data/test/lib/facets/core/string/test_each_word.rb +29 -0
  308. data/test/lib/facets/core/string/test_first.rb +43 -0
  309. data/test/lib/facets/core/string/test_fold.rb +34 -0
  310. data/test/lib/facets/core/string/test_humanize.rb +26 -0
  311. data/test/lib/facets/core/string/test_indent.rb +40 -0
  312. data/test/lib/facets/core/string/test_index_all.rb +26 -0
  313. data/test/lib/facets/core/string/test_last.rb +46 -0
  314. data/test/lib/facets/core/string/test_line_wrap.rb +27 -0
  315. data/test/lib/facets/core/string/test_lines.rb +26 -0
  316. data/test/lib/facets/core/string/test_lowercase.rb +26 -0
  317. data/test/lib/facets/core/string/test_margin.rb +117 -0
  318. data/test/lib/facets/core/string/test_methodize.rb +27 -0
  319. data/test/lib/facets/core/string/test_modulize.rb +29 -0
  320. data/test/lib/facets/core/string/test_mscan.rb +30 -0
  321. data/test/lib/facets/core/string/test_natcmp.rb +30 -0
  322. data/test/lib/facets/core/string/test_nchar.rb +29 -0
  323. data/test/lib/facets/core/string/test_pathize.rb +29 -0
  324. data/test/lib/facets/core/string/test_pop.rb +47 -0
  325. data/test/lib/facets/core/string/test_pot.rb +39 -0
  326. data/test/lib/facets/core/string/test_push.rb +40 -0
  327. data/test/lib/facets/core/string/test_quote.rb +49 -0
  328. data/test/lib/facets/core/string/test_rand_byte.rb +35 -0
  329. data/test/lib/facets/core/string/test_rand_index.rb +26 -0
  330. data/test/lib/facets/core/string/test_range.rb +27 -0
  331. data/test/lib/facets/core/string/test_range_all.rb +27 -0
  332. data/test/lib/facets/core/string/test_range_of_line.rb +28 -0
  333. data/test/lib/facets/core/string/test_regesc.rb +28 -0
  334. data/test/lib/facets/core/string/test_shatter.rb +29 -0
  335. data/test/lib/facets/core/string/test_shift.rb +40 -0
  336. data/test/lib/facets/core/string/test_shuffle.rb +27 -0
  337. data/test/lib/facets/core/string/test_similarity.rb +26 -0
  338. data/test/lib/facets/core/string/test_singular.rb +86 -0
  339. data/test/lib/facets/core/string/test_soundex.rb +41 -0
  340. data/test/lib/facets/core/string/test_succ.rb +29 -0
  341. data/test/lib/facets/core/string/test_to_a.rb +27 -0
  342. data/test/lib/facets/core/string/test_to_b.rb +41 -0
  343. data/test/lib/facets/core/string/test_to_const.rb +28 -0
  344. data/test/lib/facets/core/string/test_to_date.rb +30 -0
  345. data/test/lib/facets/core/string/test_to_proc.rb +33 -0
  346. data/test/lib/facets/core/string/test_to_re.rb +28 -0
  347. data/test/lib/facets/core/string/test_to_time.rb +30 -0
  348. data/test/lib/facets/core/string/test_unix_crypt.rb +30 -0
  349. data/test/lib/facets/core/string/test_unpack.rb +34 -0
  350. data/test/lib/facets/core/string/test_unshift.rb +39 -0
  351. data/test/lib/facets/core/string/test_upcase.rb +30 -0
  352. data/test/lib/facets/core/string/test_whitespace.rb +27 -0
  353. data/test/lib/facets/core/string/test_word_filter.rb +34 -0
  354. data/test/lib/facets/core/string/test_word_wrap.rb +51 -0
  355. data/test/lib/facets/core/string/test_words.rb +37 -0
  356. data/test/lib/facets/core/symbol/test_camelcase.rb +26 -0
  357. data/test/lib/facets/core/symbol/test_camelize.rb +27 -0
  358. data/test/lib/facets/core/symbol/test_capitalize.rb +26 -0
  359. data/test/lib/facets/core/symbol/test_capitalized.rb +27 -0
  360. data/test/lib/facets/core/symbol/test_downcase.rb +27 -0
  361. data/test/lib/facets/core/symbol/test_not.rb +29 -0
  362. data/test/lib/facets/core/symbol/test_pad.rb +27 -0
  363. data/test/lib/facets/core/symbol/test_succ.rb +28 -0
  364. data/test/lib/facets/core/symbol/test_to_const.rb +28 -0
  365. data/test/lib/facets/core/symbol/test_to_proc.rb +33 -0
  366. data/test/lib/facets/core/symbol/test_to_str.rb +28 -0
  367. data/test/lib/facets/core/symbol/test_underscore.rb +26 -0
  368. data/test/lib/facets/core/symbol/test_upcase.rb +27 -0
  369. data/test/lib/facets/core/time/test_change.rb +33 -0
  370. data/test/lib/facets/core/time/test_elapse.rb +27 -0
  371. data/test/lib/facets/core/time/test_stamp.rb +39 -0
  372. data/test/lib/facets/core/time/test_to_date.rb +31 -0
  373. data/test/lib/facets/core/time/test_to_s.rb +31 -0
  374. data/test/lib/facets/core/time/test_to_time.rb +31 -0
  375. data/test/lib/facets/more/test_ann.rb +112 -0
  376. data/test/lib/facets/more/test_ann_attr.rb +39 -0
  377. data/test/lib/facets/more/test_ansicode.rb +36 -0
  378. data/test/lib/facets/more/test_arguments.rb +83 -0
  379. data/test/lib/facets/more/test_association.rb +51 -0
  380. data/test/lib/facets/more/test_autoarray.rb +32 -0
  381. data/test/lib/facets/more/test_basicobject.rb +67 -0
  382. data/test/lib/facets/more/test_bbcode.rb +34 -0
  383. data/test/lib/facets/more/test_binaryreader.rb +64 -0
  384. data/test/lib/facets/more/test_bitmask.rb +47 -0
  385. data/test/lib/facets/more/test_buildingblock.rb +47 -0
  386. data/test/lib/facets/more/test_bytes.rb +84 -0
  387. data/test/lib/facets/more/test_classmethods.rb +69 -0
  388. data/test/lib/facets/more/test_command.rb +69 -0
  389. data/test/lib/facets/more/test_coroutine.rb +60 -0
  390. data/test/lib/facets/more/test_crypt.rb +46 -0
  391. data/test/lib/facets/more/test_cut.rb +198 -0
  392. data/test/lib/facets/more/test_dependency.rb +82 -0
  393. data/test/lib/facets/more/test_dictionary.rb +107 -0
  394. data/test/lib/facets/more/test_elementor.rb +52 -0
  395. data/test/lib/facets/more/test_enumerablepass.rb +86 -0
  396. data/test/lib/facets/more/test_floatstring.rb +36 -0
  397. data/test/lib/facets/more/test_functor.rb +39 -0
  398. data/test/lib/facets/more/test_htmlbuilder.rb +38 -0
  399. data/test/lib/facets/more/test_htmlfilter.rb +86 -0
  400. data/test/lib/facets/more/test_infinity.rb +50 -0
  401. data/test/lib/facets/more/test_inheritor.rb +155 -0
  402. data/test/lib/facets/more/test_instance_intercept.rb +50 -0
  403. data/test/lib/facets/more/test_interval.rb +119 -0
  404. data/test/lib/facets/more/test_json.rb +232 -0
  405. data/test/lib/facets/more/test_linkedlist.rb +53 -0
  406. data/test/lib/facets/more/test_lisp.rb +47 -0
  407. data/test/lib/facets/more/test_lisp_format.rb +37 -0
  408. data/test/lib/facets/more/test_lrucache.rb +25 -0
  409. data/test/lib/facets/more/test_mathconstants.rb +18 -0
  410. data/test/lib/facets/more/test_methodfilter.rb +45 -0
  411. data/test/lib/facets/more/test_methodprobe.rb +53 -0
  412. data/test/lib/facets/more/test_multipliers.rb +114 -0
  413. data/test/lib/facets/more/test_multiton.rb +199 -0
  414. data/test/lib/facets/more/test_nackclass.rb +45 -0
  415. data/test/lib/facets/more/test_nilcomparable.rb +47 -0
  416. data/test/lib/facets/more/test_opencascade.rb +75 -0
  417. data/test/lib/facets/more/test_openhash.rb +126 -0
  418. data/test/lib/facets/more/test_openobject.rb +126 -0
  419. data/test/lib/facets/more/test_overload.rb +54 -0
  420. data/test/lib/facets/more/test_paramix.rb +100 -0
  421. data/test/lib/facets/more/test_pqueue.rb +39 -0
  422. data/test/lib/facets/more/test_preinitialize.rb +49 -0
  423. data/test/lib/facets/more/test_promoteself.rb +45 -0
  424. data/test/lib/facets/more/test_recorder.rb +44 -0
  425. data/test/lib/facets/more/test_snapshot.rb +34 -0
  426. data/test/lib/facets/more/test_statichash.rb +31 -0
  427. data/test/lib/facets/more/test_syncarray.rb +28 -0
  428. data/test/lib/facets/more/test_synchash.rb +28 -0
  429. data/test/lib/facets/more/test_tagiterator.rb +93 -0
  430. data/test/lib/facets/more/test_timer.rb +66 -0
  431. data/test/lib/facets/more/test_times.rb +103 -0
  432. data/test/lib/facets/more/test_tuple.rb +64 -0
  433. data/test/lib/facets/more/test_typecast.rb +68 -0
  434. data/test/lib/facets/more/test_uninheritable.rb +42 -0
  435. data/test/lib/facets/more/test_units.rb +111 -0
  436. data/test/lib/facets/more/test_xmlbuilder.rb +54 -0
  437. data/test/lib/facets/more/test_xmlhelper.rb +40 -0
  438. data/test/lib/facets/more/test_xoxo.rb +288 -0
  439. data/test/lib/facets/more/test_yamlstruct.rb +37 -0
  440. data/test/lib/facets/yore/enumerable/test_cross.rb +44 -0
  441. data/test/lib/facets/yore/kernel/test_require_facet.rb +27 -0
  442. data/test/lib/facets/yore/module/test_namespace.rb +33 -0
  443. data/test/lib/facets/yore/test_annattr.rb +39 -0
  444. data/test/lib/facets/yore/test_annotation.rb +318 -0
  445. metadata +589 -9
  446. data/lib/facet/dir/self/multiglob_recurse.rb +0 -1
  447. data/lib/facet/dir/self/multiglob_sum.rb +0 -1
  448. data/lib/facets/core/dir/self/multiglob_sum.rb +0 -42
File without changes
data/PROJECT CHANGED
@@ -26,29 +26,36 @@ rubyforge:
26
26
  package : Facets
27
27
 
28
28
  scm: darcs
29
- changelog: doc/HISTORY.txt
29
+ changelog : doc/ChangeLog
30
+ stamp : VERSION
30
31
 
31
- distribute: [ -doc/rdoc, -test/lib ]
32
+ #distribute: [ -doc/rdoc, -test/lib ]
32
33
 
33
34
  package: [ gem, tgz ]
34
35
 
36
+ notes:
37
+ labels: [ TODO, FIXME, CREDIT ]
38
+
35
39
  rdoc:
36
40
  template : jamis
37
41
  options : ['--all', '--inline-source']
38
42
 
39
43
  mail:
40
- mail_to : transfire@gmail.com #ruby-talk@ruby-lang.org
41
- mail_from : transfire@gmail.com
42
- domain : facets.rubyforge.org
43
- server : smtp.gmail.com
44
- port : 25 #587
45
- account : transfire@gmail.com
44
+ mail_to : transfire@gmail.com #ruby-talk@ruby-lang.org
45
+ mail_from : transfire@gmail.com
46
+ domain : facets.rubyforge.org
47
+ server : smtp.gmail.com
48
+ port : 25 #587
49
+ account : transfire@gmail.com
46
50
  login_type : login #cram_md5 #plain
47
- secure : true
51
+ secure : true
48
52
 
49
- announce_memo : 'doc/LATEST'
53
+ announce:
54
+ memo : 'doc/LATEST'
50
55
 
51
- test_extract : 'lib/facets/**/*.rb'
56
+ test:
57
+ extract : 'lib/facets/**/*.rb'
52
58
 
59
+ manifest: MANIFEST
53
60
  archive: ~/trans/ruby/ARCHIVE
54
61
 
data/README CHANGED
@@ -32,7 +32,7 @@ The collection PER COLLECTION is licensed as follows:
32
32
  Ruby Facets
33
33
  Copyright (c) 2004-2006 Thomas Sawyer
34
34
 
35
- Distributed under the terms of the Ruby lincense.
35
+ Distributed under the terms of the Ruby license.
36
36
 
37
37
  The Ruby license is a dual license that also provides for use of the GPL.
38
38
  Complete texts of both licenses accompany this document (see doc/COPYING).
@@ -54,7 +54,7 @@ Complete texts of both licenses accompany this document (see doc/COPYING).
54
54
  Acknowledgments and Copyrights for particular snippets of borrowed code
55
55
  are given in their respective source. All licenses are either compatible
56
56
  with the Ruby license (namely the GPL) or the original author has given
57
- permission for inclusion of their code under such lincense.</p>
57
+ permission for inclusion of their code under such lincense.
58
58
 
59
59
 
60
60
  == Mission
@@ -287,10 +287,10 @@ already included or simply have a patch, they too are more than welcome.
287
287
  We want Ruby Facets to be of the highest quality.
288
288
 
289
289
 
290
- == Authorship
290
+ == Authors
291
291
 
292
292
  This collection was put together by, and largely written by Thomas Sawyer
293
- (aka Trans Onoma). He can be reached via email at transfire at gmail.com.
293
+ (aka Trans). He can be reached via email at transfire at gmail.com.
294
294
 
295
295
  Some parts of this collection were written and/or inspired by other
296
296
  persons. Fortunately nearly all were copyrighted under the same open
@@ -299,17 +299,11 @@ copyright notice with the source code.
299
299
 
300
300
  Any code file not specifically labelled shall fall under the Ruby License.
301
301
 
302
- In all cases, I have made every effort to give credit where credit is due. You will find these copyrights, thanks and acknowledgements embedded in the source code, and an unobtrusive
303
- "Author(s)" section is given in the RDocs.
302
+ In all cases, I have made every effort to give credit where credit is due.
303
+ You will find these copyrights, thanks and acknowledgements embedded in the
304
+ source code, and an unobtrusive "Author(s)" section is given in the RDocs.
304
305
 
305
- Main Developers include:
306
-
307
- * Thomas Sawyer
308
- * George Moschovitis
309
- * Peter Vanbroekhoven
310
- * Florian Gross
311
-
312
- See the AUTHORS file for a list of all other contributing Rubyists.
306
+ Also see the AUTHORS file for a list of all contributing Rubyists.
313
307
 
314
308
  If anyone is missing from the list, please let me know and
315
309
  I will correct right away. Thanks.
data/Rakefile CHANGED
@@ -2,11 +2,7 @@
2
2
 
3
3
  # Facets Rakefile
4
4
 
5
- require '4rake/4rake'
6
-
7
-
8
- #require 'project/project'
9
- #project = Project.load
5
+ require 'autorake'
10
6
 
11
7
  #
12
8
  # Redirect, extact tests and run tests
@@ -25,7 +21,7 @@ LIBDIR = 'lib'
25
21
  REDIR = 'facet'
26
22
  SRCDIR = 'facets'
27
23
 
28
- desc "create redirection facet/ lib"
24
+ desc "Create redirection facet/ lib"
29
25
  task :redirect do
30
26
  count = 0
31
27
  dest = File.join( LIBDIR, REDIR )
@@ -106,7 +102,7 @@ end
106
102
 
107
103
  MTHPATH = "lib/facets/core"
108
104
 
109
- desc "output core method list"
105
+ desc "Output core method list"
110
106
  task :list do
111
107
  index_methods
112
108
  puts method_list_outline
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.8.8 rc (2007-01-30)
1
+ 1.8.20 rc (2007-02-06)
@@ -23,20 +23,25 @@
23
23
  * Michael Granger
24
24
  * Florian Gross
25
25
  * Sean O'Halpin
26
- * Thomas-Ivo Heinen
27
26
  * David Heinemeier Hansson
27
+ * Thomas-Ivo Heinen
28
+ * Dave Hoover
28
29
  * Ara T. Howard
29
30
  * MenTaLguY
30
31
  * Mohammad Khan
32
+ * Richard Laugesen
31
33
  * Derek Lewis
32
34
  * Jan Molic
33
35
  * George Moschovitis
34
36
  * Michael Neumann
37
+ * Tim Pease
35
38
  * Jonas Pfenniger
39
+ * Ryan Platte
36
40
  * Thomas Sawyer
37
41
  * Daniel Schierbeck
38
42
  * Gavin Sinclair
39
43
  * Tilo Sloboda
44
+ * Phil Tomson
40
45
  * Peter Vanbroekhoven
41
46
  * Jim Weirich
42
47
  * Jeff Wood
@@ -1,3 +1,99 @@
1
+ Tue Feb 6 13:37:23 EST 2007 Trans <transfire@gmail.com>
2
+ * removed #own from base list in facets.rb (really need a standard for "singleton class")
3
+
4
+ Tue Feb 6 13:36:34 EST 2007 Trans <transfire@gmail.com>
5
+ * minor adjustments to uploadutils
6
+
7
+ Tue Feb 6 13:35:54 EST 2007 Trans <transfire@gmail.com>
8
+ * fixed bug in aspects.rb that would not handle args of wrapped method
9
+
10
+ Tue Feb 6 13:35:23 EST 2007 Trans <transfire@gmail.com>
11
+ * Symbol#to_s optimization, had to remove freeze
12
+
13
+ Tue Feb 6 13:34:16 EST 2007 Trans <transfire@gmail.com>
14
+ * updates to fileutils/stage (stage worth keeping?)
15
+
16
+ Tue Feb 6 13:32:53 EST 2007 Trans <transfire@gmail.com>
17
+ * update to credits
18
+
19
+ Tue Feb 6 13:13:51 EST 2007 Trans <transfire@gmail.com>
20
+ * fix bug in kernel/ask, returns more than one character
21
+
22
+ Tue Feb 6 13:12:39 EST 2007 Trans <transfire@gmail.com>
23
+ * cleanup of enumerbale/graph (no effective change)
24
+
25
+ Tue Feb 6 13:10:58 EST 2007 Trans <transfire@gmail.com>
26
+ * new super fast enumerable/cart by Thomas Hafner (replaces #cross)
27
+
28
+ Tue Feb 6 13:08:48 EST 2007 Trans <transfire@gmail.com>
29
+ * improved multiglob rountines (accept '+' and '-' prefixes)
30
+
31
+ Tue Feb 6 10:02:31 EST 2007 Trans <transfire@gmail.com>
32
+ * No longer will track project file via scm until it settles
33
+
34
+ Mon Feb 5 08:23:54 EST 2007 Trans <transfire@gmail.com>
35
+ * fixed bug in attr_tester, thanks Dov!
36
+
37
+ Tue Jan 30 11:48:34 EST 2007 Trans <transfire@gmail.com>
38
+ * added weekdays to times.rb thanks to Ryan Platte and Dave Hoover
39
+
40
+ Tue Jan 30 11:47:40 EST 2007 Trans <transfire@gmail.com>
41
+ * improvements to dictionary.rb (no longer a subclass of Hash) thanks Jan!
42
+
43
+ Tue Jan 30 11:43:38 EST 2007 Trans <transfire@gmail.com>
44
+ * re-replace openhash with openobject
45
+
46
+ Tue Jan 30 11:43:03 EST 2007 Trans <transfire@gmail.com>
47
+ * improvements to ann.rb and ann_attr.rb. works, yea!
48
+
49
+ Tue Jan 30 11:42:34 EST 2007 Trans <transfire@gmail.com>
50
+ * fixed bug in string/singular.rb
51
+
52
+ Tue Jan 30 11:41:29 EST 2007 Trans <transfire@gmail.com>
53
+ * changed enumerable/cross into enumerable/cart and cartesian_product
54
+
55
+ Tue Jan 30 11:40:04 EST 2007 Trans <transfire@gmail.com>
56
+ * openobject returns (openhash was a bad name, thanks george)
57
+
58
+ Tue Jan 30 11:38:57 EST 2007 Trans <transfire@gmail.com>
59
+ * moved enumerable/cross to enumerable/cart (cartesian_product)
60
+
61
+ Wed Jan 24 17:49:59 EST 2007 Trans <transfire@gmail.com>
62
+ tagged 1.8
63
+
64
+ Wed Jan 24 17:25:52 EST 2007 Trans <transfire@gmail.com>
65
+ * added buildingblock.rb, replaced builderobject.rb
66
+
67
+ Wed Jan 24 17:22:54 EST 2007 Trans <transfire@gmail.com>
68
+ * adjust require for "yored" files
69
+
70
+ Wed Jan 24 17:22:20 EST 2007 Trans <transfire@gmail.com>
71
+ * HtmlBuilder and XMLBuilder aer now based on BuildingBlock
72
+
73
+ Wed Jan 24 17:21:23 EST 2007 Trans <transfire@gmail.com>
74
+ * bug fix for command.rb
75
+
76
+ Wed Jan 24 17:20:13 EST 2007 Trans <transfire@gmail.com>
77
+ * minor improvements to basic object (object_self to access kernel methods)
78
+
79
+ Wed Jan 24 17:19:08 EST 2007 Trans <transfire@gmail.com>
80
+ * ostuct adjustment, use #instance_delegate to get underneth the open access
81
+
82
+ Wed Jan 24 17:18:21 EST 2007 Trans <transfire@gmail.com>
83
+ * module/include_as is now based on module/namespace (thanks Pit!)
84
+
85
+ Wed Jan 24 17:17:04 EST 2007 Trans <transfire@gmail.com>
86
+ * minor adjustments to methods for (class<<self;self;end)
87
+
88
+ Wed Jan 24 17:16:25 EST 2007 Trans <transfire@gmail.com>
89
+ * fixed enumerable/partition_by
90
+
91
+ Wed Jan 24 17:15:49 EST 2007 Trans <transfire@gmail.com>
92
+ * further updates to project info file (need to stop versioning this)
93
+
94
+ Wed Jan 24 17:14:34 EST 2007 Trans <transfire@gmail.com>
95
+ * deprecated (yored) builderobject.rb (poor implementation)
96
+
1
97
  Tue Jan 23 18:30:14 EST 2007 Trans <transfire@gmail.com>
2
98
  * added hash/insert; like store but only if key isn't already present
3
99
 
File without changes
@@ -0,0 +1 @@
1
+ require 'facets/core/array/pad.rb'
@@ -0,0 +1 @@
1
+ require 'facets/core/dir/self/multiglob_r.rb'
@@ -0,0 +1 @@
1
+ require 'facets/core/dir/self/multiglob_with_default.rb'
@@ -0,0 +1 @@
1
+ require 'facets/core/string/capitalize_all.rb'
@@ -0,0 +1 @@
1
+ require 'facets/core/string/cleave.rb'
@@ -0,0 +1,76 @@
1
+ # CREDIT Richard Laugesen
2
+
3
+ class Array
4
+
5
+ # Pad an array with a given <tt>value</tt> upto a given <tt>length</tt>.
6
+ #
7
+ # [0,1,2].pad(6,"a") #=> [0,1,2,"a","a","a"]
8
+ #
9
+ # If <tt>length</tt> is a negative number padding will be added
10
+ # to the beginning of the array.
11
+ #
12
+ # [0,1,2].pad(-6,"a") #=> ["a","a","a",0,1,2]
13
+
14
+ def pad(len, val=nil)
15
+ return dup if self.size >= len.abs
16
+ if len < 0
17
+ Array.new((len+size).abs,val) + self
18
+ else
19
+ self + Array.new(len-size,val)
20
+ end
21
+ end
22
+
23
+ # Like #pad but changes the array in place.
24
+ #
25
+ # a = [0,1,2]
26
+ # a.pad!(6,"x")
27
+ # a #=> [0,1,2,"x","x","x"]
28
+
29
+ def pad!(len, val=nil)
30
+ return self if self.size >= len.abs
31
+ if len < 0
32
+ replace Array.new((len+size).abs,val) + self
33
+ else
34
+ concat Array.new(len-size,val)
35
+ end
36
+ end
37
+
38
+ end
39
+
40
+
41
+ =begin test
42
+
43
+ require 'test/unit'
44
+
45
+ class TestPad < Test::Unit::TestCase
46
+
47
+ def test_pad
48
+ r = [0,1,2,3].pad(7,"x")
49
+ x = [0,1,2,3,"x","x","x"]
50
+ assert_equal(x,r)
51
+ end
52
+
53
+ def test_pad!
54
+ a = [0,1,2,3]
55
+ r = a.pad!(6,"y")
56
+ x = [0,1,2,3,"y","y"]
57
+ assert_equal(x,a)
58
+ end
59
+
60
+ def test_pad_negative
61
+ r = [0,1,2,3].pad(-7,"n")
62
+ x = ["n","n","n",0,1,2,3]
63
+ assert_equal(x,r)
64
+ end
65
+
66
+ def test_pad_negative!
67
+ a = [0,1,2,3]
68
+ r = a.pad!(-6,"q")
69
+ x = ["q","q",0,1,2,3]
70
+ assert_equal(x,a)
71
+ end
72
+
73
+ end
74
+
75
+ =end
76
+
@@ -1,6 +1,5 @@
1
- #--
2
- # Credit due to George Moschovitis <gm@navel.gr>
3
- #++
1
+ # CREDIT George Moschovitis
2
+
4
3
  class Dir
5
4
 
6
5
  # Recursively scan a directory and pass each file
@@ -1,32 +1,110 @@
1
+ # = multiglob.rb
2
+ #
3
+ # CREDIT Tom Sawyer
1
4
 
2
5
  # Like +glob+ but can take multiple patterns.
3
6
  #
4
7
  # Dir.multiglob( '*.rb', '*.py' )
5
8
  #
6
- # TODO This does not yet support glob flags.
9
+ # Rather then constants for options multiglob accepts a trailing options
10
+ # hash of symbol keys.
11
+ #
12
+ # :noescape File::FNM_NOESCAPE
13
+ # :casefold File::FNM_CASEFOLD
14
+ # :pathname File::FNM_PATHNAME
15
+ # :dotmatch File::FNM_DOTMATCH
16
+ # :strict File::FNM_PATHNAME && File::FNM_DOTMATCH
17
+ #
18
+ # It also has an option for recurse.
19
+ #
20
+ # :recurse Recurively include contents of directories.
21
+ #
22
+ # For example
23
+ #
24
+ # Dir.multiglob( '*', :recurse => true )
25
+ #
26
+ # would have the same result as
27
+ #
28
+ # Dir.multiglob('**/*')
29
+ #
30
+ # Multiglob also accepts '+' and '-' prefixes. Any entry that begins with a '-'
31
+ # is treated as an exclusion glob and will be removed from the final result.
32
+ # For example, to collect all files in the current directory, less ruby scripts:
33
+ #
34
+ # Dir.multiglob( '*', '-*.rb' )
35
+ #
36
+ # This is very useful in collecting files as specificed by a configuration
37
+ # parameter.
7
38
 
8
39
  def Dir.multiglob( *patterns )
40
+ options = (Hash === patterns.last ? patterns.pop : {})
41
+
42
+ bitflags = 0
43
+ bitflags |= File::FNM_NOESCAPE if options[:noescape]
44
+ bitflags |= File::FNM_CASEFOLD if options[:casefold]
45
+ bitflags |= File::FNM_PATHNAME if options[:pathname] or options[:strict]
46
+ bitflags |= File::FNM_DOTMATCH if options[:dotmatch] or options[:strict]
47
+
9
48
  patterns = [patterns].flatten.compact
10
- patterns.collect{ |pattern| Dir.glob(pattern) }.flatten.uniq
49
+
50
+ patterns_include = patterns.select{ |f| f !~ /^[-]/ }
51
+ patterns_exclude = patterns.select{ |f| f =~ /^[-]/ }
52
+
53
+ patterns_include.collect!{ |f| f =~ /^[+]/ ? f[1..-1] : f }
54
+ patterns_exclude.collect!{ |f| f =~ /^[-]/ ? f[1..-1] : f }
55
+
56
+ if options[:recurse]
57
+ patterns_include += patterns_include.collect{ |f| File.join(f, '**', '*') }
58
+ patterns_exclude += patterns_exclude.collect{ |f| File.join(f, '**', '*') }
59
+ end
60
+
61
+ files = []
62
+ files += patterns_include.collect{ |pattern| Dir.glob(pattern, bitflags) }.flatten.uniq
63
+ files -= patterns_exclude.collect{ |pattern| Dir.glob(pattern, bitflags) }.flatten.uniq
64
+
65
+ return files
11
66
  end
12
67
 
13
68
  # The same as +multiglob+, but recusively includes directories.
14
69
  #
15
- # Dir.multiglob_recurse( 'folder' )
70
+ # Dir.multiglob_r( 'folder' )
16
71
  #
17
72
  # is equivalent to
18
73
  #
74
+ # Dir.multiglob( 'folder', :recurse=>true )
75
+ #
76
+ # The effect of which is
77
+ #
19
78
  # Dir.multiglob( 'folder', 'folder/**/*' )
79
+
80
+ def Dir.multiglob_r( *patterns )
81
+ options = (Hash === patterns.last ? patterns.pop : {})
82
+ options[:recurse] = true
83
+ patterns << options
84
+ multiglob(*patterns)
85
+ end
86
+
87
+ # This is just like multiglob but handles a base pattern such that
88
+ # if the +patterns+ list starts with a '+' or '-' entry, then the base
89
+ # will be included in the result, otherwise it will be omitted.
20
90
  #
21
- # TODO This does not yet support glob flags.
91
+ # Dir.multiglob_with_default('*.yaml', '-*.rb') #=> [ 'foo.yaml' ]
92
+ # Dir.multiglob_with_default('*.yaml', '+*.rb') #=> [ 'foo.yaml', 'foo.rb' ]
93
+ # Dir.multiglob_with_default('*.yaml', '*.rb') #=> [ 'foo.rb' ]
94
+ #
95
+ # This is useful when a configuration option needs to supply a file list
96
+ # that may include files, exclude files or append files to a default list.
22
97
 
23
- def Dir.multiglob_recurse( *patterns )
24
- patterns = [patterns].flatten.compact
25
- files = patterns.collect{ |pattern| Dir.glob(pattern) }.flatten.uniq
26
- files.each do |f|
27
- if File.directory?(f)
28
- patterns |= [ File.join(f, '**', '*' ) ]
29
- end
98
+ def Dir.multiglob_with_default(default, *patterns)
99
+ default = [default].flatten.compact
100
+ patterns = patterns.flatten.compact
101
+
102
+ if patterns.empty?
103
+ patterns = default
104
+ elsif patterns.first =~ /^[+-]/
105
+ patterns = default + patterns
30
106
  end
31
- patterns.collect{ |pattern| Dir.glob(pattern) }.flatten.uniq
107
+
108
+ multiglob(*patterns)
32
109
  end
110
+