facets 1.8.49 → 1.8.51

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 (554) hide show
  1. data/PROJECT +4 -1
  2. data/Rakefile +25 -48
  3. data/VERSION +1 -1
  4. data/doc/AUTHORS +1 -0
  5. data/doc/CHANGES +6 -0
  6. data/lib/facets/core/kernel/tap.rb +33 -3
  7. data/lib/facets/more/command.rb +507 -271
  8. metadata +2 -548
  9. data/test/lib/facets/core/array/test_at_rand.rb +0 -34
  10. data/test/lib/facets/core/array/test_delete_unless.rb +0 -28
  11. data/test/lib/facets/core/array/test_delete_values.rb +0 -28
  12. data/test/lib/facets/core/array/test_delete_values_at.rb +0 -31
  13. data/test/lib/facets/core/array/test_first.rb +0 -46
  14. data/test/lib/facets/core/array/test_head.rb +0 -42
  15. data/test/lib/facets/core/array/test_last_index.rb +0 -26
  16. data/test/lib/facets/core/array/test_merge.rb +0 -35
  17. data/test/lib/facets/core/array/test_mid.rb +0 -33
  18. data/test/lib/facets/core/array/test_middle.rb +0 -29
  19. data/test/lib/facets/core/array/test_op_div.rb +0 -27
  20. data/test/lib/facets/core/array/test_op_fetch.rb +0 -35
  21. data/test/lib/facets/core/array/test_pad.rb +0 -48
  22. data/test/lib/facets/core/array/test_pick.rb +0 -40
  23. data/test/lib/facets/core/array/test_pos.rb +0 -28
  24. data/test/lib/facets/core/array/test_pot.rb +0 -28
  25. data/test/lib/facets/core/array/test_pull.rb +0 -28
  26. data/test/lib/facets/core/array/test_rand_index.rb +0 -29
  27. data/test/lib/facets/core/array/test_rand_subset.rb +0 -29
  28. data/test/lib/facets/core/array/test_range.rb +0 -32
  29. data/test/lib/facets/core/array/test_rotate.rb +0 -36
  30. data/test/lib/facets/core/array/test_select.rb +0 -28
  31. data/test/lib/facets/core/array/test_shuffle.rb +0 -35
  32. data/test/lib/facets/core/array/test_thru.rb +0 -27
  33. data/test/lib/facets/core/array/test_to_b.rb +0 -27
  34. data/test/lib/facets/core/array/test_to_h.rb +0 -33
  35. data/test/lib/facets/core/array/test_to_hash.rb +0 -27
  36. data/test/lib/facets/core/binding/self/test_of_caller.rb +0 -35
  37. data/test/lib/facets/core/binding/test___LINE__.rb +0 -43
  38. data/test/lib/facets/core/binding/test_call_stack.rb +0 -34
  39. data/test/lib/facets/core/binding/test_called.rb +0 -30
  40. data/test/lib/facets/core/binding/test_caller.rb +0 -35
  41. data/test/lib/facets/core/binding/test_defined.rb +0 -34
  42. data/test/lib/facets/core/binding/test_eval.rb +0 -34
  43. data/test/lib/facets/core/binding/test_local_variables.rb +0 -34
  44. data/test/lib/facets/core/binding/test_method_name.rb +0 -34
  45. data/test/lib/facets/core/binding/test_op_fetch.rb +0 -34
  46. data/test/lib/facets/core/binding/test_op_store.rb +0 -35
  47. data/test/lib/facets/core/binding/test_self.rb +0 -34
  48. data/test/lib/facets/core/class/test_cattr.rb +0 -63
  49. data/test/lib/facets/core/class/test_descendents.rb +0 -30
  50. data/test/lib/facets/core/class/test_method_name.rb +0 -26
  51. data/test/lib/facets/core/class/test_remove_descendents.rb +0 -32
  52. data/test/lib/facets/core/class/test_unix_path.rb +0 -26
  53. data/test/lib/facets/core/comparable/test_at_least.rb +0 -34
  54. data/test/lib/facets/core/comparable/test_clip.rb +0 -44
  55. data/test/lib/facets/core/comparable/test_cmp.rb +0 -28
  56. data/test/lib/facets/core/continuation/self/test_create.rb +0 -26
  57. data/test/lib/facets/core/date/test_days_in_month.rb +0 -30
  58. data/test/lib/facets/core/date/test_days_of_month.rb +0 -30
  59. data/test/lib/facets/core/date/test_stamp.rb +0 -38
  60. data/test/lib/facets/core/date/test_to_date.rb +0 -30
  61. data/test/lib/facets/core/date/test_to_s.rb +0 -30
  62. data/test/lib/facets/core/date/test_to_time.rb +0 -30
  63. data/test/lib/facets/core/dir/self/test_ancestor.rb +0 -26
  64. data/test/lib/facets/core/dir/self/test_ascend.rb +0 -41
  65. data/test/lib/facets/core/enumerable/self/test_combinations.rb +0 -46
  66. data/test/lib/facets/core/enumerable/test_cart.rb +0 -49
  67. data/test/lib/facets/core/enumerable/test_collect_with_index.rb +0 -27
  68. data/test/lib/facets/core/enumerable/test_commonality.rb +0 -31
  69. data/test/lib/facets/core/enumerable/test_compact_collect.rb +0 -27
  70. data/test/lib/facets/core/enumerable/test_count.rb +0 -38
  71. data/test/lib/facets/core/enumerable/test_each_by.rb +0 -71
  72. data/test/lib/facets/core/enumerable/test_each_combination.rb +0 -29
  73. data/test/lib/facets/core/enumerable/test_each_pair.rb +0 -29
  74. data/test/lib/facets/core/enumerable/test_each_slice.rb +0 -57
  75. data/test/lib/facets/core/enumerable/test_each_unique_pair.rb +0 -29
  76. data/test/lib/facets/core/enumerable/test_eachn.rb +0 -34
  77. data/test/lib/facets/core/enumerable/test_elementwise.rb +0 -40
  78. data/test/lib/facets/core/enumerable/test_entropy.rb +0 -26
  79. data/test/lib/facets/core/enumerable/test_every.rb +0 -35
  80. data/test/lib/facets/core/enumerable/test_ew.rb +0 -31
  81. data/test/lib/facets/core/enumerable/test_filter_collect.rb +0 -31
  82. data/test/lib/facets/core/enumerable/test_find_collisions.rb +0 -30
  83. data/test/lib/facets/core/enumerable/test_frequency.rb +0 -27
  84. data/test/lib/facets/core/enumerable/test_graph.rb +0 -30
  85. data/test/lib/facets/core/enumerable/test_ideal_entropy.rb +0 -27
  86. data/test/lib/facets/core/enumerable/test_none.rb +0 -33
  87. data/test/lib/facets/core/enumerable/test_occur.rb +0 -30
  88. data/test/lib/facets/core/enumerable/test_one.rb +0 -35
  89. data/test/lib/facets/core/enumerable/test_op_pow.rb +0 -27
  90. data/test/lib/facets/core/enumerable/test_op_tilde_self.rb +0 -40
  91. data/test/lib/facets/core/enumerable/test_partition_by.rb +0 -31
  92. data/test/lib/facets/core/enumerable/test_permutation.rb +0 -29
  93. data/test/lib/facets/core/enumerable/test_probability.rb +0 -27
  94. data/test/lib/facets/core/enumerable/test_to_h.rb +0 -27
  95. data/test/lib/facets/core/enumerable/test_uniq_by.rb +0 -28
  96. data/test/lib/facets/core/file/self/test_create.rb +0 -44
  97. data/test/lib/facets/core/file/self/test_open_as_string.rb +0 -50
  98. data/test/lib/facets/core/file/self/test_read_list.rb +0 -40
  99. data/test/lib/facets/core/file/self/test_sanitize.rb +0 -46
  100. data/test/lib/facets/core/file/self/test_split_all.rb +0 -27
  101. data/test/lib/facets/core/float/test_round_at.rb +0 -46
  102. data/test/lib/facets/core/float/test_round_to.rb +0 -46
  103. data/test/lib/facets/core/hash/self/test_zipnew.rb +0 -28
  104. data/test/lib/facets/core/hash/test_alias.rb +0 -31
  105. data/test/lib/facets/core/hash/test_assert_has_keys.rb +0 -27
  106. data/test/lib/facets/core/hash/test_assert_has_only_keys.rb +0 -27
  107. data/test/lib/facets/core/hash/test_at.rb +0 -28
  108. data/test/lib/facets/core/hash/test_collate.rb +0 -35
  109. data/test/lib/facets/core/hash/test_each_with_index.rb +0 -29
  110. data/test/lib/facets/core/hash/test_each_with_key.rb +0 -29
  111. data/test/lib/facets/core/hash/test_graph.rb +0 -28
  112. data/test/lib/facets/core/hash/test_has_keys.rb +0 -27
  113. data/test/lib/facets/core/hash/test_has_only_keys.rb +0 -27
  114. data/test/lib/facets/core/hash/test_inverse.rb +0 -30
  115. data/test/lib/facets/core/hash/test_normalize_keys.rb +0 -34
  116. data/test/lib/facets/core/hash/test_op_fetch.rb +0 -111
  117. data/test/lib/facets/core/hash/test_op_lshift.rb +0 -29
  118. data/test/lib/facets/core/hash/test_rand_key.rb +0 -27
  119. data/test/lib/facets/core/hash/test_rand_pair.rb +0 -27
  120. data/test/lib/facets/core/hash/test_rand_value.rb +0 -27
  121. data/test/lib/facets/core/hash/test_rekey.rb +0 -52
  122. data/test/lib/facets/core/hash/test_replace_each.rb +0 -29
  123. data/test/lib/facets/core/hash/test_shuffle.rb +0 -32
  124. data/test/lib/facets/core/hash/test_slice.rb +0 -27
  125. data/test/lib/facets/core/hash/test_stringify_keys.rb +0 -34
  126. data/test/lib/facets/core/hash/test_swap.rb +0 -27
  127. data/test/lib/facets/core/hash/test_swapkey.rb +0 -29
  128. data/test/lib/facets/core/hash/test_symbolize_keys.rb +0 -34
  129. data/test/lib/facets/core/hash/test_to_h.rb +0 -27
  130. data/test/lib/facets/core/hash/test_to_ostruct.rb +0 -30
  131. data/test/lib/facets/core/hash/test_to_ostruct_recurse.rb +0 -44
  132. data/test/lib/facets/core/hash/test_traverse.rb +0 -37
  133. data/test/lib/facets/core/hash/test_update_each.rb +0 -29
  134. data/test/lib/facets/core/hash/test_update_keys.rb +0 -28
  135. data/test/lib/facets/core/hash/test_update_values.rb +0 -28
  136. data/test/lib/facets/core/hash/test_weave.rb +0 -29
  137. data/test/lib/facets/core/integer/test_factorial.rb +0 -30
  138. data/test/lib/facets/core/integer/test_multiple.rb +0 -43
  139. data/test/lib/facets/core/integer/test_of.rb +0 -28
  140. data/test/lib/facets/core/integer/test_ordinal.rb +0 -29
  141. data/test/lib/facets/core/integer/test_times_collect.rb +0 -28
  142. data/test/lib/facets/core/kernel/test___class__.rb +0 -26
  143. data/test/lib/facets/core/kernel/test_as.rb +0 -42
  144. data/test/lib/facets/core/kernel/test_assign_from.rb +0 -31
  145. data/test/lib/facets/core/kernel/test_assign_with.rb +0 -31
  146. data/test/lib/facets/core/kernel/test_bool.rb +0 -41
  147. data/test/lib/facets/core/kernel/test_bug.rb +0 -26
  148. data/test/lib/facets/core/kernel/test_call_stack.rb +0 -26
  149. data/test/lib/facets/core/kernel/test_called.rb +0 -26
  150. data/test/lib/facets/core/kernel/test_callee.rb +0 -26
  151. data/test/lib/facets/core/kernel/test_constant.rb +0 -33
  152. data/test/lib/facets/core/kernel/test_copy.rb +0 -40
  153. data/test/lib/facets/core/kernel/test_deep_copy.rb +0 -40
  154. data/test/lib/facets/core/kernel/test_demo.rb +0 -28
  155. data/test/lib/facets/core/kernel/test_fn.rb +0 -26
  156. data/test/lib/facets/core/kernel/test_get_by_id.rb +0 -28
  157. data/test/lib/facets/core/kernel/test_here.rb +0 -26
  158. data/test/lib/facets/core/kernel/test_in.rb +0 -27
  159. data/test/lib/facets/core/kernel/test_instance_class.rb +0 -27
  160. data/test/lib/facets/core/kernel/test_instance_exec.rb +0 -58
  161. data/test/lib/facets/core/kernel/test_maybe.rb +0 -26
  162. data/test/lib/facets/core/kernel/test_meta_class.rb +0 -27
  163. data/test/lib/facets/core/kernel/test_metaclass.rb +0 -27
  164. data/test/lib/facets/core/kernel/test_method.rb +0 -32
  165. data/test/lib/facets/core/kernel/test_methods.rb +0 -50
  166. data/test/lib/facets/core/kernel/test_new.rb +0 -30
  167. data/test/lib/facets/core/kernel/test_object_class.rb +0 -26
  168. data/test/lib/facets/core/kernel/test_object_hexid.rb +0 -27
  169. data/test/lib/facets/core/kernel/test_qua_class.rb +0 -27
  170. data/test/lib/facets/core/kernel/test_require_all.rb +0 -26
  171. data/test/lib/facets/core/kernel/test_require_esc.rb +0 -27
  172. data/test/lib/facets/core/kernel/test_resc.rb +0 -27
  173. data/test/lib/facets/core/kernel/test_send_as.rb +0 -26
  174. data/test/lib/facets/core/kernel/test_set_from.rb +0 -33
  175. data/test/lib/facets/core/kernel/test_set_with.rb +0 -42
  176. data/test/lib/facets/core/kernel/test_silently.rb +0 -28
  177. data/test/lib/facets/core/kernel/test_singleton.rb +0 -40
  178. data/test/lib/facets/core/kernel/test_singleton_class.rb +0 -27
  179. data/test/lib/facets/core/kernel/test_super_at.rb +0 -30
  180. data/test/lib/facets/core/kernel/test_supermethod.rb +0 -33
  181. data/test/lib/facets/core/kernel/test_this.rb +0 -26
  182. data/test/lib/facets/core/kernel/test_to_b.rb +0 -28
  183. data/test/lib/facets/core/kernel/test_to_bool.rb +0 -28
  184. data/test/lib/facets/core/kernel/test_to_data.rb +0 -61
  185. data/test/lib/facets/core/kernel/test_uri.rb +0 -30
  186. data/test/lib/facets/core/kernel/test_val.rb +0 -43
  187. data/test/lib/facets/core/kernel/test_with.rb +0 -30
  188. data/test/lib/facets/core/kernel/test_with_accessor.rb +0 -51
  189. data/test/lib/facets/core/matchdata/test_match.rb +0 -29
  190. data/test/lib/facets/core/matchdata/test_matchtree.rb +0 -37
  191. data/test/lib/facets/core/module/self/test_op_add.rb +0 -50
  192. data/test/lib/facets/core/module/test_abstract.rb +0 -36
  193. data/test/lib/facets/core/module/test_alias_method_chain.rb +0 -46
  194. data/test/lib/facets/core/module/test_alias_module_function.rb +0 -34
  195. data/test/lib/facets/core/module/test_ancestor.rb +0 -26
  196. data/test/lib/facets/core/module/test_attr_tester.rb +0 -39
  197. data/test/lib/facets/core/module/test_basename.rb +0 -26
  198. data/test/lib/facets/core/module/test_by_name.rb +0 -29
  199. data/test/lib/facets/core/module/test_class_extension.rb +0 -70
  200. data/test/lib/facets/core/module/test_clone_using.rb +0 -55
  201. data/test/lib/facets/core/module/test_dirname.rb +0 -26
  202. data/test/lib/facets/core/module/test_equate_on.rb +0 -37
  203. data/test/lib/facets/core/module/test_include_as.rb +0 -45
  204. data/test/lib/facets/core/module/test_initializer.rb +0 -32
  205. data/test/lib/facets/core/module/test_instance_methods.rb +0 -59
  206. data/test/lib/facets/core/module/test_integrate.rb +0 -35
  207. data/test/lib/facets/core/module/test_memoize.rb +0 -50
  208. data/test/lib/facets/core/module/test_modspace.rb +0 -27
  209. data/test/lib/facets/core/module/test_namespace.rb +0 -66
  210. data/test/lib/facets/core/module/test_nesting.rb +0 -36
  211. data/test/lib/facets/core/module/test_new.rb +0 -34
  212. data/test/lib/facets/core/module/test_nodef.rb +0 -30
  213. data/test/lib/facets/core/module/test_on_included.rb +0 -36
  214. data/test/lib/facets/core/module/test_redef.rb +0 -30
  215. data/test/lib/facets/core/module/test_redefine_method.rb +0 -30
  216. data/test/lib/facets/core/module/test_redirect.rb +0 -30
  217. data/test/lib/facets/core/module/test_redirect_method.rb +0 -30
  218. data/test/lib/facets/core/module/test_remove.rb +0 -30
  219. data/test/lib/facets/core/module/test_rename.rb +0 -31
  220. data/test/lib/facets/core/module/test_rename_method.rb +0 -31
  221. data/test/lib/facets/core/module/test_revisal.rb +0 -35
  222. data/test/lib/facets/core/module/test_shadow_method.rb +0 -30
  223. data/test/lib/facets/core/module/test_sort_on.rb +0 -42
  224. data/test/lib/facets/core/module/test_this.rb +0 -31
  225. data/test/lib/facets/core/module/test_wrap.rb +0 -30
  226. data/test/lib/facets/core/module/test_wrap_method.rb +0 -30
  227. data/test/lib/facets/core/nilclass/test_blank.rb +0 -26
  228. data/test/lib/facets/core/nilclass/test_empty.rb +0 -26
  229. data/test/lib/facets/core/nilclass/test_include.rb +0 -26
  230. data/test/lib/facets/core/nilclass/test_op_fetch.rb +0 -28
  231. data/test/lib/facets/core/nilclass/test_size.rb +0 -30
  232. data/test/lib/facets/core/nilclass/test_to_h.rb +0 -26
  233. data/test/lib/facets/core/numeric/test_approx.rb +0 -29
  234. data/test/lib/facets/core/numeric/test_ceil_multiple.rb +0 -31
  235. data/test/lib/facets/core/numeric/test_distance.rb +0 -28
  236. data/test/lib/facets/core/numeric/test_succ.rb +0 -40
  237. data/test/lib/facets/core/numeric/test_to_b.rb +0 -27
  238. data/test/lib/facets/core/ostruct/test___update__.rb +0 -45
  239. data/test/lib/facets/core/ostruct/test_instance_delegate.rb +0 -36
  240. data/test/lib/facets/core/ostruct/test_op_fetch.rb +0 -33
  241. data/test/lib/facets/core/proc/test_compose.rb +0 -29
  242. data/test/lib/facets/core/proc/test_op_mul.rb +0 -34
  243. data/test/lib/facets/core/proc/test_to_method.rb +0 -44
  244. data/test/lib/facets/core/range/test_to_r.rb +0 -27
  245. data/test/lib/facets/core/range/test_to_range.rb +0 -27
  246. data/test/lib/facets/core/range/test_umbrella.rb +0 -34
  247. data/test/lib/facets/core/range/test_within.rb +0 -29
  248. data/test/lib/facets/core/regexp/test_arity.rb +0 -33
  249. data/test/lib/facets/core/regexp/test_to_re.rb +0 -27
  250. data/test/lib/facets/core/regexp/test_to_regexp.rb +0 -27
  251. data/test/lib/facets/core/string/self/test_interpolate.rb +0 -27
  252. data/test/lib/facets/core/string/self/test_patterns.rb +0 -28
  253. data/test/lib/facets/core/string/self/test_rand_letter.rb +0 -26
  254. data/test/lib/facets/core/string/test_align_center.rb +0 -34
  255. data/test/lib/facets/core/string/test_at_rand.rb +0 -35
  256. data/test/lib/facets/core/string/test_basename.rb +0 -41
  257. data/test/lib/facets/core/string/test_blank.rb +0 -27
  258. data/test/lib/facets/core/string/test_bracket.rb +0 -49
  259. data/test/lib/facets/core/string/test_bytes.rb +0 -25
  260. data/test/lib/facets/core/string/test_camelcase.rb +0 -39
  261. data/test/lib/facets/core/string/test_camelize.rb +0 -26
  262. data/test/lib/facets/core/string/test_capitalize_all.rb +0 -26
  263. data/test/lib/facets/core/string/test_capitalized.rb +0 -26
  264. data/test/lib/facets/core/string/test_chars.rb +0 -27
  265. data/test/lib/facets/core/string/test_cleave.rb +0 -43
  266. data/test/lib/facets/core/string/test_cmp.rb +0 -30
  267. data/test/lib/facets/core/string/test_demodulize.rb +0 -38
  268. data/test/lib/facets/core/string/test_divide.rb +0 -29
  269. data/test/lib/facets/core/string/test_downcase.rb +0 -26
  270. data/test/lib/facets/core/string/test_dresner.rb +0 -32
  271. data/test/lib/facets/core/string/test_each_char.rb +0 -29
  272. data/test/lib/facets/core/string/test_each_word.rb +0 -29
  273. data/test/lib/facets/core/string/test_first.rb +0 -43
  274. data/test/lib/facets/core/string/test_fold.rb +0 -34
  275. data/test/lib/facets/core/string/test_humanize.rb +0 -26
  276. data/test/lib/facets/core/string/test_indent.rb +0 -40
  277. data/test/lib/facets/core/string/test_index_all.rb +0 -26
  278. data/test/lib/facets/core/string/test_last.rb +0 -46
  279. data/test/lib/facets/core/string/test_line_wrap.rb +0 -27
  280. data/test/lib/facets/core/string/test_lines.rb +0 -26
  281. data/test/lib/facets/core/string/test_lowercase.rb +0 -26
  282. data/test/lib/facets/core/string/test_margin.rb +0 -117
  283. data/test/lib/facets/core/string/test_methodize.rb +0 -27
  284. data/test/lib/facets/core/string/test_modulize.rb +0 -29
  285. data/test/lib/facets/core/string/test_mscan.rb +0 -30
  286. data/test/lib/facets/core/string/test_natcmp.rb +0 -30
  287. data/test/lib/facets/core/string/test_nchar.rb +0 -29
  288. data/test/lib/facets/core/string/test_pathize.rb +0 -29
  289. data/test/lib/facets/core/string/test_pop.rb +0 -47
  290. data/test/lib/facets/core/string/test_pot.rb +0 -39
  291. data/test/lib/facets/core/string/test_push.rb +0 -40
  292. data/test/lib/facets/core/string/test_quote.rb +0 -49
  293. data/test/lib/facets/core/string/test_rand_byte.rb +0 -35
  294. data/test/lib/facets/core/string/test_rand_index.rb +0 -26
  295. data/test/lib/facets/core/string/test_range.rb +0 -27
  296. data/test/lib/facets/core/string/test_range_all.rb +0 -27
  297. data/test/lib/facets/core/string/test_range_of_line.rb +0 -28
  298. data/test/lib/facets/core/string/test_regesc.rb +0 -28
  299. data/test/lib/facets/core/string/test_shatter.rb +0 -29
  300. data/test/lib/facets/core/string/test_shift.rb +0 -40
  301. data/test/lib/facets/core/string/test_shuffle.rb +0 -27
  302. data/test/lib/facets/core/string/test_similarity.rb +0 -26
  303. data/test/lib/facets/core/string/test_singular.rb +0 -86
  304. data/test/lib/facets/core/string/test_soundex.rb +0 -41
  305. data/test/lib/facets/core/string/test_succ.rb +0 -29
  306. data/test/lib/facets/core/string/test_to_a.rb +0 -27
  307. data/test/lib/facets/core/string/test_to_b.rb +0 -41
  308. data/test/lib/facets/core/string/test_to_const.rb +0 -28
  309. data/test/lib/facets/core/string/test_to_date.rb +0 -30
  310. data/test/lib/facets/core/string/test_to_proc.rb +0 -33
  311. data/test/lib/facets/core/string/test_to_re.rb +0 -28
  312. data/test/lib/facets/core/string/test_to_time.rb +0 -30
  313. data/test/lib/facets/core/string/test_unix_crypt.rb +0 -30
  314. data/test/lib/facets/core/string/test_unpack.rb +0 -34
  315. data/test/lib/facets/core/string/test_unshift.rb +0 -39
  316. data/test/lib/facets/core/string/test_upcase.rb +0 -30
  317. data/test/lib/facets/core/string/test_whitespace.rb +0 -27
  318. data/test/lib/facets/core/string/test_word_filter.rb +0 -34
  319. data/test/lib/facets/core/string/test_word_wrap.rb +0 -51
  320. data/test/lib/facets/core/string/test_words.rb +0 -37
  321. data/test/lib/facets/core/symbol/test_camelcase.rb +0 -26
  322. data/test/lib/facets/core/symbol/test_camelize.rb +0 -27
  323. data/test/lib/facets/core/symbol/test_capitalize.rb +0 -26
  324. data/test/lib/facets/core/symbol/test_capitalized.rb +0 -27
  325. data/test/lib/facets/core/symbol/test_downcase.rb +0 -27
  326. data/test/lib/facets/core/symbol/test_not.rb +0 -29
  327. data/test/lib/facets/core/symbol/test_pad.rb +0 -27
  328. data/test/lib/facets/core/symbol/test_succ.rb +0 -28
  329. data/test/lib/facets/core/symbol/test_to_const.rb +0 -28
  330. data/test/lib/facets/core/symbol/test_to_proc.rb +0 -33
  331. data/test/lib/facets/core/symbol/test_to_str.rb +0 -28
  332. data/test/lib/facets/core/symbol/test_underscore.rb +0 -26
  333. data/test/lib/facets/core/symbol/test_upcase.rb +0 -27
  334. data/test/lib/facets/core/time/test_change.rb +0 -33
  335. data/test/lib/facets/core/time/test_elapse.rb +0 -27
  336. data/test/lib/facets/core/time/test_stamp.rb +0 -39
  337. data/test/lib/facets/core/time/test_to_date.rb +0 -31
  338. data/test/lib/facets/core/time/test_to_s.rb +0 -31
  339. data/test/lib/facets/core/time/test_to_time.rb +0 -31
  340. data/test/lib/facets/more/test_ann.rb +0 -112
  341. data/test/lib/facets/more/test_ann_attr.rb +0 -39
  342. data/test/lib/facets/more/test_ansicode.rb +0 -36
  343. data/test/lib/facets/more/test_arguments.rb +0 -83
  344. data/test/lib/facets/more/test_association.rb +0 -51
  345. data/test/lib/facets/more/test_autoarray.rb +0 -32
  346. data/test/lib/facets/more/test_basicobject.rb +0 -67
  347. data/test/lib/facets/more/test_bbcode.rb +0 -34
  348. data/test/lib/facets/more/test_binaryreader.rb +0 -64
  349. data/test/lib/facets/more/test_bitmask.rb +0 -47
  350. data/test/lib/facets/more/test_buildingblock.rb +0 -48
  351. data/test/lib/facets/more/test_bytes.rb +0 -84
  352. data/test/lib/facets/more/test_classmethods.rb +0 -69
  353. data/test/lib/facets/more/test_command.rb +0 -69
  354. data/test/lib/facets/more/test_coroutine.rb +0 -60
  355. data/test/lib/facets/more/test_crypt.rb +0 -46
  356. data/test/lib/facets/more/test_cut.rb +0 -198
  357. data/test/lib/facets/more/test_dependency.rb +0 -82
  358. data/test/lib/facets/more/test_dictionary.rb +0 -107
  359. data/test/lib/facets/more/test_elementor.rb +0 -52
  360. data/test/lib/facets/more/test_enumerablepass.rb +0 -86
  361. data/test/lib/facets/more/test_floatstring.rb +0 -36
  362. data/test/lib/facets/more/test_functor.rb +0 -39
  363. data/test/lib/facets/more/test_htmlbuilder.rb +0 -38
  364. data/test/lib/facets/more/test_htmlfilter.rb +0 -86
  365. data/test/lib/facets/more/test_infinity.rb +0 -50
  366. data/test/lib/facets/more/test_inheritor.rb +0 -155
  367. data/test/lib/facets/more/test_instance_intercept.rb +0 -50
  368. data/test/lib/facets/more/test_interval.rb +0 -119
  369. data/test/lib/facets/more/test_json.rb +0 -232
  370. data/test/lib/facets/more/test_linkedlist.rb +0 -53
  371. data/test/lib/facets/more/test_lisp.rb +0 -47
  372. data/test/lib/facets/more/test_lisp_format.rb +0 -37
  373. data/test/lib/facets/more/test_lrucache.rb +0 -25
  374. data/test/lib/facets/more/test_mathconstants.rb +0 -18
  375. data/test/lib/facets/more/test_methodfilter.rb +0 -45
  376. data/test/lib/facets/more/test_methodprobe.rb +0 -53
  377. data/test/lib/facets/more/test_multipliers.rb +0 -114
  378. data/test/lib/facets/more/test_multiton.rb +0 -199
  379. data/test/lib/facets/more/test_nackclass.rb +0 -45
  380. data/test/lib/facets/more/test_nilcomparable.rb +0 -47
  381. data/test/lib/facets/more/test_opencascade.rb +0 -75
  382. data/test/lib/facets/more/test_openobject.rb +0 -126
  383. data/test/lib/facets/more/test_overload.rb +0 -54
  384. data/test/lib/facets/more/test_paramix.rb +0 -100
  385. data/test/lib/facets/more/test_pqueue.rb +0 -39
  386. data/test/lib/facets/more/test_preinitialize.rb +0 -49
  387. data/test/lib/facets/more/test_promoteself.rb +0 -45
  388. data/test/lib/facets/more/test_recorder.rb +0 -44
  389. data/test/lib/facets/more/test_snapshot.rb +0 -34
  390. data/test/lib/facets/more/test_statichash.rb +0 -31
  391. data/test/lib/facets/more/test_syncarray.rb +0 -28
  392. data/test/lib/facets/more/test_synchash.rb +0 -28
  393. data/test/lib/facets/more/test_tagiterator.rb +0 -93
  394. data/test/lib/facets/more/test_timer.rb +0 -66
  395. data/test/lib/facets/more/test_times.rb +0 -103
  396. data/test/lib/facets/more/test_tuple.rb +0 -64
  397. data/test/lib/facets/more/test_typecast.rb +0 -68
  398. data/test/lib/facets/more/test_uninheritable.rb +0 -42
  399. data/test/lib/facets/more/test_units.rb +0 -111
  400. data/test/lib/facets/more/test_xmlbuilder.rb +0 -54
  401. data/test/lib/facets/more/test_xmlhelper.rb +0 -40
  402. data/test/lib/facets/more/test_xoxo.rb +0 -288
  403. data/test/lib/facets/more/test_yamlstruct.rb +0 -37
  404. data/test/lib/facets/yore/enumerable/test_cross.rb +0 -44
  405. data/test/lib/facets/yore/kernel/test_require_facet.rb +0 -27
  406. data/test/lib/facets/yore/module/test_namespace.rb +0 -33
  407. data/test/lib/facets/yore/test_annattr.rb +0 -39
  408. data/test/lib/facets/yore/test_annotation.rb +0 -318
  409. data/work/README +0 -42
  410. data/work/TODO +0 -73
  411. data/work/bin/minitar +0 -3
  412. data/work/bin/minitar.rb +0 -814
  413. data/work/core/array/at_rand.rb +0 -95
  414. data/work/core/array/each_slice.rb +0 -23
  415. data/work/core/array/pick_values.rb +0 -32
  416. data/work/core/array/rand_indexes.rb +0 -33
  417. data/work/core/binding/class.rb +0 -11
  418. data/work/core/binding/delegate-binding.rb +0 -19
  419. data/work/core/binding/delegate.rb +0 -15
  420. data/work/core/binding/proc.rb +0 -6
  421. data/work/core/class/to_module.rb +0 -3
  422. data/work/core/enumerable/op_fetch.rb +0 -30
  423. data/work/core/fileutils/cptouch.rb +0 -20
  424. data/work/core/fileutils/nl_convert.rb +0 -133
  425. data/work/core/io/expect.rb +0 -127
  426. data/work/core/join_with.rb +0 -13
  427. data/work/core/kernel/call_line.rb +0 -15
  428. data/work/core/kernel/does.rb +0 -7
  429. data/work/core/kernel/message.rb +0 -6
  430. data/work/core/kernel/query.rb +0 -15
  431. data/work/core/kernel/taint.rb +0 -10
  432. data/work/core/logger/clean_logger.rb +0 -10
  433. data/work/core/module/attr-old.rb +0 -308
  434. data/work/core/module/attr.rb +0 -98
  435. data/work/core/module/attr_xxx.rb +0 -22
  436. data/work/core/module/by_regexp.rb +0 -21
  437. data/work/core/module/cast.rb +0 -64
  438. data/work/core/module/class_attribute_accessors.rb +0 -57
  439. data/work/core/module/inherit.rb +0 -99
  440. data/work/core/module/inherit0.rb +0 -59
  441. data/work/core/module/let.rb +0 -51
  442. data/work/core/module/meta_attr.rb +0 -60
  443. data/work/core/module/module_attribute_accessors.rb +0 -57
  444. data/work/core/module/permissions.rb +0 -32
  445. data/work/core/module/preserved.rb +0 -108
  446. data/work/core/module/sattr_accessor.rb +0 -1
  447. data/work/core/module/sattr_reader.rb +0 -1
  448. data/work/core/module/sattr_setter.rb +0 -1
  449. data/work/core/module/sattr_tester.rb +0 -1
  450. data/work/core/module/sattr_writer.rb +0 -1
  451. data/work/core/module/tc_attr.rb +0 -107
  452. data/work/core/module/to_module.rb +0 -37
  453. data/work/core/module/version.rb +0 -23
  454. data/work/core/string/frequency.rb +0 -40
  455. data/work/core/string/op_add.rb +0 -24
  456. data/work/core/string/op_div.rb +0 -15
  457. data/work/core/string/pred.rb +0 -217
  458. data/work/core/string/probability.rb +0 -35
  459. data/work/core/string/succ_distance.rb +0 -112
  460. data/work/core/string/to_arr.rb +0 -57
  461. data/work/core/string/to_ary.rb +0 -12
  462. data/work/core/string/word_wrap.rb +0 -62
  463. data/work/hash_open.rb +0 -23
  464. data/work/misc/calibre/ProjectInfo.annotation +0 -46
  465. data/work/misc/calibre/ProjectInfo.ansicode +0 -33
  466. data/work/misc/calibre/ProjectInfo.association +0 -34
  467. data/work/misc/calibre/ProjectInfo.basicobject +0 -36
  468. data/work/misc/calibre/ProjectInfo.bbcode +0 -34
  469. data/work/misc/calibre/ProjectInfo.binaryreader +0 -35
  470. data/work/misc/calibre/ProjectInfo.bitmask +0 -33
  471. data/work/misc/calibre/ProjectInfo.classinherit +0 -36
  472. data/work/misc/calibre/ProjectInfo.classmethods +0 -36
  473. data/work/misc/calibre/ProjectInfo.cloneable +0 -33
  474. data/work/misc/calibre/ProjectInfo.consoleapp +0 -35
  475. data/work/misc/calibre/ProjectInfo.coroutine +0 -37
  476. data/work/misc/calibre/ProjectInfo.crypt +0 -33
  477. data/work/misc/calibre/ProjectInfo.dictionary +0 -40
  478. data/work/misc/calibre/ProjectInfo.downloader +0 -39
  479. data/work/misc/calibre/ProjectInfo.enumerablepass +0 -35
  480. data/work/misc/calibre/ProjectInfo.expirable +0 -37
  481. data/work/misc/calibre/ProjectInfo.floatstring +0 -35
  482. data/work/misc/calibre/ProjectInfo.functor +0 -40
  483. data/work/misc/calibre/ProjectInfo.heap +0 -33
  484. data/work/misc/calibre/ProjectInfo.inheritor +0 -36
  485. data/work/misc/calibre/ProjectInfo.interval +0 -36
  486. data/work/misc/calibre/ProjectInfo.lisp +0 -38
  487. data/work/misc/calibre/ProjectInfo.lrucache +0 -34
  488. data/work/misc/calibre/ProjectInfo.mathconstants +0 -41
  489. data/work/misc/calibre/ProjectInfo.methodprobe +0 -38
  490. data/work/misc/calibre/ProjectInfo.mock +0 -34
  491. data/work/misc/calibre/ProjectInfo.multiton +0 -36
  492. data/work/misc/calibre/ProjectInfo.nackclass +0 -33
  493. data/work/misc/calibre/ProjectInfo.nilcomparable +0 -35
  494. data/work/misc/calibre/ProjectInfo.nullclass +0 -35
  495. data/work/misc/calibre/ProjectInfo.one +0 -37
  496. data/work/misc/calibre/ProjectInfo.openobject +0 -39
  497. data/work/misc/calibre/ProjectInfo.paramix +0 -38
  498. data/work/misc/calibre/ProjectInfo.pool +0 -33
  499. data/work/misc/calibre/ProjectInfo.progressbar +0 -37
  500. data/work/misc/calibre/ProjectInfo.reference +0 -36
  501. data/work/misc/calibre/ProjectInfo.semaphore +0 -36
  502. data/work/misc/calibre/ProjectInfo.stateparser +0 -39
  503. data/work/misc/calibre/ProjectInfo.statichash +0 -33
  504. data/work/misc/calibre/ProjectInfo.system +0 -34
  505. data/work/misc/calibre/ProjectInfo.tagiterator +0 -36
  506. data/work/misc/calibre/ProjectInfo.timer +0 -35
  507. data/work/misc/calibre/ProjectInfo.tracepoint +0 -37
  508. data/work/misc/calibre/ProjectInfo.tuple +0 -36
  509. data/work/misc/calibre/ProjectInfo.uniheritable +0 -34
  510. data/work/misc/calibre/ProjectInfo.units +0 -34
  511. data/work/misc/calibre/ProjectInfo.yamlstruct +0 -34
  512. data/work/more/annotation-rw.rb +0 -217
  513. data/work/more/aobject.rb +0 -132
  514. data/work/more/autohash.rb +0 -67
  515. data/work/more/cache.rb +0 -189
  516. data/work/more/class_inheritable_attributes.rb +0 -120
  517. data/work/more/commandrunner.rb +0 -101
  518. data/work/more/daemon.rb +0 -70
  519. data/work/more/debugger.rb +0 -167
  520. data/work/more/detach.rb +0 -423
  521. data/work/more/enumtype.rb +0 -115
  522. data/work/more/ioreactor.rb +0 -671
  523. data/work/more/logger_sing.rb +0 -207
  524. data/work/more/must.rb +0 -37
  525. data/work/more/old-tkxml.rb +0 -189
  526. data/work/more/pairhash.rb +0 -55
  527. data/work/more/password.rb +0 -80
  528. data/work/more/print_exception.rb +0 -35
  529. data/work/more/rand.rb +0 -412
  530. data/work/more/range.rb +0 -383
  531. data/work/more/sanitize.rb +0 -48
  532. data/work/more/superstruct.rb +0 -735
  533. data/work/more/tag.rb +0 -31
  534. data/work/more/timer.rb +0 -164
  535. data/work/op_rshift.rb +0 -87
  536. data/work/openobject-temp.rb +0 -45
  537. data/work/pore/autorequire.rb +0 -83
  538. data/work/pore/basefactory.rb +0 -40
  539. data/work/pore/hash/each.rb +0 -76
  540. data/work/pore/merge3.rb +0 -765
  541. data/work/pore/superann.rb +0 -134
  542. data/work/pore/sys.rb +0 -186
  543. data/work/pore/utils.rb +0 -518
  544. data/work/yore/HashAquisition.rb +0 -36
  545. data/work/yore/Rakefile.old +0 -181
  546. data/work/yore/Reapfile +0 -63
  547. data/work/yore/annotation.rb +0 -489
  548. data/work/yore/annotation2.rb +0 -466
  549. data/work/yore/commandutils.rb +0 -379
  550. data/work/yore/openobject.rb +0 -298
  551. data/work/yore/reap.rb +0 -184
  552. data/work/yore/reap.yml +0 -47
  553. data/work/yore/taskable-old.rb +0 -519
  554. data/work/yore/taskable.rb +0 -482
