facets 1.3.3 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (589) hide show
  1. data/{doc/AUTHORS → AUTHORS} +12 -3
  2. data/README +35 -29
  3. data/WARNING +56 -0
  4. data/demo/annotation/demo_annotation.rb +22 -0
  5. data/demo/ansicolor/cdiff.rb +20 -0
  6. data/demo/ansicolor/example.rb +82 -0
  7. data/demo/io-reactor/chatserver.rb +347 -0
  8. data/demo/lisp/game.rb +47 -0
  9. data/lib/facet/all.rb +1 -0
  10. data/lib/facet/annattr.rb +1 -0
  11. data/lib/facet/class/to_proc.rb +1 -0
  12. data/lib/facet/cookie.rb +1 -0
  13. data/lib/facet/dir/self/descend.rb +1 -0
  14. data/lib/facet/enumerable/count.rb +1 -0
  15. data/lib/facet/hash/to_proc.rb +1 -0
  16. data/lib/facet/hashbuilder.rb +1 -0
  17. data/lib/facet/http.rb +1 -0
  18. data/lib/facet/httpaccess.rb +1 -0
  19. data/lib/facet/kernel/__get__.rb +1 -0
  20. data/lib/facet/kernel/__set__.rb +1 -0
  21. data/lib/facet/kernel/cache.rb +1 -0
  22. data/lib/facet/kernel/respond.rb +1 -0
  23. data/lib/facet/lazy.rb +1 -0
  24. data/lib/facet/module/class.rb +1 -0
  25. data/lib/facet/module/nodef.rb +1 -0
  26. data/lib/facet/opencascade.rb +1 -0
  27. data/lib/facet/pqueue.rb +1 -0
  28. data/lib/facet/taskable.rb +1 -0
  29. data/lib/facets.rb +98 -37
  30. data/lib/facets/core/all.rb +5 -0
  31. data/lib/facets/core/class/to_proc.rb +25 -0
  32. data/lib/facets/core/dir/self/ascend.rb +2 -1
  33. data/lib/facets/core/dir/self/descend.rb +11 -0
  34. data/lib/facets/core/enumerable/accumulate.rb +2 -2
  35. data/lib/facets/core/enumerable/count.rb +54 -0
  36. data/lib/facets/core/enumerable/cross.rb +3 -0
  37. data/lib/facets/core/enumerable/graph.rb +8 -4
  38. data/lib/facets/core/enumerable/self/cross.rb +11 -5
  39. data/lib/facets/core/hash/to_proc.rb +34 -0
  40. data/lib/facets/core/hash/traverse.rb +10 -5
  41. data/lib/facets/core/kernel/__class__.rb +1 -1
  42. data/lib/facets/core/kernel/__get__.rb +5 -0
  43. data/lib/facets/core/kernel/__set__.rb +2 -0
  44. data/lib/facets/core/kernel/assign_from.rb +1 -1
  45. data/lib/facets/core/kernel/assign_with.rb +11 -3
  46. data/lib/facets/core/kernel/bool.rb +1 -1
  47. data/lib/facets/core/kernel/cache.rb +31 -0
  48. data/lib/facets/core/kernel/demo.rb +4 -0
  49. data/lib/facets/core/kernel/get_by_id.rb +1 -0
  50. data/lib/facets/core/kernel/in.rb +1 -1
  51. data/lib/facets/core/kernel/instance_assign.rb +2 -3
  52. data/lib/facets/core/kernel/method.rb +25 -7
  53. data/lib/facets/core/kernel/methods.rb +1 -1
  54. data/lib/facets/core/kernel/new.rb +1 -1
  55. data/lib/facets/core/kernel/object_class.rb +1 -1
  56. data/lib/facets/core/kernel/object_hexid.rb +1 -1
  57. data/lib/facets/core/kernel/own.rb +1 -1
  58. data/lib/facets/core/kernel/require_all.rb +1 -0
  59. data/lib/facets/core/kernel/require_esc.rb +4 -2
  60. data/lib/facets/core/kernel/require_facet.rb +2 -0
  61. data/lib/facets/core/kernel/require_local.rb +1 -0
  62. data/lib/facets/core/kernel/respond.rb +14 -0
  63. data/lib/facets/core/kernel/send_as.rb +1 -1
  64. data/lib/facets/core/kernel/silence_warnings.rb +1 -1
  65. data/lib/facets/core/kernel/singleton.rb +3 -1
  66. data/lib/facets/core/matchdata/matchtree.rb +13 -3
  67. data/lib/facets/core/module/class.rb +3 -0
  68. data/lib/facets/core/module/integrate.rb +31 -4
  69. data/lib/facets/core/module/{undef.rb → nodef.rb} +8 -3
  70. data/lib/facets/core/module/revisal.rb +5 -5
  71. data/lib/facets/more/annattr.rb +147 -0
  72. data/lib/facets/more/annotation.rb +32 -136
  73. data/lib/facets/more/ansicode.rb +89 -100
  74. data/lib/facets/more/aspects.rb +28 -0
  75. data/lib/facets/more/association.rb +88 -47
  76. data/lib/facets/more/basicobject.rb +51 -33
  77. data/lib/facets/more/bbcode.rb +21 -34
  78. data/lib/facets/more/binaryreader.rb +62 -33
  79. data/lib/facets/more/bitmask.rb +24 -24
  80. data/lib/facets/more/blankslate.rb +4 -0
  81. data/lib/facets/more/builderobject.rb +16 -20
  82. data/lib/facets/more/bytes.rb +43 -24
  83. data/lib/facets/more/classinherit.rb +15 -31
  84. data/lib/facets/more/classmethods.rb +19 -29
  85. data/lib/facets/more/cloneable.rb +42 -30
  86. data/lib/facets/more/consoleapp.rb +42 -22
  87. data/lib/facets/more/cookie.rb +565 -0
  88. data/lib/facets/more/coroutine.rb +17 -21
  89. data/lib/facets/more/crypt.rb +33 -12
  90. data/lib/facets/more/dictionary.rb +27 -36
  91. data/lib/facets/more/downloader.rb +21 -17
  92. data/lib/facets/more/elementor.rb +22 -0
  93. data/lib/facets/more/enumerablepass.rb +19 -27
  94. data/lib/facets/more/expirable.rb +18 -28
  95. data/lib/facets/more/filelist.rb +33 -32
  96. data/lib/facets/more/floatstring.rb +31 -40
  97. data/lib/facets/more/functor.rb +15 -25
  98. data/lib/facets/more/hashbuilder.rb +76 -0
  99. data/lib/facets/more/heap.rb +29 -36
  100. data/lib/facets/more/htmlbuilder.rb +22 -24
  101. data/lib/facets/more/htmlhelper.rb +89 -0
  102. data/lib/facets/more/http.rb +570 -0
  103. data/lib/facets/more/httpaccess.rb +1608 -0
  104. data/lib/facets/more/inheritor.rb +29 -21
  105. data/lib/facets/more/interval.rb +21 -25
  106. data/lib/facets/more/ioredirect.rb +21 -25
  107. data/lib/facets/more/json.rb +27 -17
  108. data/lib/facets/more/lazy.rb +238 -0
  109. data/lib/facets/more/lisp.rb +24 -27
  110. data/lib/facets/more/lisp_format.rb +93 -85
  111. data/lib/facets/more/lrucache.rb +17 -27
  112. data/lib/facets/more/mathconstants.rb +22 -40
  113. data/lib/facets/more/methodprobe.rb +56 -61
  114. data/lib/facets/more/mock.rb +24 -17
  115. data/lib/facets/more/multipliers.rb +21 -17
  116. data/lib/facets/more/multiton.rb +18 -24
  117. data/lib/facets/more/nackclass.rb +17 -21
  118. data/lib/facets/more/nilcomparable.rb +28 -30
  119. data/lib/facets/more/nullclass.rb +16 -15
  120. data/lib/facets/more/one.rb +94 -58
  121. data/lib/facets/more/opencascade.rb +187 -0
  122. data/lib/facets/more/openobject.rb +89 -66
  123. data/lib/facets/more/orderedhash.rb +4 -0
  124. data/lib/facets/more/ormsupport.rb +18 -29
  125. data/lib/facets/more/overload.rb +39 -3
  126. data/lib/facets/more/paramix.rb +16 -24
  127. data/lib/facets/more/pathlist.rb +17 -23
  128. data/lib/facets/more/pool.rb +21 -29
  129. data/lib/facets/more/pqueue.rb +190 -0
  130. data/lib/facets/more/preinitialize.rb +17 -18
  131. data/lib/facets/more/progressbar.rb +19 -15
  132. data/lib/facets/more/promoteself.rb +17 -21
  133. data/lib/facets/more/quaternion.rb +379 -346
  134. data/lib/facets/more/recorder.rb +15 -20
  135. data/lib/facets/more/reference.rb +25 -22
  136. data/lib/facets/more/rexmlbuilder.rb +21 -6
  137. data/lib/facets/more/rtals.rb +27 -24
  138. data/lib/facets/more/semaphore.rb +15 -28
  139. data/lib/facets/more/snapshot.rb +45 -41
  140. data/lib/facets/more/stateparser.rb +25 -35
  141. data/lib/facets/more/statichash.rb +37 -29
  142. data/lib/facets/more/syncarray.rb +18 -26
  143. data/lib/facets/more/synchash.rb +17 -26
  144. data/lib/facets/more/system.rb +25 -17
  145. data/lib/facets/more/tagiterator.rb +15 -39
  146. data/lib/facets/more/taskable.rb +417 -0
  147. data/lib/facets/more/timer.rb +22 -26
  148. data/lib/facets/more/times.rb +23 -23
  149. data/lib/facets/more/tracepoint.rb +25 -24
  150. data/lib/facets/more/tuple.rb +25 -42
  151. data/lib/facets/more/typecast.rb +27 -29
  152. data/lib/facets/more/uninheritable.rb +15 -22
  153. data/lib/facets/more/units.rb +23 -29
  154. data/lib/facets/more/xmlbuilder.rb +20 -22
  155. data/lib/facets/more/xmlhelper.rb +18 -21
  156. data/lib/facets/more/xoxo.rb +23 -11
  157. data/lib/facets/more/yamlstruct.rb +25 -22
  158. data/test/lib/facets/core/array/test_at_rand.rb +1 -1
  159. data/test/lib/facets/core/array/test_delete_unless.rb +1 -1
  160. data/test/lib/facets/core/array/test_delete_values.rb +1 -1
  161. data/test/lib/facets/core/array/test_delete_values_at.rb +1 -1
  162. data/test/lib/facets/core/array/test_first.rb +1 -1
  163. data/test/lib/facets/core/array/test_head.rb +1 -1
  164. data/test/lib/facets/core/array/test_last_index.rb +1 -1
  165. data/test/lib/facets/core/array/test_merge.rb +1 -1
  166. data/test/lib/facets/core/array/test_mid.rb +1 -1
  167. data/test/lib/facets/core/array/test_middle.rb +1 -1
  168. data/test/lib/facets/core/array/test_op_fetch.rb +1 -1
  169. data/test/lib/facets/core/array/test_op_store.rb +1 -1
  170. data/test/lib/facets/core/array/test_pick.rb +1 -1
  171. data/test/lib/facets/core/array/test_pos.rb +1 -1
  172. data/test/lib/facets/core/array/test_pot.rb +1 -1
  173. data/test/lib/facets/core/array/test_pull.rb +1 -1
  174. data/test/lib/facets/core/array/test_rand_index.rb +1 -1
  175. data/test/lib/facets/core/array/test_rand_subset.rb +1 -1
  176. data/test/lib/facets/core/array/test_range.rb +1 -1
  177. data/test/lib/facets/core/array/test_rotate.rb +1 -1
  178. data/test/lib/facets/core/array/test_select.rb +1 -1
  179. data/test/lib/facets/core/array/test_shuffle.rb +1 -1
  180. data/test/lib/facets/core/array/test_thru.rb +1 -1
  181. data/test/lib/facets/core/array/test_to_b.rb +1 -1
  182. data/test/lib/facets/core/array/test_to_h.rb +1 -1
  183. data/test/lib/facets/core/array/test_to_hash.rb +1 -1
  184. data/test/lib/facets/core/binding/self/test_of_caller.rb +1 -1
  185. data/test/lib/facets/core/binding/test___LINE__.rb +1 -1
  186. data/test/lib/facets/core/binding/test_call_stack.rb +1 -1
  187. data/test/lib/facets/core/binding/test_called.rb +1 -1
  188. data/test/lib/facets/core/binding/test_caller.rb +1 -1
  189. data/test/lib/facets/core/binding/test_defined.rb +1 -1
  190. data/test/lib/facets/core/binding/test_eval.rb +1 -1
  191. data/test/lib/facets/core/binding/test_local_variables.rb +1 -1
  192. data/test/lib/facets/core/binding/test_method_name.rb +1 -1
  193. data/test/lib/facets/core/binding/test_op_fetch.rb +1 -1
  194. data/test/lib/facets/core/binding/test_op_store.rb +1 -1
  195. data/test/lib/facets/core/binding/test_self.rb +1 -1
  196. data/test/lib/facets/core/class/test_cattr.rb +1 -1
  197. data/test/lib/facets/core/class/test_descendents.rb +1 -1
  198. data/test/lib/facets/core/class/test_method_name.rb +1 -1
  199. data/test/lib/facets/core/class/test_remove_descendents.rb +1 -1
  200. data/test/lib/facets/core/class/test_unix_path.rb +1 -1
  201. data/test/lib/facets/core/comparable/test_at_least.rb +1 -1
  202. data/test/lib/facets/core/comparable/test_clip.rb +1 -1
  203. data/test/lib/facets/core/comparable/test_cmp.rb +1 -1
  204. data/test/lib/facets/core/continuation/self/test_create.rb +1 -1
  205. data/test/lib/facets/core/date/test_days_in_month.rb +1 -1
  206. data/test/lib/facets/core/date/test_days_of_month.rb +1 -1
  207. data/test/lib/facets/core/date/test_stamp.rb +1 -1
  208. data/test/lib/facets/core/date/test_to_date.rb +1 -1
  209. data/test/lib/facets/core/date/test_to_s.rb +1 -1
  210. data/test/lib/facets/core/date/test_to_time.rb +1 -1
  211. data/test/lib/facets/core/dir/self/test_ancestor.rb +1 -1
  212. data/test/lib/facets/core/dir/self/test_ascend.rb +1 -1
  213. data/test/lib/facets/core/enumerable/self/test_combinations.rb +1 -1
  214. data/test/lib/facets/core/enumerable/self/test_cross.rb +1 -1
  215. data/test/lib/facets/core/enumerable/test_collect_with_index.rb +1 -1
  216. data/test/lib/facets/core/enumerable/test_commonality.rb +1 -1
  217. data/test/lib/facets/core/enumerable/test_compact_collect.rb +1 -1
  218. data/test/lib/facets/core/enumerable/test_count.rb +38 -0
  219. data/test/lib/facets/core/enumerable/test_cross.rb +1 -1
  220. data/test/lib/facets/core/enumerable/test_each_combination.rb +1 -1
  221. data/test/lib/facets/core/enumerable/test_each_pair.rb +1 -1
  222. data/test/lib/facets/core/enumerable/test_each_slice.rb +1 -1
  223. data/test/lib/facets/core/enumerable/test_each_unique_pair.rb +1 -1
  224. data/test/lib/facets/core/enumerable/test_entropy.rb +1 -1
  225. data/test/lib/facets/core/enumerable/test_every.rb +1 -1
  226. data/test/lib/facets/core/enumerable/test_ew.rb +1 -1
  227. data/test/lib/facets/core/enumerable/test_filter_collect.rb +1 -1
  228. data/test/lib/facets/core/enumerable/test_find_collisions.rb +1 -1
  229. data/test/lib/facets/core/enumerable/test_frequency.rb +1 -1
  230. data/test/lib/facets/core/enumerable/test_graph.rb +1 -1
  231. data/test/lib/facets/core/enumerable/test_ideal_entropy.rb +1 -1
  232. data/test/lib/facets/core/enumerable/test_none.rb +1 -1
  233. data/test/lib/facets/core/enumerable/test_occur.rb +1 -1
  234. data/test/lib/facets/core/enumerable/test_one.rb +1 -1
  235. data/test/lib/facets/core/enumerable/test_op_pow.rb +1 -1
  236. data/test/lib/facets/core/enumerable/test_partition_by.rb +1 -1
  237. data/test/lib/facets/core/enumerable/test_permute.rb +1 -1
  238. data/test/lib/facets/core/enumerable/test_probability.rb +1 -1
  239. data/test/lib/facets/core/enumerable/test_to_h.rb +1 -1
  240. data/test/lib/facets/core/enumerable/test_uniq_by.rb +1 -1
  241. data/test/lib/facets/core/file/self/test_create.rb +1 -1
  242. data/test/lib/facets/core/file/self/test_open_as_string.rb +1 -1
  243. data/test/lib/facets/core/file/self/test_read_list.rb +1 -1
  244. data/test/lib/facets/core/file/self/test_sanitize.rb +1 -1
  245. data/test/lib/facets/core/file/self/test_split_all.rb +1 -1
  246. data/test/lib/facets/core/float/test_round_at.rb +1 -1
  247. data/test/lib/facets/core/float/test_round_to.rb +1 -1
  248. data/test/lib/facets/core/hash/self/test_zipnew.rb +1 -1
  249. data/test/lib/facets/core/hash/test_alias.rb +1 -1
  250. data/test/lib/facets/core/hash/test_assert_has_keys.rb +1 -1
  251. data/test/lib/facets/core/hash/test_assert_has_only_keys.rb +1 -1
  252. data/test/lib/facets/core/hash/test_at.rb +1 -1
  253. data/test/lib/facets/core/hash/test_collate.rb +1 -1
  254. data/test/lib/facets/core/hash/test_each.rb +1 -1
  255. data/test/lib/facets/core/hash/test_each_with_index.rb +1 -1
  256. data/test/lib/facets/core/hash/test_each_with_key.rb +1 -1
  257. data/test/lib/facets/core/hash/test_graph.rb +1 -1
  258. data/test/lib/facets/core/hash/test_has_keys.rb +1 -1
  259. data/test/lib/facets/core/hash/test_has_only_keys.rb +1 -1
  260. data/test/lib/facets/core/hash/test_inverse.rb +1 -1
  261. data/test/lib/facets/core/hash/test_keys_to_s.rb +1 -1
  262. data/test/lib/facets/core/hash/test_keys_to_sym.rb +1 -1
  263. data/test/lib/facets/core/hash/test_op_fetch.rb +1 -1
  264. data/test/lib/facets/core/hash/test_op_lshift.rb +1 -1
  265. data/test/lib/facets/core/hash/test_rand_key.rb +1 -1
  266. data/test/lib/facets/core/hash/test_rand_pair.rb +1 -1
  267. data/test/lib/facets/core/hash/test_rand_value.rb +1 -1
  268. data/test/lib/facets/core/hash/test_replace_each.rb +1 -1
  269. data/test/lib/facets/core/hash/test_shuffle.rb +1 -1
  270. data/test/lib/facets/core/hash/test_slice.rb +1 -1
  271. data/test/lib/facets/core/hash/test_swap.rb +1 -1
  272. data/test/lib/facets/core/hash/test_swapkey.rb +1 -1
  273. data/test/lib/facets/core/hash/test_to_h.rb +1 -1
  274. data/test/lib/facets/core/hash/test_to_ostruct.rb +1 -1
  275. data/test/lib/facets/core/hash/test_to_ostruct_recurse.rb +1 -1
  276. data/test/lib/facets/core/hash/test_traverse.rb +1 -1
  277. data/test/lib/facets/core/hash/test_update_each.rb +1 -1
  278. data/test/lib/facets/core/hash/test_update_keys.rb +1 -1
  279. data/test/lib/facets/core/hash/test_update_values.rb +1 -1
  280. data/test/lib/facets/core/hash/test_weave.rb +1 -1
  281. data/test/lib/facets/core/integer/test_factorial.rb +1 -1
  282. data/test/lib/facets/core/integer/test_multiple.rb +1 -1
  283. data/test/lib/facets/core/integer/test_ordinal.rb +1 -1
  284. data/test/lib/facets/core/integer/test_times_collect.rb +1 -1
  285. data/test/lib/facets/core/kernel/test___class__.rb +1 -1
  286. data/test/lib/facets/core/kernel/test_as.rb +1 -1
  287. data/test/lib/facets/core/kernel/test_assign_from.rb +1 -1
  288. data/test/lib/facets/core/kernel/test_assign_with.rb +1 -1
  289. data/test/lib/facets/core/kernel/test_bool.rb +1 -1
  290. data/test/lib/facets/core/kernel/test_bug.rb +1 -1
  291. data/test/lib/facets/core/kernel/test_call_stack.rb +1 -1
  292. data/test/lib/facets/core/kernel/test_called.rb +1 -1
  293. data/test/lib/facets/core/kernel/test_constant.rb +1 -1
  294. data/test/lib/facets/core/kernel/test_copy.rb +1 -1
  295. data/test/lib/facets/core/kernel/test_deep_copy.rb +1 -1
  296. data/test/lib/facets/core/kernel/test_demo.rb +1 -1
  297. data/test/lib/facets/core/kernel/test_fn.rb +1 -1
  298. data/test/lib/facets/core/kernel/test_generate_method_name.rb +1 -1
  299. data/test/lib/facets/core/kernel/test_get_by_id.rb +1 -1
  300. data/test/lib/facets/core/kernel/test_here.rb +1 -1
  301. data/test/lib/facets/core/kernel/test_in.rb +1 -1
  302. data/test/lib/facets/core/kernel/test_maybe.rb +1 -1
  303. data/test/lib/facets/core/kernel/test_metaclass.rb +1 -1
  304. data/test/lib/facets/core/kernel/test_method.rb +1 -1
  305. data/test/lib/facets/core/kernel/test_methodname.rb +1 -1
  306. data/test/lib/facets/core/kernel/test_methods.rb +1 -1
  307. data/test/lib/facets/core/kernel/test_new.rb +1 -1
  308. data/test/lib/facets/core/kernel/test_object_class.rb +1 -1
  309. data/test/lib/facets/core/kernel/test_object_hexid.rb +1 -1
  310. data/test/lib/facets/core/kernel/test_require_all.rb +1 -1
  311. data/test/lib/facets/core/kernel/test_require_esc.rb +1 -1
  312. data/test/lib/facets/core/kernel/test_require_facet.rb +1 -1
  313. data/test/lib/facets/core/kernel/test_resc.rb +1 -1
  314. data/test/lib/facets/core/kernel/test_returning.rb +1 -1
  315. data/test/lib/facets/core/kernel/test_send_as.rb +1 -1
  316. data/test/lib/facets/core/kernel/test_set_from.rb +1 -1
  317. data/test/lib/facets/core/kernel/test_set_with.rb +1 -1
  318. data/test/lib/facets/core/kernel/test_silently.rb +1 -1
  319. data/test/lib/facets/core/kernel/test_singleton.rb +1 -1
  320. data/test/lib/facets/core/kernel/test_superior.rb +1 -1
  321. data/test/lib/facets/core/kernel/test_supermethod.rb +1 -1
  322. data/test/lib/facets/core/kernel/test_this.rb +1 -1
  323. data/test/lib/facets/core/kernel/test_to_b.rb +1 -1
  324. data/test/lib/facets/core/kernel/test_to_bool.rb +1 -1
  325. data/test/lib/facets/core/kernel/test_uri.rb +1 -1
  326. data/test/lib/facets/core/kernel/test_val.rb +1 -1
  327. data/test/lib/facets/core/kernel/test_with_accessor.rb +1 -1
  328. data/test/lib/facets/core/matchdata/test_match.rb +1 -1
  329. data/test/lib/facets/core/matchdata/test_matchtree.rb +7 -2
  330. data/test/lib/facets/core/module/test_abstract.rb +1 -1
  331. data/test/lib/facets/core/module/test_alias_module_function.rb +1 -1
  332. data/test/lib/facets/core/module/test_ancestor.rb +1 -1
  333. data/test/lib/facets/core/module/test_basename.rb +1 -1
  334. data/test/lib/facets/core/module/test_by_name.rb +1 -1
  335. data/test/lib/facets/core/module/test_clone_using.rb +1 -1
  336. data/test/lib/facets/core/module/test_dirname.rb +1 -1
  337. data/test/lib/facets/core/module/test_equate_on.rb +1 -1
  338. data/test/lib/facets/core/module/test_generate_instance_method_name.rb +1 -1
  339. data/test/lib/facets/core/module/test_include_as.rb +1 -1
  340. data/test/lib/facets/core/module/test_inherit.rb +1 -1
  341. data/test/lib/facets/core/module/test_initializer.rb +1 -1
  342. data/test/lib/facets/core/module/test_instance_methods.rb +1 -1
  343. data/test/lib/facets/core/module/test_integrate.rb +1 -1
  344. data/test/lib/facets/core/module/test_memoize.rb +1 -1
  345. data/test/lib/facets/core/module/test_modspace.rb +1 -1
  346. data/test/lib/facets/core/module/test_namespace.rb +1 -1
  347. data/test/lib/facets/core/module/test_nesting.rb +1 -1
  348. data/test/lib/facets/core/module/{test_undef.rb → test_nodef.rb} +5 -5
  349. data/test/lib/facets/core/module/test_on_included.rb +1 -1
  350. data/test/lib/facets/core/module/test_redef.rb +1 -1
  351. data/test/lib/facets/core/module/test_redefine_method.rb +1 -1
  352. data/test/lib/facets/core/module/test_redirect.rb +1 -1
  353. data/test/lib/facets/core/module/test_redirect_method.rb +1 -1
  354. data/test/lib/facets/core/module/test_remove.rb +1 -1
  355. data/test/lib/facets/core/module/test_rename.rb +1 -1
  356. data/test/lib/facets/core/module/test_rename_method.rb +1 -1
  357. data/test/lib/facets/core/module/test_revisal.rb +1 -1
  358. data/test/lib/facets/core/module/test_shadow_method.rb +1 -1
  359. data/test/lib/facets/core/module/test_sort_on.rb +1 -1
  360. data/test/lib/facets/core/module/test_this.rb +1 -1
  361. data/test/lib/facets/core/module/test_wrap.rb +1 -1
  362. data/test/lib/facets/core/module/test_wrap_method.rb +1 -1
  363. data/test/lib/facets/core/nilclass/test_blank.rb +1 -1
  364. data/test/lib/facets/core/nilclass/test_empty.rb +1 -1
  365. data/test/lib/facets/core/nilclass/test_include.rb +1 -1
  366. data/test/lib/facets/core/nilclass/test_op_fetch.rb +1 -1
  367. data/test/lib/facets/core/nilclass/test_size.rb +1 -1
  368. data/test/lib/facets/core/nilclass/test_to_h.rb +1 -1
  369. data/test/lib/facets/core/numeric/test_approx.rb +1 -1
  370. data/test/lib/facets/core/numeric/test_ceil_multiple.rb +1 -1
  371. data/test/lib/facets/core/numeric/test_succ.rb +1 -1
  372. data/test/lib/facets/core/numeric/test_to_b.rb +1 -1
  373. data/test/lib/facets/core/ostruct/test___merge__.rb +1 -1
  374. data/test/lib/facets/core/ostruct/test___update__.rb +1 -1
  375. data/test/lib/facets/core/ostruct/test_op_fetch.rb +1 -1
  376. data/test/lib/facets/core/ostruct/test_op_store.rb +1 -1
  377. data/test/lib/facets/core/proc/test_compose.rb +1 -1
  378. data/test/lib/facets/core/proc/test_to_method.rb +1 -1
  379. data/test/lib/facets/core/range/test_to_r.rb +1 -1
  380. data/test/lib/facets/core/range/test_to_range.rb +1 -1
  381. data/test/lib/facets/core/range/test_umbrella.rb +1 -1
  382. data/test/lib/facets/core/range/test_within.rb +1 -1
  383. data/test/lib/facets/core/regexp/test_arity.rb +1 -1
  384. data/test/lib/facets/core/regexp/test_to_re.rb +1 -1
  385. data/test/lib/facets/core/regexp/test_to_regexp.rb +1 -1
  386. data/test/lib/facets/core/string/self/test_interpolate.rb +1 -1
  387. data/test/lib/facets/core/string/self/test_patterns.rb +1 -1
  388. data/test/lib/facets/core/string/self/test_rand_letter.rb +1 -1
  389. data/test/lib/facets/core/string/test_align_center.rb +1 -1
  390. data/test/lib/facets/core/string/test_at_rand.rb +1 -1
  391. data/test/lib/facets/core/string/test_basename.rb +1 -1
  392. data/test/lib/facets/core/string/test_blank.rb +1 -1
  393. data/test/lib/facets/core/string/test_bracket.rb +1 -1
  394. data/test/lib/facets/core/string/test_camelcase.rb +1 -1
  395. data/test/lib/facets/core/string/test_camelize.rb +1 -1
  396. data/test/lib/facets/core/string/test_capitalized.rb +1 -1
  397. data/test/lib/facets/core/string/test_chars.rb +1 -1
  398. data/test/lib/facets/core/string/test_cmp.rb +1 -1
  399. data/test/lib/facets/core/string/test_demodulize.rb +1 -1
  400. data/test/lib/facets/core/string/test_downcase.rb +1 -1
  401. data/test/lib/facets/core/string/test_dresner.rb +1 -1
  402. data/test/lib/facets/core/string/test_each_char.rb +1 -1
  403. data/test/lib/facets/core/string/test_each_word.rb +1 -1
  404. data/test/lib/facets/core/string/test_first.rb +1 -1
  405. data/test/lib/facets/core/string/test_fold.rb +1 -1
  406. data/test/lib/facets/core/string/test_frequency.rb +1 -1
  407. data/test/lib/facets/core/string/test_humanize.rb +1 -1
  408. data/test/lib/facets/core/string/test_indent.rb +1 -1
  409. data/test/lib/facets/core/string/test_index_all.rb +1 -1
  410. data/test/lib/facets/core/string/test_last.rb +1 -1
  411. data/test/lib/facets/core/string/test_line_wrap.rb +1 -1
  412. data/test/lib/facets/core/string/test_lines.rb +1 -1
  413. data/test/lib/facets/core/string/test_lowercase.rb +1 -1
  414. data/test/lib/facets/core/string/test_margin.rb +1 -1
  415. data/test/lib/facets/core/string/test_methodize.rb +1 -1
  416. data/test/lib/facets/core/string/test_modulize.rb +1 -1
  417. data/test/lib/facets/core/string/test_mscan.rb +1 -1
  418. data/test/lib/facets/core/string/test_natcmp.rb +1 -1
  419. data/test/lib/facets/core/string/test_nchar.rb +1 -1
  420. data/test/lib/facets/core/string/test_pathize.rb +1 -1
  421. data/test/lib/facets/core/string/test_pop.rb +1 -1
  422. data/test/lib/facets/core/string/test_pot.rb +1 -1
  423. data/test/lib/facets/core/string/test_probability.rb +1 -1
  424. data/test/lib/facets/core/string/test_push.rb +1 -1
  425. data/test/lib/facets/core/string/test_quote.rb +1 -1
  426. data/test/lib/facets/core/string/test_rand_byte.rb +1 -1
  427. data/test/lib/facets/core/string/test_rand_index.rb +1 -1
  428. data/test/lib/facets/core/string/test_range.rb +1 -1
  429. data/test/lib/facets/core/string/test_range_all.rb +1 -1
  430. data/test/lib/facets/core/string/test_range_of_line.rb +1 -1
  431. data/test/lib/facets/core/string/test_regesc.rb +1 -1
  432. data/test/lib/facets/core/string/test_shatter.rb +1 -1
  433. data/test/lib/facets/core/string/test_shift.rb +1 -1
  434. data/test/lib/facets/core/string/test_shuffle.rb +1 -1
  435. data/test/lib/facets/core/string/test_similarity.rb +1 -1
  436. data/test/lib/facets/core/string/test_singular.rb +1 -1
  437. data/test/lib/facets/core/string/test_soundex.rb +1 -1
  438. data/test/lib/facets/core/string/test_succ.rb +1 -1
  439. data/test/lib/facets/core/string/test_to_a.rb +1 -1
  440. data/test/lib/facets/core/string/test_to_b.rb +1 -1
  441. data/test/lib/facets/core/string/test_to_const.rb +1 -1
  442. data/test/lib/facets/core/string/test_to_date.rb +1 -1
  443. data/test/lib/facets/core/string/test_to_proc.rb +1 -1
  444. data/test/lib/facets/core/string/test_to_re.rb +1 -1
  445. data/test/lib/facets/core/string/test_to_time.rb +1 -1
  446. data/test/lib/facets/core/string/test_unix_crypt.rb +1 -1
  447. data/test/lib/facets/core/string/test_unpack.rb +1 -1
  448. data/test/lib/facets/core/string/test_unshift.rb +1 -1
  449. data/test/lib/facets/core/string/test_upcase.rb +1 -1
  450. data/test/lib/facets/core/string/test_whitespace.rb +1 -1
  451. data/test/lib/facets/core/string/test_word_filter.rb +1 -1
  452. data/test/lib/facets/core/string/test_word_wrap.rb +1 -1
  453. data/test/lib/facets/core/string/test_words.rb +1 -1
  454. data/test/lib/facets/core/symbol/test_camelcase.rb +1 -1
  455. data/test/lib/facets/core/symbol/test_camelize.rb +1 -1
  456. data/test/lib/facets/core/symbol/test_capitalize.rb +1 -1
  457. data/test/lib/facets/core/symbol/test_capitalized.rb +1 -1
  458. data/test/lib/facets/core/symbol/test_downcase.rb +1 -1
  459. data/test/lib/facets/core/symbol/test_not.rb +1 -1
  460. data/test/lib/facets/core/symbol/test_pad.rb +1 -1
  461. data/test/lib/facets/core/symbol/test_succ.rb +1 -1
  462. data/test/lib/facets/core/symbol/test_to_const.rb +1 -1
  463. data/test/lib/facets/core/symbol/test_to_proc.rb +1 -1
  464. data/test/lib/facets/core/symbol/test_to_str.rb +1 -1
  465. data/test/lib/facets/core/symbol/test_underscore.rb +1 -1
  466. data/test/lib/facets/core/symbol/test_upcase.rb +1 -1
  467. data/test/lib/facets/core/time/test_change.rb +1 -1
  468. data/test/lib/facets/core/time/test_elapse.rb +1 -1
  469. data/test/lib/facets/core/time/test_stamp.rb +1 -1
  470. data/test/lib/facets/core/time/test_to_date.rb +1 -1
  471. data/test/lib/facets/core/time/test_to_s.rb +1 -1
  472. data/test/lib/facets/core/time/test_to_time.rb +1 -1
  473. data/test/lib/facets/more/test_annattr.rb +39 -0
  474. data/test/lib/facets/more/test_annotatedattr.rb +39 -0
  475. data/test/lib/facets/more/test_annotation.rb +1 -22
  476. data/test/lib/facets/more/test_ansicode.rb +1 -1
  477. data/test/lib/facets/more/test_association.rb +6 -1
  478. data/test/lib/facets/more/test_basicobject.rb +1 -1
  479. data/test/lib/facets/more/test_bbcode.rb +1 -1
  480. data/test/lib/facets/more/test_binaryreader.rb +64 -0
  481. data/test/lib/facets/more/test_bitmask.rb +1 -1
  482. data/test/lib/facets/more/test_bytes.rb +1 -1
  483. data/test/lib/facets/more/test_classinherit.rb +1 -1
  484. data/test/lib/facets/more/test_classmethods.rb +1 -1
  485. data/test/lib/facets/more/test_coroutine.rb +1 -1
  486. data/test/lib/facets/more/test_crypt.rb +1 -1
  487. data/test/lib/facets/more/test_dictionary.rb +1 -1
  488. data/test/lib/facets/more/test_elementor.rb +1 -1
  489. data/test/lib/facets/more/test_enumerablepass.rb +1 -1
  490. data/test/lib/facets/more/test_floatstring.rb +1 -1
  491. data/test/lib/facets/more/test_functor.rb +1 -1
  492. data/test/lib/facets/more/test_htmlbuilder.rb +1 -1
  493. data/test/lib/facets/more/test_inheritor.rb +1 -1
  494. data/test/lib/facets/more/test_interval.rb +1 -1
  495. data/test/lib/facets/more/test_json.rb +1 -1
  496. data/test/lib/facets/more/test_lisp.rb +1 -1
  497. data/test/lib/facets/more/test_lisp_format.rb +1 -1
  498. data/test/lib/facets/more/test_lrucache.rb +1 -1
  499. data/test/lib/facets/more/test_mathconstants.rb +1 -1
  500. data/test/lib/facets/more/test_methodprobe.rb +1 -1
  501. data/test/lib/facets/more/test_multipliers.rb +1 -1
  502. data/test/lib/facets/more/test_multiton.rb +1 -1
  503. data/test/lib/facets/more/test_nackclass.rb +1 -1
  504. data/test/lib/facets/more/test_nilcomparable.rb +1 -1
  505. data/test/lib/facets/more/test_opencascade.rb +66 -0
  506. data/test/lib/facets/more/test_openobject.rb +14 -2
  507. data/test/lib/facets/more/test_overload.rb +1 -1
  508. data/test/lib/facets/more/test_paramix.rb +1 -1
  509. data/test/lib/facets/more/test_pqueue.rb +39 -0
  510. data/test/lib/facets/more/test_preinitialize.rb +1 -1
  511. data/test/lib/facets/more/test_promoteself.rb +1 -1
  512. data/test/lib/facets/more/test_recorder.rb +1 -1
  513. data/test/lib/facets/more/test_snapshot.rb +1 -1
  514. data/test/lib/facets/more/test_statichash.rb +11 -11
  515. data/test/lib/facets/more/test_syncarray.rb +1 -1
  516. data/test/lib/facets/more/test_synchash.rb +1 -1
  517. data/test/lib/facets/more/test_tagiterator.rb +1 -1
  518. data/test/lib/facets/more/test_taskable.rb +151 -0
  519. data/test/lib/facets/more/test_timer.rb +1 -1
  520. data/test/lib/facets/more/test_times.rb +1 -1
  521. data/test/lib/facets/more/test_tuple.rb +1 -1
  522. data/test/lib/facets/more/test_typecast.rb +1 -1
  523. data/test/lib/facets/more/test_uninheritable.rb +1 -1
  524. data/test/lib/facets/more/test_units.rb +1 -1
  525. data/test/lib/facets/more/test_xmlbuilder.rb +1 -1
  526. data/test/lib/facets/more/test_xmlhelper.rb +1 -1
  527. data/test/lib/facets/more/test_xoxo.rb +1 -1
  528. data/test/lib/facets/more/test_yamlstruct.rb +1 -1
  529. metadata +1243 -1247
  530. data/ProjectInfo +0 -89
  531. data/Rakefile +0 -181
  532. data/doc/CHANGELOG +0 -284
  533. data/doc/TODO +0 -73
  534. data/doc/noauto +0 -63
  535. data/lib/facet/array.rb +0 -1
  536. data/lib/facet/class.rb +0 -1
  537. data/lib/facet/comparable.rb +0 -1
  538. data/lib/facet/continuation.rb +0 -1
  539. data/lib/facet/date.rb +0 -1
  540. data/lib/facet/dir.rb +0 -1
  541. data/lib/facet/enumerable.rb +0 -1
  542. data/lib/facet/file.rb +0 -1
  543. data/lib/facet/fileutils.rb +0 -1
  544. data/lib/facet/float.rb +0 -1
  545. data/lib/facet/gem.rb +0 -1
  546. data/lib/facet/hash.rb +0 -1
  547. data/lib/facet/integer.rb +0 -1
  548. data/lib/facet/kernel.rb +0 -1
  549. data/lib/facet/logger.rb +0 -1
  550. data/lib/facet/matchdata.rb +0 -1
  551. data/lib/facet/module.rb +0 -1
  552. data/lib/facet/module/undef.rb +0 -1
  553. data/lib/facet/nilclass.rb +0 -1
  554. data/lib/facet/numeric.rb +0 -1
  555. data/lib/facet/pathname.rb +0 -1
  556. data/lib/facet/proc.rb +0 -1
  557. data/lib/facet/range.rb +0 -1
  558. data/lib/facet/regexp.rb +0 -1
  559. data/lib/facet/string.rb +0 -1
  560. data/lib/facet/symbol.rb +0 -1
  561. data/lib/facet/time.rb +0 -1
  562. data/lib/facet/unboundmethod.rb +0 -1
  563. data/lib/facets/core/array.rb +0 -35
  564. data/lib/facets/core/class.rb +0 -11
  565. data/lib/facets/core/comparable.rb +0 -5
  566. data/lib/facets/core/continuation.rb +0 -1
  567. data/lib/facets/core/date.rb +0 -6
  568. data/lib/facets/core/dir.rb +0 -4
  569. data/lib/facets/core/enumerable.rb +0 -42
  570. data/lib/facets/core/file.rb +0 -8
  571. data/lib/facets/core/fileutils.rb +0 -8
  572. data/lib/facets/core/float.rb +0 -4
  573. data/lib/facets/core/gem.rb +0 -4
  574. data/lib/facets/core/hash.rb +0 -40
  575. data/lib/facets/core/integer.rb +0 -9
  576. data/lib/facets/core/kernel.rb +0 -69
  577. data/lib/facets/core/logger.rb +0 -2
  578. data/lib/facets/core/matchdata.rb +0 -3
  579. data/lib/facets/core/module.rb +0 -43
  580. data/lib/facets/core/nilclass.rb +0 -9
  581. data/lib/facets/core/numeric.rb +0 -6
  582. data/lib/facets/core/pathname.rb +0 -2
  583. data/lib/facets/core/proc.rb +0 -3
  584. data/lib/facets/core/range.rb +0 -4
  585. data/lib/facets/core/regexp.rb +0 -3
  586. data/lib/facets/core/string.rb +0 -91
  587. data/lib/facets/core/symbol.rb +0 -13
  588. data/lib/facets/core/time.rb +0 -8
  589. data/lib/facets/core/unboundmethod.rb +0 -1
