facets 1.8.49 → 1.8.51

Sign up to get free protection for your applications and to get access to all the features.
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