data/PROJECT CHANGED
@@ -29,7 +29,7 @@ scm: darcs
29
29
  changelog : doc/CHANGES
30
30
  stamp : VERSION
31
31
 
32
- #distribute: [ -doc/rdoc, -test/lib ]
32
+ distribute: [ -work, -test/lib ]
33
33
 
34
34
  package: [ gem, tgz ]
35
35
 
@@ -37,6 +37,9 @@ notes:
37
37
  labels: [ TODO, FIXME, CREDIT ]
38
38
 
39
39
  rdoc:
40
+ output : doc/rdoc/core
41
+ title : Facets/CORE
42
+ files : [ '[A-Z]*', 'lib/facets/core/**/*' ]
40
43
  template : jamis
41
44
  options : ['--all', '--inline-source']
42
45
 
data/Rakefile CHANGED
@@ -4,12 +4,6 @@
4
4
 
5
5
  require 'autorake'
6
6
 
7
- #
8
- # Redirect, extact tests and run tests
9
- #
10
-
11
- #task :prepare => [ :redirect, :extest, :test ]
12
-
13
7
  #
14
8
  # Generate facet/ redirection files
15
9
  #
@@ -42,25 +36,7 @@ task :redirect do
42
36
  puts "Created #{count} redirection files in #{REDIR}/ folder."