@@ -1,5 +1,11 @@
1
+ = Facets Contributing Authors
1
2
 
2
- = Facets' Contributing Authors
3
+ == Main Developers
4
+
5
+ * Trans (Thomas Sawyer)
6
+ * Florian Gross
7
+ * George Moschovitis
8
+ * Peter Vanbroekhoven
3
9
 
4
10
  == Rubyists of Distinction
5
11
 
@@ -9,13 +15,15 @@
9
15
  * Jamis Buck
10
16
  * Renald Buter
11
17
  * Shashank Date
18
+ * Robert Feldt
12
19
  * Florian Frank
13
20
  * Hal Fulton
14
21
  * Michael Granger
15
22
  * Florian Gross
16
23
  * Thomas-Ivo Heinen
17
- * David H. H.
24
+ * David Heinemeier Hansson
18
25
  * Ara T. Howard
26
+ * MenTaLguY
19
27
  * Mohammad Khan
20
28
  * Derek Lewis
21
29
  * Jan Molic
@@ -30,7 +38,8 @@
30
38
  * Jim Weirich
31
39
  * Jeff Wood
32
40
  * Austin Ziegler
33
- * why_the_lucky_stiff
41
+ * Why The Lucky Stiff
34
42
 
35
43
  If any names are missing from this list, please let me know