43
37
  end
44
38
 
45
- #
46
- # Extract tests
47
- #
48
-
49
- #desc "ectract units tests"
50
- #task :extest do
51
- # project.extract(:files=>'lib/facets/**/*.rb')
52
- #end
53
-
54
- #
55
- # Run tests
56
- #
57
-
58
- #desc "run tests"
59
- #task :test do
60
- # project.test
61
- #end
62
39
 
63
- =begin
64
40
  #
65
41
  # Generate API documentation
66
42
  #
@@ -68,31 +44,32 @@ end
68
44
  # where teh deafult it 'all'.
69
45
  #
70
46
 
71
- desc "rdoc all libs"
72
- task :rdoc => [:rdoc_core, :rdoc_more]
73
-
74
- desc "rdoc core lib"
75
- task :rdoc_core do
76
- project.rdoc(YAML.load(<<-END))
77
- title: Facets/CORE
78
- include:
79
- - 'lib/facets/core/**/*'
80
- - '[A-Z]*'
81
- output: doc/rdoc/core
82
- END
83
- end
47
+ #desc "rdoc all libs"
48
+ #task :rdocs => [:rdoc_core, :rdoc_more] do
49
+ #end
50
+
51
+ #desc "rdoc for core lib"
52
+ #task :rdocs_core do
53
+ # project.rdoc(YAML.load(<<-END))
54
+ # title: Facets/CORE
55
+ # include:
56
+ # - 'lib/facets/core/**/*'
57
+ # - '[A-Z]*'
58
+ # output: doc/rdoc/core
59
+ # END
60
+ #end
61
+
62
+ #desc "rdocs for more lib"
63
+ #task :rdocs_more do
64
+ # project.rdoc(YAML.load(<<-END))
65
+ # title: Facets/MORE
66
+ # include:
67
+ # - 'lib/facets/more/**/*'
68
+ # - '[A-Z]*'
69
+ # output: doc/rdoc/more
70
+ # END
71
+ #end
84
72
 