36
44
  and I will correct immediately.
45
+
data/README CHANGED
@@ -8,9 +8,10 @@
8
8
 
9
9
  Ruby Facets
10
10
 
11
+ Facets is set of two libraries Facets/CORE and Facets/MORE.
12
+
11
13
  Facets/CORE is a vast collection of methods which extend the core
12
14
  capabilities of Ruby's built-in classes and modules.
13
-
14
15
  This collection of extension methods is unique by virtue of its atomicity.
15
16
  The methods are stored individually so that each can be required
16
17
  independently. This gives developers fine-grain control over which
@@ -18,10 +19,9 @@ extra methods to bring into his or her code. The collection currently
18
19
  contains over 400 methods spanning 28 classes and modules.
19
20
 
20
21
  Facets/MORE is a collection of additioanl classes, modules and microframeworks.
21
-
22
22
  The class, module and microframework additions consitute an ever growing
23
- and improving source of reusable components. Some very nice adsitions
24
- have recently been added, from an amazing Units system to an elegant
23
+ and improving source of reusable components. Some very nice additions
24
+ are available, from an amazing Units system to an elegant
25
25
  annotations systems. And of course there are all the more typical goodies
26
26
  like Tuple, Functor and Multiton.
27
27
 
@@ -29,7 +29,7 @@ like Tuple, Functor and Multiton.
29
29
 