85
- desc "rdoc more lib"
86
- task :rdoc_more do
87
- project.rdoc(YAML.load(<<-END))
88
- title: Facets/MORE
89
- include:
90
- - 'lib/facets/more/**/*'
91
- - '[A-Z]*'
92
- output: doc/rdoc/more
93
- END
94
- end
95
- =end
96
73
 
97
74
  #
98
75
  # List core methods
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.8.49 stable (2007-02-16)
1
+ 1.8.51 stable (2007-02-19)
@@ -37,6 +37,7 @@
37
37
  * Tim Pease
38
38
  * Jonas Pfenniger
39
39
  * Ryan Platte
40
+ * Tyler Rick
40
41
  * Thomas Sawyer
41
42
  * Daniel Schierbeck
42
43
  * Gavin Sinclair
@@ -1,3 +1,9 @@
1
+ Mon Feb 19 12:40:55 EST 2007 Trans <transfire@gmail.com>
2
+ * significant improvements to command.rb thanks to Tyler Rick
3
+
4
+ Fri Feb 16 04:10:35 EST 2007 Trans <transfire@gmail.com>
5
+ * added tests to elementwise and tap
6
+
1
7
  Fri Feb 16 01:10:15 EST 2007 Trans <transfire@gmail.com>
2
8
  * fixed test for elementwise and op_tilde_self
3
9
 
@@ -1,12 +1,42 @@
1
1
 
2
2
  module Kernel
3
3
 
4
- # Yeild self and return self.
4
+ # Yield self and return self.
5
+
6
+ def tap &b
7
+ if b.arity == 1
8
+ yield self
9
+ else
10
+ instance_eval(&b)
11
+ end
5
12
 
6
- def tap
7
- yield self
8
13
  return self
9
14
  end
10
15
 
11
16
  end
12
17
 
18
+
19
+
20
+
21
+ =begin test
22
+
23
+ require 'test/unit'
24
+
25
+ class TestTap < Test::Unit::TestCase
26
+
27
+ def test_tap
28
+ x = "foo"
29
+ r = ("foobar".tap{ gsub! /bar/, '' })
30
+ assert_equal(x, r)
31
+ end
32
+
33
+ def test_tap_array
34
+ x = [1,2,3]
35
+ x.tap{ |a|
36
+ assert_equal(x, a)
37
+ }
38
+ end
39
+ end
40
+
41
+ =end
42
+
@@ -14,7 +14,8 @@
14
14
  #
15
15
  # == Author(s)
16
16
  #
17
- # * Thomas Sawyer
17
+ # CREDIT Thomas Sawyer
18
+ # CREDIT Tyler Rick
18
19
  #