30
30
  Facets holds to the notion that the more we can reasonably integrate into
31
31
  a common foundation directed toward general needs, the better that foundation
32
- will be able to serve us. There are a number of advantages here:
32
+ will be able to serve everyone. There are a number of advantages here:
33
33
 
34
34
  * Better Code-reuse
35
35
  * Collaborative Improvements
@@ -39,18 +39,17 @@ will be able to serve us. There are a number of advantages here:
39
39
 
40
40
  == Status
41
41
 
42
- The current status is quite good. While various parts are still considered
43
- Beta, everything is relatively usable.
42
+ The current status is quite good. While some parts are still considered
43
+ beta, everything is relatively usable.
44
44
 
45
45
 
46
46
  == Installation
47
47
 
48
-
49
48
  The easiest way to install is via RubyGems. On the command line enter:
50
49
 
51
50
  > gem install facets
52
51
 
53
- To manually install, unpack the .tbz (.tar.bz2) package and use the included
52
+ To manually install, unpack the .tar.bz2 package and use the included
54
53
  setup.rb script. For example:
55
54
 
56
55
  > tar -xvzf facets,YYYY-MM-DD.tbz
@@ -63,24 +62,27 @@ setup.rb script. For example:
63
62
  For detailed usage of any given method or module please refer to the
64
63
  API RDocs. Most are well documented.
65
64
 
66
- To use a single facet you simply require the method by name, for example:
65
+ To use a single CORE facet you simply require the method by name, for example:
67
66
 
68
67
  require 'facet/time/stamp'
69
68
 
70
69
  Techinally this requires a redirection file to the core method itself.
71
- You can bypass the redirection:
70
+ Redirection can be bypassed. Eg.
72
71
 
73
72
  require 'facets/core/time/stamp'
74
73
 
75
- Although not at all neccessary, if you are using more then a few facets
76
- it is recommended that before requiring any of them you first require
77
- the main facility.
74
+ But this usage is discouraged and should only be used if it is for some
75
+ reason neccessary or you are developing a library for Facets itself.
76
+
77
+ If you are using more then a few facets it is recommended that before
78
+ requiring any of them you first require the main facility.
78
79
 
79
80
  require 'facets'
80
81
 
81
- This loads all the core facets considered "base" (a couple dozen basic methods)
82
- and add the facets library directories to the end of Ruby's load path. This
83
- allows you to require facets without the 'facet/...' prefix. Eg.
82
+ This loads a set of facets considered "base" --currently a couple dozen
83
+ very basic methods, and adds the facets library directories to the end
84
+ of Ruby's load path. This allows you to require facets without even using
85
+ the 'facet/...' prefix. Eg.
84
86
 