19
20
  # == Developer Notes
20
21
  #
@@ -24,12 +25,11 @@
24
25
  # adding subdirectories to more/ is a good idea.
25
26
  #
26
27
 
27
- # Author:: Thomas Sawyer
28
- # Copyright:: Copyright (c) 2005 Thomas Sawyer
28
+ # Author:: Thomas Sawyer, Tyler Rick
29
+ # Copyright:: Copyright (c) 2005-2007
29
30
  # License:: Ruby License
30
31
 
31
32
  require 'shellwords'
32
- #require 'facets/core/string/modulize'
33
33
 
34
34
  # = Console
35
35
  #
@@ -38,8 +38,6 @@ require 'shellwords'
38
38
 
39
39
  module Console ; end
40
40
 
41
- # Initialize common globals to avoid warnings.
42
-
43
41
  # = Console Command
44
42
  #
45
43
  # Console::Command provides a clean and easy way
@@ -163,7 +161,28 @@ module Console ; end
163
161
  # You can use #option_missing to catch any options that are not explicility
164
162
  # defined.
165
163
  #
166
- # Be aware that when using subcommand modules, the same option_missing
164
+ # The method signature should look like:
165
+ #
166
+ # option_missing(option_name, args)
167
+ #
168
+ # Example:
169
+ # def option_missing(option_name, args)
170
+ # p args if $debug
171
+ # case option_name
172
+ # when 'p'
173
+ # @a = args[0].to_i
174
+ # @b = args[1].to_i
175
+ # 2
176
+ # else
177
+ # raise InvalidOptionError(option_name, args)
178
+ # end
179
+ # end
180
+ #
181
+ # Its return value should be the effective "arity" of that options -- that is,
182
+ # how many arguments it consumed ("-p a b", for example, would consume 2 args:
183
+ # "a" and "b"). An arity of 1 is assumed if nil or false is returned.
184
+ #
185
+ # Be aware that when using subcommand modules, the same option_missing
167
186
  # method will catch missing options for global options and subcommand
168
187
  # options too unless an option_missing method is also defined in the
169
188
  # subcommand module.
@@ -202,122 +221,129 @@ module Console ; end
202
221
 
203
222
  class Console::Command
204
223
 