85
87
  require 'string/blank'
86
88
 
@@ -88,14 +90,20 @@ A handful of extension sets are also available. For example,
88
90
 
89
91
  require 'facet/string_as_array'
90
92
 
91
- adds some methods to Array that make it behave a little more like
92
- an array of characters. Other useful sets include, 'random' which
93
+ adds some methods to Array that allow a String to behave more like
94
+ an array of characters. Other useful sets include, 'random' which
93
95
  loads every facet method related to randomness and 'inflect' which
94
96
  loads a number of methods for manipulating strings in high-level
95
97
  ways, like #camelize and #pluralize.
96
98
 
97
- Using a module, class or microframework is essentially the same.
98
- You can use the redirection path. Eg.
99
+ It also should be pointed out that class methods are stored under
100
+ the 'self' directory of a class. For example, to load the
101
+ File::read_list method.
102
+
103
+ require 'facet/file/self/read_list'
104
+
105
+ Using a Facets/MORE library of modules, classes or microframeworks
106
+ is essentially the same. You can use the redirection path. Eg.
99
107
 
100
108
  require 'facet/basicobject'
101
109
 
@@ -108,9 +116,9 @@ Again, if you load the main facility, you can eliminate the need for the 'facet/
108
116
  require 'facets'
109
117
  require 'basicobject'
110
118
 
111
- Understand that on the off chance that anoth library you are using has the same name as
112
- one of Facets' everything will still work fine. You will not be able to use the
113
- prefixless shorcut to require the facet.
119
+ Understand that on the off chance that another library has the same name as
120
+ one of Facets' everything will still work fine. You will just not be able to use the
121
+ prefixless shorcut to require it.
114
122
 
115
123
  For details pertaining to the functionality of each feature, please see the API Docs.
116
124
 
@@ -119,7 +127,7 @@ For details pertaining to the functionality of each feature, please see the API
119
127
 
120
128
  === Directories
121
129
 
122
- There are presently three two subdirs in Facets: 'core', which stores
130
+ There are two subdirectories in Facets library, 'core', which stores
123
131
  the method extensions and 'more' which store the modules, classes and
124
132
  micorframeworks.
125
133
 
@@ -224,10 +232,8 @@ A copy of both licenses accompany this document (see COPYING).
224
232
 
225
233
  Credit and Copyrights for particular borrowed code segments are
226
234
  given in their respective source. All licenses are either compatible
227
- with the Ruby lincense (Ruby or GPL) or the original author has given
228
- permission for inclusion of their code under this lincense.</p>
229
-
230
- Any code file not specifically labeled shall fall under the Ruby License.
235
+ with the Ruby license (namely the GPL) or the original author has given
236
+ permission for inclusion of their code under such lincense.</p>
231
237
 
232
238
 
233
239
  == Pitch
data/WARNING ADDED
@@ -0,0 +1,56 @@
1
+
2
+ # Some caution should be taken when using certain facets.
3
+ # What follows ois list of such facets and the reasons
4
+ # these particular facets should given special consideration.
5
+
6
+ # Some facets require other files to be loaded first
7
+ # that are not loaded automatically, like fileutils
8
+ # (i.e. they are part of the standard lib, not core).
9
+ # The file include all of the following.
10
+
11
+ date/*
12
+ fileutils/*
13
+ ostruct/*
14
+ logger/*
15
+ gem/*
16
+
17
+ # Others effect the system in slightly non-standard ways.
18
+ # Though such changes are kept to a minumim and intended
19
+ # to be backward compatible, there still may be edge cases
20
+ # that could cause another library to misbehave.
21
+ # The following is a list known facets that may have
22
+ # this potential.
23
+
24
+ array/op_fetch.rb
25
+ array/op_store.rb
26
+ binding/self/of_caller.rb
27
+ hash/op_fetch.rb
28
+ hash/op_store.rb
29
+ numeric/succ.rb
30
+ numeric/pred.rb
31
+ string/succ.rb
32
+ string/unpack.rb
33
+ module/attr.rb
34
+ #module/attr_reader.rb
35
+ #module/attr_writer.rb
36
+ #module/attr_accessor.rb
37
+
38
+ # There are also some facets that are potentially unsafe b/c
39
+ # they change Ruby's default behavior in a nonconvential
40
+ # manner and hence are not designed to be backward compatible.
41
+ # Using these with a pre-existent program may cause the program
42
+ # to misbehave. So while they can be useful, be sure to
43
+ # understand exactly what they do before putting them to
44
+ # serious use.
45
+
46
+ hash/each.rb
47
+ module/methods.rb
48
+ object/method.rb
49
+ nilclass/op_fetch.rb
50
+ nilclass/empty.rb
51
+ nilclass/include.rb
52
+ nilclass/size.rb
53
+ nilclass/length.rb
54
+ nilclass/method_missing.rb
55
+
56
+ #
@@ -0,0 +1,22 @@
1
+ require 'mega/annotation'
2
+
3
+ module M
4
+ ann :this, :koko => []
5
+ ann.this.koko! << 1
6
+ end
7
+
8
+ class C1
9
+ include M
10
+ ann.this.koko! << 2
11
+ ann.this.koko! << 3
12
+ end
13
+
14
+
15
+ class C2
16
+ include M
17
+ ann.this.koko! << 4
18
+ end
19
+
20
+ p M.ann.this.koko # => expected [1]
21
+ p C1.ann.this.koko # => expected [1, 2, 3]
22
+ p C2.ann.this.koko # => expectes [1, 4]
@@ -0,0 +1,20 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ ## Little unix filter that colorizes diff output
4
+ #
5
+
6
+ require 'term/ansicolor'
7
+
8
+ include Term::ANSIColor
9
+
10
+ ARGF.each do |line|
11
+ print(
12
+ case line
13
+ when /^\+/ then green { line }
14
+ when /^-/ then red { line }
15
+ when /^(@@|diff)/ then blue { line }
16
+ else line
17
+ end
18
+ )
19
+ end
20
+ # vim: set et sw=2 ts=2:
@@ -0,0 +1,82 @@
1
+ require 'term/ansicolor'
2
+
3
+ # Use this trick to work around namespace cluttering that
4
+ # happens if you just include Term::ANSIColor:
5
+
6
+ class Color
7
+ class << self
8
+ include Term::ANSIColor
9
+ end
10
+ end
11
+
12
+ print Color.red, Color.bold, "No Namespace cluttering:", Color.clear, "\n"
13
+ print Color.green + "green" + Color.clear, "\n"
14
+ print Color.on_red(Color.green("green")), "\n"
15
+ print Color.yellow { Color.on_black { "yellow on_black" } }, "\n\n"
16
+
17
+ # Anyway, I don't define any of Term::ANSIColor's methods in this example
18
+ # and I want to keep it short:
19
+ include Term::ANSIColor
20
+
21
+ print red, bold, "Usage as constants:", reset, "\n"
22
+ print clear, "clear", reset, reset, "reset", reset,
23
+ bold, "bold", reset, dark, "dark", reset,
24
+ underscore, "underscore", reset, blink, "blink", reset,
25
+ negative, "negative", reset, concealed, "concealed", reset, "|\n",
26
+ black, "black", reset, red, "red", reset, green, "green", reset,
27
+ yellow, "yellow", reset, blue, "blue", reset, magenta, "magenta", reset,
28
+ cyan, "cyan", reset, white, "white", reset, "|\n",
29
+ on_black, "on_black", reset, on_red, "on_red", reset,
30
+ on_green, "on_green", reset, on_yellow, "on_yellow", reset,
31
+ on_blue, "on_blue", reset, on_magenta, "on_magenta", reset,
32
+ on_cyan, "on_cyan", reset, on_white, "on_white", reset, "|\n\n"
33
+
34
+ print red, bold, "Usage as unary functions:", reset, "\n"
35
+ print clear("clear"), reset("reset"), bold("bold"), dark("dark"),
36
+ underscore("underscore"), blink("blink"), negative("negative"),
37
+ concealed("concealed"), "|\n",
38
+ black("black"), red("red"), green("green"), yellow("yellow"),
39
+ blue("blue"), magenta("magenta"), cyan("cyan"), white("white"), "|\n",
40
+ on_black("on_black"), on_red("on_red"), on_green("on_green"),#
41
+ on_yellow("on_yellow"), on_blue("on_blue"), on_magenta("on_magenta"),
42
+ on_cyan("on_cyan"), on_white("on_white"), "|\n\n"
43
+
44
+ print red { bold { "Usage as block forms:" } }, "\n"
45
+ print clear { "clear" }, reset { "reset" }, bold { "bold" },
46
+ dark { "dark" }, underscore { "underscore" }, blink { "blink" },
47
+ negative { "negative" }, concealed { "concealed" }, "|\n",
48
+ black { "black" }, red { "red" }, green { "green" },
49
+ yellow { "yellow" }, blue { "blue" }, magenta { "magenta" },
50
+ cyan { "cyan" }, white { "white" }, "|\n",
51
+ on_black { "on_black" }, on_red { "on_red" }, on_green { "on_green" },
52
+ on_yellow { "on_yellow" }, on_blue { "on_blue" },
53
+ on_magenta { "on_magenta" }, on_cyan { "on_cyan" },
54
+ on_white { "on_white" }, "|\n\n"
55
+
56
+ # Usage as Mixin into String or its Subclasses
57
+ class String
58
+ include Term::ANSIColor
59
+ end
60
+
61
+ print "Usage as String Mixins:".red.bold, "\n"
62
+ print "clear".clear, "reset".reset, "bold".bold, "dark".dark,
63
+ "underscore".underscore, "blink".blink, "negative".negative,
64
+ "concealed".concealed, "|\n",
65
+ "black".black, "red".red, "green".green, "yellow".yellow,
66
+ "blue".blue, "magenta".magenta, "cyan".cyan, "white".white, "|\n",
67
+ "on_black".on_black, "on_red".on_red, "on_green".on_green,
68
+ "on_yellow".on_yellow, "on_blue".on_blue, "on_magenta".on_magenta,
69
+ "on_cyan".on_cyan, "on_white".on_white, "|\n\n"
70
+
71
+ symbols = Term::ANSIColor::attributes
72
+ print red { bold { "All supported attributes = " } },
73
+ blue { symbols.inspect }, "\n\n"
74
+
75
+ print "Send symbols to strings:".send(:red).send(:bold), "\n"
76
+ print symbols[12, 8].map { |c| c.to_s.send(c) }, "\n\n"
77
+
78
+ print red { bold { "Make strings monochromatic again:" } }, "\n"
79
+ print [ "red".red, "not red anymore".red.uncolored,
80
+ uncolored { "not red anymore".red }, uncolored("not red anymore".red)
81
+ ].map { |x| x + "\n" }
82
+ # vim: set et sw=2 ts=2:
@@ -0,0 +1,347 @@
1
+ #!/usr/bin/ruby
2
+ # = chatserver.rb
3
+ #
4
+ # This is an extremely crude and simple single-threaded multiplexing chat
5
+ # server. It (hopefully) demonstrates how to use a IO::Reactor object to do IO
6
+ # multiplexing with events.
7
+ #
8
+ # == Synopsis
9
+ #
10
+ # $ chatserver.rb [HOST [PORT [LOOPTIMEOUT]]]
11
+ #
12
+ # [HOST]
13
+ # The host or IP the server will bind to
14
+ #
15
+ # [PORT]
16
+ # The port the server will listen on
17
+ #
18
+ # [LOOPTIMEOUT]
19
+ # The number of floating-point seconds between polls. Specifying -1 (or any
20
+ # negative number, really) here will make the server's event loop block on the
21
+ # call to #poll.
22
+ #
23
+ # == Author
24
+ #
25
+ # Michael Granger <ged@FaerieMUD.org>
26
+ #
27
+ # Copyright (c) 2002, 2003 The FaerieMUD Consortium. All rights reserved.
28
+ #
29
+ # This program is free software. You may use, modify, and/or redistribute this
30
+ # software under the same terms as Ruby itself.
31
+ #
32
+ # This program is distributed in the hope that it will be useful, but WITHOUT
33
+ # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
34
+ # FOR A PARTICULAR PURPOSE.
35
+ #
36
+ # == Version
37
+ #
38
+ # $Id: chatserver.rb,v 1.4 2003/08/04 23:53:32 deveiant Exp $
39
+ #
40
+
41
+ require 'io/reactor'
42
+ require 'socket'
43
+
44
+ module Example
45
+
46
+ ### Chatserver user class -- part of the chatserver example.
47
+ class User
48
+
49
+ MTU = 4096
50
+ CR = "\015"
51
+ LF = "\012"
52
+ EOL = CR + LF
53
+
54
+ PROMPT = 'chat> '
55
+
56
+ ### Create and return a user object which will use the specified
57
+ ### <tt>socket</tt> and <tt>pollObj</tt>.
58
+ def initialize( socket, server )
59
+ @socket = socket
60
+ @server = server
61
+ @obuffer = ''
62
+ @ibuffer = ''
63
+ @peerHost = @socket.peeraddr[2]
64
+ @peerPort = @socket.peeraddr[1]
65
+ @connected = true
66
+ end
67
+
68
+ # Object attribute
69
+ attr_reader :socket, :server, :ibuffer, :obuffer
70
+
71
+
72
+ ### Return a stringified version of the user
73
+ def to_s
74
+ "%s:%d" % [ @peerHost, @peerPort ]
75
+ end
76
+
77
+
78
+ ### Add the specified string to the user's output buffer and turn on
79
+ ### output events.
80
+ def addOutput( string )
81
+ @obuffer << string.chomp << EOL
82
+ @server.reactor.enableEvents( @socket, :write )
83
+ end
84
+ alias :<< :addOutput
85
+
86
+
87
+ ### Write as much of the output buffer to the socket as possible, and return
88
+ ### the number of bytes remaining to be sent.
89
+ def writeOutput
90
+ bytes = @socket.syswrite( @obuffer )
91
+ @obuffer[ 0, bytes ] = '' if bytes.nonzero?
92
+ return @obuffer.length
93
+ end
94
+
95
+
96
+ ### Write a prompt to the user
97
+ def prompt
98
+ @obuffer << PROMPT
99
+ @server.reactor.enableEvents( @socket, :write )
100
+ end
101
+
102
+
103
+ ### Read at most MTU bytes from the socket and append them to the input
104
+ ### buffer. Split off any complete lines (one that end with EOL) and return
105
+ ### them as an Array of Strings.
106
+ def readInput
107
+ rary = []
108
+ @ibuffer << @socket.sysread( MTU )
109
+ $stderr.puts "Input buffer for user #{self} now: #@ibuffer" if $VERBOSE
110
+ while (( pos = @ibuffer.index EOL ))
111
+ $stderr.puts "Found terminating EOL. "\
112
+ "Splitting off 0..#{pos} of the input buffer." if $VERBOSE
113
+ rary << @ibuffer[ 0, pos ]
114
+ @ibuffer[ 0, pos + EOL.length ] = ''
115
+ end
116
+
117
+ return rary
118
+ rescue EOFError
119
+ @server.disconnectUser( self )
120
+ return []
121
+ end
122
+
123
+
124
+ ### Handle poll events on the socket
125
+ def handleIOEvent( io, event )
126
+ case event
127
+
128
+ when :error
129
+ @server.disconnectUser( self )
130
+
131
+ when :read
132
+ input = readInput()
133
+ @server.processInput( self, *input ) unless input.empty?
134
+
135
+ when :write
136
+ bytesLeft = writeOutput()
137
+ @server.reactor.disableEvents( @socket, :write ) if bytesLeft.zero?
138
+
139
+ end
140
+
141
+ end
142
+
143
+
144
+ ### Disconnect the user
145
+ def disconnect( msg='' )
146
+ @connected = false
147
+ unless msg.empty?
148
+ @obuffer = ">>> Disconnected: #{msg} <<<" + EOL
149
+ else
150
+ @obuffer = ">>> Disconnected <<<" + EOL
151
+ end
152
+ writeOutput()
153
+ @socket.close
154
+ end
155
+
156
+
157
+ ### Returns true if the user is still connected
158
+ def connected?
159
+ @connected
160
+ end
161
+ end # class User
162
+
163
+
164
+ ### Example chatserver class -- an extremely crude and simple chat server that
165
+ ### demonstrates how to use Poll to do multiplexing IO in a single thread.
166
+ class Server
167
+
168
+ BANNER = <<-EOF
169
+ [[ IO::Reactor Example Chatserver ]]
170
+ Commands: '/quit' to quit, '/shutdown' to shut the server down
171
+ EOF
172
+
173
+ ### Instantiate and return a chatserver on the specified host and port
174
+ def initialize( listenHost="0.0.0.0", listenPort=1138, interval=0.20 )
175
+ @socket = TCPServer::new( listenHost, listenPort )
176
+ @users = []
177
+ @reactor = IO::Reactor::new
178
+ @pollInterval = interval
179
+ @shuttingDown = false
180
+
181
+ @reactor.register @socket, :read, &method(:handlePollEvent)
182
+ end
183
+
184
+ # Server attributes
185
+ attr_reader :reactor, :users, :socket
186
+
187
+
188
+ ### Main server loop
189
+ def eventLoop
190
+ trap( "INT" ) { shutdown("Server caught SIGINT") }
191
+ trap( "TERM" ) { shutdown("Server caught SIGTERM") }
192
+ trap( "HUP" ) { disconnectAllUsers(">>> Server reset <<<") }
193
+
194
+ until @shuttingDown
195
+ eventCount = @reactor.poll( @pollInterval )
196
+ end
197
+
198
+ rescue StandardError => e
199
+ $stderr.puts "Error in server: #{e.message}"
200
+ $stderr.puts "\t" + e.backtrace.join( "\n\t" )
201
+ shutdown( "Server error: #{e.message}" )
202
+ rescue SignalException => e
203
+ shutdown( "Server caught #{e.type.name}" )
204
+ ensure
205
+ trap( "INT", "SIG_IGN" )
206
+ trap( "TERM", "SIG_IGN" )
207
+ trap( "HUP", "SIG_IGN" )
208
+
209
+ $stderr.puts "Server exiting event loop."
210
+ end
211
+
212
+
213
+ ### Handle a poll event specified by <tt>event</tt> on the specified
214
+ ### <tt>socket</tt>
215
+ def handlePollEvent( socket, event )
216
+ $stderr.puts "Got #{event.inspect} event for #{socket.inspect}"
217
+
218
+ case event
219
+ when :error
220
+ $stderr.puts "Socket error on the listener socket."
221
+ shutdown()
222
+
223
+ when :read
224
+ clSock = socket.accept
225
+ user = User::new( clSock, self )
226
+ $stderr.puts "Accepted connection from #{user}"
227
+ @reactor.register clSock, :read, &user.method(:handleIOEvent)
228
+ user.addOutput( BANNER )
229
+ user.prompt
230
+ broadcastMsg( "[New connection: #{user}]" )
231
+ @users << user
232
+
233
+ end
234
+ end
235
+
236
+
237
+ ### Process the specified input from the specified user
238
+ def processInput( user, *inputStrings )
239
+ inputStrings.each {|str|
240
+ case str
241
+
242
+ when %r{^/(\w+)\s*(.*)}
243
+ handleCommand( user, $1, $2 )
244
+
245
+ else
246
+ user.addOutput( "You>> #{str}" )
247
+ broadcastMsgFrom( user, str )
248
+ end
249
+ }
250
+
251
+ user.prompt if user.connected?
252
+ end
253
+
254
+
255
+ ### Handle the specified command from the specified user
256
+ def handleCommand( user, command, args )
257
+ case command
258
+
259
+ when /quit/
260
+ disconnectUser( user, 'Quit' )
261
+
262
+ when /shutdown/
263
+ shutdown()
264
+
265
+ when /who/
266
+ user.addOutput( self.wholist(user) )
267
+
268
+ else
269
+ user.addOutput("Unknown command '#{command}'")
270
+ end
271
+ end
272
+
273
+
274
+ ### Broadcast the specified message to all connected users
275
+ def broadcastMsg( msg )
276
+ @users.each {|cl|
277
+ cl.addOutput( msg )
278
+ }
279
+ end
280
+
281
+
282
+ ### Broadcast the specified message from the specified user
283
+ def broadcastMsgFrom( user, msg )
284
+ userDesc = user.to_s
285
+
286
+ @users.each {|cl|
287
+ next if cl == user
288
+ cl.addOutput( "#{userDesc}>> #{msg}" )
289
+ }
290
+ end
291
+
292
+
293
+ ### Disconnect the specified user
294
+ def disconnectUser( user, msg='' )
295
+ @users -= [ user ]
296
+ @reactor.unregister( user.socket )
297
+ user.disconnect( msg )
298
+ broadcastMsg( "#{user.to_s} Disconnected." )
299
+ end
300
+
301
+
302
+ ### Disconnect all connected users
303
+ def disconnectAllUsers( msg )
304
+ @users.each {|user|
305
+ @reactor.unregister( user.socket )
306
+ user.disconnect( msg )
307
+ }
308
+ @users.clear
309
+ end
310
+
311
+
312
+ ### Shut the server down
313
+ def shutdown( msg="Server shutdown" )
314
+ $stderr.puts "Shutting down: #{msg}"
315
+ @shuttingDown = true
316
+ @reactor.clear
317
+ begin
318
+ @socket.shutdown
319
+ rescue
320
+ end
321
+ disconnectAllUsers( msg )
322
+ begin
323
+ @socket.close
324
+ rescue
325
+ end
326
+ end
327
+
328
+ ### Build and return a list of connected users for the specified user.
329
+ def wholist( user )
330
+ rval = "[Connected Users]\n" <<
331
+ " *#{user}*\n"
332
+ @users.each {|u|
333
+ next if u == user
334
+ rval << " #{u}\n"
335
+ }
336
+
337
+ return rval
338
+ end
339
+
340
+ end # class Server
341
+ end # module Example
342
+
343
+ srv = Example::Server::new( *ARGV )
344
+ $stderr.puts "Chat server listening on #{srv.socket.addr[2]} port #{srv.socket.addr[1]}"
345
+ srv.eventLoop
346
+ $stderr.puts "Chat server finished."
347
+