205
- class << self
206
- # Starts the command execution.
207
-
208
- def execute( *args )
209
- new(global_options).execute( *args )
210
- end
211
-
212
- # Alias for #execute.
213
-
214
- alias_method :start, :execute
215
-
216
- # Change the option mode.
217
-
218
- def global_option( *names )
219
- names.each{ |name| global_options << name.to_sym }
220
- end
221
-
222
- def global_options
223
- @global_options ||= []
224
- end
225
- end
226
-
227
- # Do not let this pass through to
228
- # any included module.
229
-
230
- def initialize(global_options)
231
- @global_options = global_options
232
- end
233
-
234
- # Execute the command.
235
-
236
- def execute( line=nil )
237
- case line
238
- when String
239
- arguments = Shellwords.shellwords(line)
240
- when Array
241
- arguments = line
242
- else
243
- arguments = ARGV
244
- end
245
-
246
- # duplicate arguments to work on them in-place.
247
-
248
- argv = arguments.dup
249
-
250
- # Split single letter option groupings into separate options.
251
- # ie. -xyz => -x -y -z
252
-
253
- argv = argv.collect { |arg|
254
- if md = /^-(\w{2,})/.match( arg )
255
- md[1].split(//).collect { |c| "-#{c}" }
256
- else
257
- arg
258
- end
259
- }.flatten
260
-
261
- # process global options
262
- global_options.each do |name|
263
- o = name.to_s.sub('__','--').sub('_','-')
264
- m = method(name)
265
- c = m.arity
266
- while i = argv.index(o)
267
- args = argv.slice!(i,c+1)
268
- args.shift
269
- m.call(*args)
270
- end
271
- end
272
-
273
- # Does this command take subcommands?
274
- subcommand = !respond_to?(:main)
275
-
276
- # process primary options
277
- argv = execute_options( argv, subcommand )
278
-
279
- # In not subcommand remaining arguments are arguments.
280
- return send(:main,*argv) unless subcommand
281
-
282
- # What to do if there is nothing else?
283
- if argv.empty?
284
- if respond_to?(:default)
285
- return __send__(:default)
286
- else
287
- $strderr << "Nothing to do."
288
- return
289
- end
290
- end
291
-
292
- # Remaining arguments are subcommand and suboptions.
293
-
294
- subcmd = argv.shift.gsub('-','_')
295
-
296
- # Extend subcommand option module
297
- subconst = subcmd.gsub(/\W/,'_').capitalize
298
- if self.class.const_defined?(subconst)
299
- submod = self.class.const_get(subconst)
300
- self.extend submod
301
- end
302
-
303
- # process subcommand options
304
- argv = execute_options( argv )
305
-
306
- # This is a little tricky. The method has to be defined by a subclass.
307
- if self.respond_to?( subcmd ) and not Console::Command.public_instance_methods.include?( subcmd.to_s )
308
- __send__(subcmd, *argv)
309
- else
310
- #begin
311
- method_missing(subcmd, *argv)
312
- #rescue NoMethodError => e
313
- #if self.private_methods.include?( "no_command_error" )
314
- # no_command_error( *args )
315
- #else
316
- # $stderr << "Non-applicable command -- #{argv.join(' ')}\n"
317
- # exit -1
318
- #end
319
- #end
320
- end
224
+ class << self
225
+ # Starts the command execution.
226
+
227
+ def execute( *args )
228
+ new(global_options).execute( *args )
229
+ end
230
+
231
+ # Alias for #execute.
232
+
233
+ alias_method :start, :execute
234
+
235
+ # Change the option mode.
236
+
237
+ def global_option( *names )
238
+ names.each{ |name| global_options << name.to_sym }
239
+ end
240
+
241
+ def global_options
242
+ @global_options ||= []
243
+ end
244
+ end
245
+
246
+ # Do not let this pass through to
247
+ # any included module.
248
+
249
+ def initialize(global_options)
250
+ @global_options = global_options
251
+ end
252
+
253
+ # Execute the command.
254
+
255
+ def execute( line=nil )
256
+ case line
257
+ when String
258
+ arguments = Shellwords.shellwords(line)
259
+ when Array
260
+ arguments = line
261
+ else
262
+ arguments = ARGV
263
+ end
264
+
265
+ # duplicate arguments to work on them in-place.
266
+
267
+ argv = arguments.dup
268
+
269
+ # Split single letter option groupings into separate options.
270
+ # ie. -xyz => -x -y -z
271
+
272
+ argv = argv.collect { |arg|
273
+ if md = /^-(\w{2,})/.match( arg )
274
+ md[1].split(//).collect { |c| "-#{c}" }
275
+ else
276
+ arg
277
+ end
278
+ }.flatten
279
+
280
+ # process global options
281
+ global_options.each do |name|
282
+ o = name.to_s.sub('__','--').sub('_','-')
283
+ m = method(name)
284
+ c = m.arity
285
+ while i = argv.index(o)
286
+ args = argv.slice!(i,c+1)
287
+ args.shift
288
+ m.call(*args)
289
+ end
290
+ end
291
+
292
+ # Does this command take subcommands?
293
+ subcommand = !respond_to?(:main)
294
+
295
+ # process primary options
296
+ argv = execute_options( argv, subcommand )
297
+
298
+ # If this command doesn't take subcommands, then the remaining arguments are arguments for main().
299
+ return send(:main, *argv) unless subcommand
300
+
301
+ # What to do if there is nothing else?
302
+ if argv.empty?
303
+ if respond_to?(:default)
304
+ return __send__(:default)
305
+ else
306
+ $stderr << "Nothing to do."
307
+ return
308
+ end
309
+ end
310
+
311
+ # Remaining arguments are subcommand and suboptions.
312
+
313
+ subcmd = argv.shift.gsub('-','_')
314
+ #puts "subcmd = #{subcmd}"
315
+
316
+ # Extend subcommand option module
317
+ subconst = subcmd.gsub(/\W/,'_').capitalize
318
+ #puts self.class.name
319
+ if self.class.const_defined?(subconst)
320
+ puts "Extending self (#{self.class}) with subcommand module #{subconst}" if $debug
321
+ submod = self.class.const_get(subconst)
322
+ self.extend submod
323
+ end
324
+
325
+ # process subcommand options
326
+ #puts "Treating the rest of the args as subcommand options:"
327
+ #p argv
328
+ argv = execute_options( argv )
329
+
330
+ # This is a little tricky. The method has to be defined by a subclass.
331
+ if self.respond_to?( subcmd ) and not Console::Command.public_instance_methods.include?( subcmd.to_s )
332
+ puts "Calling #{subcmd}(#{argv.inspect})" if $debug
333
+ __send__(subcmd, *argv)
334
+ else
335
+ #begin
336
+ puts "Calling method_missing with #{subcmd}, #{argv.inspect}" if $debug
337
+ method_missing(subcmd, *argv)
338
+ #rescue NoMethodError => e
339
+ #if self.private_methods.include?( "no_command_error" )
340
+ # no_command_error( *args )
341
+ #else
342
+ # $stderr << "Non-applicable command -- #{argv.join(' ')}\n"
343
+ # exit -1
344
+ #end
345
+ #end
346
+ end
321
347
 
322
348
  # rescue => err
323
349
  # if $DEBUG
@@ -328,120 +354,138 @@ class Console::Command
328
354
  # msg << " (#{err.class})" if $VERBOSE
329
355
  # $stderr << msg
330
356
  # end
331
- end
332
-
333
- private
334
-
335
- #
336
-
337
- def global_options
338
- @global_options
339
- end
340
-
341
- #
342
-
343
- def execute_options( argv, subcmd=false )
344
- argv = argv.dup
345
- argr = []
346
- until argv.empty?
347
- a = argv.first
348
- if a[0,1] != '-'
349
- if subcmd
350
- argr = argv
351
- break
352
- else
353
- argr << argv.shift
354
- end
355
- end
356
- name = a.gsub('-','_')
357
- if respond_to?(name)
358
- m = method(name)
359
- c = m.arity
360
- args = argv.slice!(0,c+1)
361
- args.shift
362
- m.call(*args)
363
- elsif respond_to?(:option_missing)
364
- c = option_missing(a.gsub(/^[-]+/,''), argv) || 1
365
- argv.slice!(0,c)
366
- else
367
- $stderr << "Unknown option '#{a}'.\n"
368
- exit -1
369
- end
370
- end
371
- return argr
372
- end
373
-
374
- public
357
+ end
358
+
359
+ private
360
+
361
+ #
362
+
363
+ def global_options
364
+ @global_options
365
+ end
366
+
367
+ #
368
+
369
+ def execute_options( argv, subcmd=false )
370
+ puts "in execute_options:" if $debug
371
+ argv = argv.dup
372
+ args_to_return = []
373
+ until argv.empty?
374
+ arg = argv.first
375
+ if arg[0,1] == '-'
376
+ puts "'#{arg}' -- is an option" if $debug
377
+
378
+ name = arg.gsub('-','_')
379
+ puts " responds_to(#{name})?" if $debug
380
+ if respond_to?(name)
381
+ m = method(name)
382
+ arity = m.arity
383
+ #puts "{argv before slice: #{argv.inspect}" if $debug
384
+ args_for_current_option = argv.slice!(0, arity+1)
385
+ #puts "}argv after slice: #{argv.inspect}" if $debug
386
+ #puts "{args_for_current_option before shift: #{args_for_current_option.inspect}" if $debug
387
+ args_for_current_option.shift
388
+ #puts "}args_for_current_option after shift: #{args_for_current_option.inspect}" if $debug
389
+ #puts " arity=#{m.arity}" if $debug
390
+ #puts " calling #{name} with #{args_for_current_option.inspect}" if $debug
391
+ m.call(*args_for_current_option)
392
+ elsif respond_to?(:option_missing)
393
+ puts " option_missing(#{argv.inspect})" if $debug
394
+ arity = option_missing(arg.gsub(/^[-]+/,''), argv[1..-1]) || 1
395
+ puts " arity == #{arity}" if $debug
396
+ argv.slice!(0, arity)
397
+ argv.shift # Get rid of the *name* of the option
398
+ else
399
+ $stderr << "Unknown option '#{arg}'.\n"
400
+ exit -1
401
+ end
402
+ else
403
+ puts "'#{arg}' -- not an option. Adding to args_to_return..." if $debug
404
+ if subcmd
405
+ args_to_return = argv
406
+ #puts "subcommand. args_to_return=#{args_to_return.inspect}" if $debug
407
+ break
408
+ else
409
+ args_to_return << argv.shift
410
+ puts "args_to_return=#{args_to_return.inspect}" if $debug
411
+ end
412
+ end
413
+ end
414
+ puts "Returning #{args_to_return.inspect}" if $debug
415
+ return args_to_return
416
+ end
417
+
418
+ public
375
419
 
376
420
  =begin
377
- # We include a module here so you can define your own help
378
- # command and call #super to utilize this one.
379
-
380
- module Help
381
-
382
- def help
383
- opts = help_options
384
- s = ""
385
- s << "#{File.basename($0)}\n\n"
386
- unless opts.empty?
387
- s << "OPTIONS\n"
388
- s << help_options
389
- s << "\n"
390
- end
391
- s << "COMMANDS\n"
392
- s << help_commands
393
- puts s
394
- end
395
-
396
- private
397
-
398
- def help_commands
399
- help = self.class.help
400
- bufs = help.keys.collect{ |a| a.to_s.size }.max + 3
401
- lines = []
402
- help.each { |cmd, str|
403
- cmd = cmd.to_s
404
- if cmd !~ /^_/
405
- lines << " " + cmd + (" " * (bufs - cmd.size)) + str
406
- end
407
- }
408
- lines.join("\n")
409
- end
410
-
411
- def help_options
412
- help = self.class.help
413
- bufs = help.keys.collect{ |a| a.to_s.size }.max + 3
414
- lines = []
415
- help.each { |cmd, str|
416
- cmd = cmd.to_s
417
- if cmd =~ /^_/
418
- lines << " " + cmd.gsub(/_/,'-') + (" " * (bufs - cmd.size)) + str
419
- end
420
- }
421
- lines.join("\n")
422
- end
423
-
424
- module ClassMethods
425
-
426
- def help( str=nil )
427
- return (@help ||= {}) unless str
428
- @current_help = str
429
- end
430
-
431
- def method_added( meth )
432
- if @current_help
433
- @help ||= {}
434
- @help[meth] = @current_help
435
- @current_help = nil
436
- end
437
- end
438
-
439
- end
440
-
441
- end
442
-
443
- include Help
444
- extend Help::ClassMethods
421
+ # We include a module here so you can define your own help
422
+ # command and call #super to utilize this one.
423
+
424
+ module Help
425
+
426
+ def help
427
+ opts = help_options
428
+ s = ""
429
+ s << "#{File.basename($0)}\n\n"
430
+ unless opts.empty?
431
+ s << "OPTIONS\n"
432
+ s << help_options
433
+ s << "\n"
434
+ end
435
+ s << "COMMANDS\n"
436
+ s << help_commands
437
+ puts s
438
+ end
439
+
440
+ private
441
+
442
+ def help_commands
443
+ help = self.class.help
444
+ bufs = help.keys.collect{ |a| a.to_s.size }.max + 3
445
+ lines = []
446
+ help.each { |cmd, str|
447
+ cmd = cmd.to_s
448
+ if cmd !~ /^_/
449
+ lines << " " + cmd + (" " * (bufs - cmd.size)) + str
450
+ end
451
+ }
452
+ lines.join("\n")
453
+ end
454
+
455
+ def help_options
456
+ help = self.class.help
457
+ bufs = help.keys.collect{ |a| a.to_s.size }.max + 3
458
+ lines = []
459
+ help.each { |cmd, str|
460
+ cmd = cmd.to_s
461
+ if cmd =~ /^_/
462
+ lines << " " + cmd.gsub(/_/,'-') + (" " * (bufs - cmd.size)) + str
463
+ end
464
+ }
465
+ lines.join("\n")
466
+ end
467
+
468
+ module ClassMethods
469
+
470
+ def help( str=nil )
471
+ return (@help ||= {}) unless str
472
+ @current_help = str
473
+ end
474
+
475
+ def method_added( meth )
476
+ if @current_help
477
+ @help ||= {}
478
+ @help[meth] = @current_help
479
+ @current_help = nil
480
+ end
481
+ end
482
+
483
+ end
484
+
485
+ end
486
+
487
+ include Help
488
+ extend Help::ClassMethods
445
489
  =end
446
490
 
447
491
  end
@@ -457,57 +501,249 @@ end
457
501
 
458
502
  =begin test
459
503
 
460
- require 'test/unit'
504
+ require 'test/unit'
505
+ require 'stringio'
506
+
507
+ class TestCommand < Test::Unit::TestCase
508
+ def setup
509
+ $output = nil
510
+ $stderr = StringIO.new
511
+ end
512
+
513
+ #
514
+
515
+ class SimpleCommand < Console::Command
516
+ def __here ; @here = true ; end
517
+
518
+ def main(*args)
519
+ $output = [@here] | args
520
+ end
521
+ end
522
+
523
+ def test_SimpleCommand
524
+ SimpleCommand.execute( '--here file1 file2' )
525
+ assert_equal( [true, 'file1', 'file2'], $output )
526
+ end
527
+
528
+ #
529
+
530
+ class CommandWithMethodMissingSubcommand < Console::Command
531
+ def __here ; @here = true ; end
532
+
533
+ def method_missing(subcommand, *args)
534
+ $output = [@here, subcommand] | args
535
+ end
536
+ end
537
+
538
+ def test_CommandWithMethodMissingSubcommand
539
+ CommandWithMethodMissingSubcommand.execute( '--here go file1' )
540
+ assert_equal( [true, 'go', 'file1'], $output )
541
+ end
542
+
543
+ #
461
544
 
462
- class TestCommand < Test::Unit::TestCase
545
+ class CommandWithSimpleSubcommand < Console::Command
546
+ def __here ; @here = true ; end
463
547
 
464
- #
548
+ # subcommand
465
549
 
466
- class MyCmd1 < Console::Command
467
- def _x ; @x = true ; end
468
- def _y ; @y = true ; end
469
- def _z(n) ; @z = n ; end
550
+ module Go
551
+ def _p(n)
552
+ @p = n.to_i
553
+ end
554
+ end
470
555
 
471
- global_option :_x
556
+ def go ; $output = [@here, @p] ; end
557
+ end
472
558
 
473
- # subcommand
474
- def go ; $output = [@x, @y, @z, @p] ; end
559
+ def test_CommandWithSimpleSubcommand
560
+ CommandWithSimpleSubcommand.execute( '--here go -p 1' )
561
+ assert_equal( [true, 1], $output )
562
+ end
475
563
 
476
- module Go
477
- def _p(n)
478
- @p = n.to_i
479
- end
480
- end
481
- end
564
+ #
482
565
 
483
- MyCmd1.execute( '-xy -z HERE go -p 1' )
566
+ # Global options can be anywhere, right? Even after subcommands? Let's find out.
567
+ class CommandWithGlobalOptionsAfterSubcommand < Console::Command
568
+ def _x ; @x = true ; end
569
+ global_option :_x
484
570
 
485
- def test_001
486
- assert_equal( [true, true, 'HERE', 1], $output )
487
- end
571
+ def go ; $output = [@x, @p] ; end
488
572
 
489
- #
573
+ module Go
574
+ def _p(n)
575
+ @p = n.to_i
576
+ end
577
+ end
578
+ end
490
579
 
491
- class MyCmd2 < Console::Command
492
- def __here ; @here = true ; end
580
+ def test_CommandWithGlobalOptionsAfterSubcommand
581
+ CommandWithGlobalOptionsAfterSubcommand.execute( 'go -x -p 1' )
582
+ assert_equal( [true, 1], $output )
493
583
 
494
- # subcommand
584
+ CommandWithGlobalOptionsAfterSubcommand.execute( 'go -p 1 -x' )
585
+ assert_equal( [true, 1], $output )
586
+ end
495
587
 
496
- module Go
497
- def _p(n)
498
- @p = n.to_i
499
- end
500
- end
588
+ #
501
589
 
502
- def go ; $output = [@here, @p] ; end
503
- end
590
+ class GivingUnrecognizedOptions < Console::Command
591
+ def _x ; @x = true ; end
592
+ def go ; $output = [@x, @p] ; end
593
+ end
504
594
 
505
- MyCmd2.execute( '--here go -p 1' )
595
+ def test_GivingUnrecognizedOptions
596
+ assert_raise(SystemExit) do
597
+ GivingUnrecognizedOptions.execute( '--an-option-that-wont-be-recognized -x go' )
598
+ end
599
+ assert_equal "Unknown option '--an-option-that-wont-be-recognized'.\n", $stderr.string
600
+ assert_equal( nil, $output )
601
+ end
602
+ #
506
603
 
507
- def test_001
508
- assert_equal( [true, 1], $output )
509
- end
604
+ class PassingMultipleSingleCharOptionsAsOneOption < Console::Command
605
+ def _x ; @x = true ; end
606
+ def _y ; @y = true ; end
607
+ def _z(n) ; @z = n ; end
608
+
609
+ global_option :_x
610
+
611
+ def go ; $output = [@x, @y, @z, @p] ; end
510
612
 
511
- end
613
+ module Go
614
+ def _p(n)
615
+ @p = n.to_i
616
+ end
617
+ end
618
+ end
619
+
620
+ def test_PassingMultipleSingleCharOptionsAsOneOption
621
+ PassingMultipleSingleCharOptionsAsOneOption.execute( '-xy -z HERE go -p 1' )
622
+ assert_equal( [true, true, 'HERE', 1], $output )
623
+ end
624
+
625
+ #
626
+
627
+ class CommandWithOptionUsingEquals < Console::Command
628
+ module Go
629
+ def __mode(mode) ; @mode = mode ; end
630
+ end
631
+ def go ; $output = [@mode] ; end
632
+ end
633
+
634
+ def test_CommandWithOptionUsingEquals
635
+ CommandWithOptionUsingEquals.execute( 'go --mode smart' )
636
+ assert_equal( ['smart'], $output )
637
+
638
+ # I would expect this to work too, but currently it doesn't.
639
+ #assert_nothing_raised { CommandWithOptionUsingEquals.execute( 'go --mode=smart' ) }
640
+ #assert_equal( ['smart'], $output )
641
+ end
642
+
643
+ #
644
+
645
+ class CommandWithSubcommandThatTakesArgs < Console::Command
646
+ def go(arg1, *args) ; $output = [arg1] | args ; end
647
+ end
648
+
649
+ def test_CommandWithSubcommandThatTakesArgs
650
+ CommandWithSubcommandThatTakesArgs.execute( 'go file1 file2 file3' )
651
+ assert_equal( ['file1', 'file2', 'file3'], $output )
652
+ end
653
+
654
+ #
655
+
656
+ class CommandWith2OptionalArgs < Console::Command
657
+ def __here ; @here = true ; end
658
+
659
+ module Go
660
+ def _p(n)
661
+ @p = n.to_i
662
+ end
663
+ end
664
+
665
+ def go(required1 = nil, optional2 = nil) ; $output = [@here, @p, required1, optional2 ] ; end
666
+ end
667
+
668
+ def test_CommandWith2OptionalArgs
669
+ CommandWith2OptionalArgs.execute( '--here go -p 1 to' )
670
+ assert_equal( [true, 1, 'to', nil], $output )
671
+ end
672
+
673
+ #
674
+
675
+ class CommandWithVariableArgs < Console::Command
676
+ def __here ; @here = true ; end
677
+
678
+ module Go
679
+ def _p(n)
680
+ @p = n.to_i
681
+ end
682
+ end
683
+
684
+ def go(*args) ; $output = [@here, @p] | args ; end
685
+ end
686
+
687
+ def test_CommandWithVariableArgs
688
+ CommandWithVariableArgs.execute( '--here go -p 1 to bed' )
689
+ assert_equal( [true, 1, 'to', 'bed'], $output )
690
+ end
691
+
692
+ #
693
+
694
+ class CommandWithOptionMissing < Console::Command
695
+ def __here ; @here = true ; end
696
+
697
+ module Go
698
+ def option_missing(option_name, args)
699
+ p args if $debug
700
+ case option_name
701
+ when 'p'
702
+ @p = args[0].to_i
703
+ 1
704
+ else
705
+ raise InvalidOptionError(option_name, args)
706
+ end
707
+ end
708
+ end
709
+
710
+ def go(*args) ; $output = [@here, @p] | args ; end
711
+ end
712
+
713
+ def test_CommandWithOptionMissing
714
+ CommandWithOptionMissing.execute( '--here go -p 1 to bed right now' )
715
+ assert_equal( [true, 1, 'to', 'bed', 'right', 'now'], $output )
716
+ end
717
+
718
+ #
719
+
720
+ class CommandWithOptionMissingArityOf2 < Console::Command
721
+ def __here ; @here = true ; end
722
+
723
+ module Go
724
+ def option_missing(option_name, args)
725
+ p args if $debug
726
+ case option_name
727
+ when 'p'
728
+ @p1 = args[0].to_i
729
+ @p2 = args[1].to_i
730
+ 2
731
+ when 'q'
732
+ @q = args[0].to_i
733
+ nil # Test default arity
734
+ else
735
+ raise InvalidOptionError(option_name, args)
736
+ end
737
+ end
738
+ end
739
+
740
+ def go(*args) ; $output = [@here, @p1, @p2, @q] | args ; end
741
+ end
742
+
743
+ def test_CommandWithOptionMissingArityOf2
744
+ CommandWithOptionMissingArityOf2.execute( '--here go -p 1 2 -q 3 to bed right now' )
745
+ assert_equal( [true, 1, 2, 3, 'to', 'bed', 'right', 'now'], $output )
746
+ end
747
+ end
512
748
 
513
749
  =end