facets 1.3.1 → 1.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (404) hide show
  1. data/CHANGELOG +7 -1
  2. data/ProjectInfo +4 -3
  3. data/data/facets/index.yml +1 -4
  4. data/lib/facet/gem/self/gemdir.rb +1 -0
  5. data/lib/facet/htmlbuilder.rb +1 -0
  6. data/lib/facet/htmlhelper.rb +1 -0
  7. data/lib/facet/xmlbuilder.rb +1 -0
  8. data/lib/facet/xmlhelper.rb +1 -0
  9. data/lib/facets/core/class/cattr.rb +25 -42
  10. data/lib/facets/core/gem.rb +1 -0
  11. data/lib/facets/core/gem/self/gemdir.rb +12 -0
  12. data/lib/facets/core/gem/self/gempath.rb +8 -2
  13. data/lib/facets/core/kernel/as.rb +3 -1
  14. data/lib/facets/core/module.rb +0 -4
  15. data/lib/facets/more/aspects.rb +29 -37
  16. data/lib/facets/more/basicobject.rb +69 -30
  17. data/lib/facets/more/builderobject.rb +41 -158
  18. data/lib/facets/more/downloader.rb +1 -1
  19. data/lib/facets/more/functor.rb +1 -0
  20. data/lib/facets/more/htmlbuilder.rb +83 -0
  21. data/lib/facets/more/htmlhelper.rb +9 -0
  22. data/lib/facets/more/multiton.rb +1 -4
  23. data/lib/facets/more/rexmlbuilder.rb +169 -13
  24. data/lib/facets/more/tuple.rb +3 -2
  25. data/lib/facets/more/xmlbuilder.rb +83 -0
  26. data/lib/facets/more/xmlhelper.rb +171 -0
  27. data/test/lib/facets/core/array/test_at_rand.rb +1 -1
  28. data/test/lib/facets/core/array/test_delete_unless.rb +1 -1
  29. data/test/lib/facets/core/array/test_delete_values.rb +1 -1
  30. data/test/lib/facets/core/array/test_delete_values_at.rb +1 -1
  31. data/test/lib/facets/core/array/test_first.rb +1 -1
  32. data/test/lib/facets/core/array/test_head.rb +1 -1
  33. data/test/lib/facets/core/array/test_last_index.rb +1 -1
  34. data/test/lib/facets/core/array/test_merge.rb +1 -1
  35. data/test/lib/facets/core/array/test_mid.rb +1 -1
  36. data/test/lib/facets/core/array/test_middle.rb +1 -1
  37. data/test/lib/facets/core/array/test_op_fetch.rb +1 -1
  38. data/test/lib/facets/core/array/test_op_store.rb +1 -1
  39. data/test/lib/facets/core/array/test_pick.rb +1 -1
  40. data/test/lib/facets/core/array/test_pos.rb +1 -1
  41. data/test/lib/facets/core/array/test_pot.rb +1 -1
  42. data/test/lib/facets/core/array/test_pull.rb +1 -1
  43. data/test/lib/facets/core/array/test_rand_index.rb +1 -1
  44. data/test/lib/facets/core/array/test_rand_subset.rb +1 -1
  45. data/test/lib/facets/core/array/test_range.rb +1 -1
  46. data/test/lib/facets/core/array/test_rotate.rb +1 -1
  47. data/test/lib/facets/core/array/test_select.rb +1 -1
  48. data/test/lib/facets/core/array/test_shuffle.rb +1 -1
  49. data/test/lib/facets/core/array/test_thru.rb +1 -1
  50. data/test/lib/facets/core/array/test_to_b.rb +1 -1
  51. data/test/lib/facets/core/array/test_to_h.rb +1 -1
  52. data/test/lib/facets/core/array/test_to_hash.rb +1 -1
  53. data/test/lib/facets/core/binding/self/test_of_caller.rb +1 -1
  54. data/test/lib/facets/core/binding/test___LINE__.rb +1 -1
  55. data/test/lib/facets/core/binding/test_call_stack.rb +1 -1
  56. data/test/lib/facets/core/binding/test_called.rb +1 -1
  57. data/test/lib/facets/core/binding/test_caller.rb +1 -1
  58. data/test/lib/facets/core/binding/test_defined.rb +1 -1
  59. data/test/lib/facets/core/binding/test_eval.rb +1 -1
  60. data/test/lib/facets/core/binding/test_local_variables.rb +1 -1
  61. data/test/lib/facets/core/binding/test_method_name.rb +1 -1
  62. data/test/lib/facets/core/binding/test_op_fetch.rb +1 -1
  63. data/test/lib/facets/core/binding/test_op_store.rb +1 -1
  64. data/test/lib/facets/core/binding/test_self.rb +1 -1
  65. data/test/lib/facets/core/class/test_cattr.rb +1 -1
  66. data/test/lib/facets/core/class/test_descendents.rb +1 -1
  67. data/test/lib/facets/core/class/test_method_name.rb +1 -1
  68. data/test/lib/facets/core/class/test_remove_descendents.rb +1 -1
  69. data/test/lib/facets/core/class/test_unix_path.rb +1 -1
  70. data/test/lib/facets/core/comparable/test_at_least.rb +1 -1
  71. data/test/lib/facets/core/comparable/test_clip.rb +1 -1
  72. data/test/lib/facets/core/comparable/test_cmp.rb +1 -1
  73. data/test/lib/facets/core/continuation/self/test_create.rb +1 -1
  74. data/test/lib/facets/core/date/test_days_in_month.rb +1 -1
  75. data/test/lib/facets/core/date/test_days_of_month.rb +1 -1
  76. data/test/lib/facets/core/date/test_stamp.rb +1 -1
  77. data/test/lib/facets/core/date/test_to_date.rb +1 -1
  78. data/test/lib/facets/core/date/test_to_s.rb +1 -1
  79. data/test/lib/facets/core/date/test_to_time.rb +1 -1
  80. data/test/lib/facets/core/dir/self/test_ancestor.rb +1 -1
  81. data/test/lib/facets/core/dir/self/test_ascend.rb +1 -1
  82. data/test/lib/facets/core/enumerable/self/test_combinations.rb +1 -1
  83. data/test/lib/facets/core/enumerable/self/test_cross.rb +1 -1
  84. data/test/lib/facets/core/enumerable/test_collect_with_index.rb +1 -1
  85. data/test/lib/facets/core/enumerable/test_commonality.rb +1 -1
  86. data/test/lib/facets/core/enumerable/test_compact_collect.rb +1 -1
  87. data/test/lib/facets/core/enumerable/test_cross.rb +1 -1
  88. data/test/lib/facets/core/enumerable/test_each_combination.rb +1 -1
  89. data/test/lib/facets/core/enumerable/test_each_pair.rb +1 -1
  90. data/test/lib/facets/core/enumerable/test_each_slice.rb +1 -1
  91. data/test/lib/facets/core/enumerable/test_each_unique_pair.rb +1 -1
  92. data/test/lib/facets/core/enumerable/test_entropy.rb +1 -1
  93. data/test/lib/facets/core/enumerable/test_every.rb +1 -1
  94. data/test/lib/facets/core/enumerable/test_ew.rb +1 -1
  95. data/test/lib/facets/core/enumerable/test_filter_collect.rb +1 -1
  96. data/test/lib/facets/core/enumerable/test_find_collisions.rb +1 -1
  97. data/test/lib/facets/core/enumerable/test_frequency.rb +1 -1
  98. data/test/lib/facets/core/enumerable/test_graph.rb +1 -1
  99. data/test/lib/facets/core/enumerable/test_ideal_entropy.rb +1 -1
  100. data/test/lib/facets/core/enumerable/test_none.rb +1 -1
  101. data/test/lib/facets/core/enumerable/test_occur.rb +1 -1
  102. data/test/lib/facets/core/enumerable/test_one.rb +1 -1
  103. data/test/lib/facets/core/enumerable/test_op_pow.rb +1 -1
  104. data/test/lib/facets/core/enumerable/test_partition_by.rb +1 -1
  105. data/test/lib/facets/core/enumerable/test_permute.rb +1 -1
  106. data/test/lib/facets/core/enumerable/test_probability.rb +1 -1
  107. data/test/lib/facets/core/enumerable/test_to_h.rb +1 -1
  108. data/test/lib/facets/core/enumerable/test_uniq_by.rb +1 -1
  109. data/test/lib/facets/core/file/self/test_create.rb +1 -1
  110. data/test/lib/facets/core/file/self/test_open_as_string.rb +1 -1
  111. data/test/lib/facets/core/file/self/test_read_list.rb +1 -1
  112. data/test/lib/facets/core/file/self/test_sanitize.rb +1 -1
  113. data/test/lib/facets/core/file/self/test_split_all.rb +1 -1
  114. data/test/lib/facets/core/float/test_round_at.rb +1 -1
  115. data/test/lib/facets/core/float/test_round_to.rb +1 -1
  116. data/test/lib/facets/core/hash/self/test_zipnew.rb +1 -1
  117. data/test/lib/facets/core/hash/test_alias.rb +1 -1
  118. data/test/lib/facets/core/hash/test_assert_has_keys.rb +1 -1
  119. data/test/lib/facets/core/hash/test_assert_has_only_keys.rb +1 -1
  120. data/test/lib/facets/core/hash/test_at.rb +1 -1
  121. data/test/lib/facets/core/hash/test_collate.rb +1 -1
  122. data/test/lib/facets/core/hash/test_each.rb +1 -1
  123. data/test/lib/facets/core/hash/test_each_with_index.rb +1 -1
  124. data/test/lib/facets/core/hash/test_each_with_key.rb +1 -1
  125. data/test/lib/facets/core/hash/test_graph.rb +1 -1
  126. data/test/lib/facets/core/hash/test_has_keys.rb +1 -1
  127. data/test/lib/facets/core/hash/test_has_only_keys.rb +1 -1
  128. data/test/lib/facets/core/hash/test_inverse.rb +1 -1
  129. data/test/lib/facets/core/hash/test_keys_to_s.rb +1 -1
  130. data/test/lib/facets/core/hash/test_keys_to_sym.rb +1 -1
  131. data/test/lib/facets/core/hash/test_op_fetch.rb +1 -1
  132. data/test/lib/facets/core/hash/test_op_lshift.rb +1 -1
  133. data/test/lib/facets/core/hash/test_rand_key.rb +1 -1
  134. data/test/lib/facets/core/hash/test_rand_pair.rb +1 -1
  135. data/test/lib/facets/core/hash/test_rand_value.rb +1 -1
  136. data/test/lib/facets/core/hash/test_replace_each.rb +1 -1
  137. data/test/lib/facets/core/hash/test_shuffle.rb +1 -1
  138. data/test/lib/facets/core/hash/test_slice.rb +1 -1
  139. data/test/lib/facets/core/hash/test_swap.rb +1 -1
  140. data/test/lib/facets/core/hash/test_swapkey.rb +1 -1
  141. data/test/lib/facets/core/hash/test_to_h.rb +1 -1
  142. data/test/lib/facets/core/hash/test_to_ostruct.rb +1 -1
  143. data/test/lib/facets/core/hash/test_to_ostruct_recurse.rb +1 -1
  144. data/test/lib/facets/core/hash/test_traverse.rb +1 -1
  145. data/test/lib/facets/core/hash/test_update_each.rb +1 -1
  146. data/test/lib/facets/core/hash/test_update_keys.rb +1 -1
  147. data/test/lib/facets/core/hash/test_update_values.rb +1 -1
  148. data/test/lib/facets/core/hash/test_weave.rb +1 -1
  149. data/test/lib/facets/core/integer/test_factorial.rb +1 -1
  150. data/test/lib/facets/core/integer/test_multiple.rb +1 -1
  151. data/test/lib/facets/core/integer/test_ordinal.rb +1 -1
  152. data/test/lib/facets/core/integer/test_times_collect.rb +1 -1
  153. data/test/lib/facets/core/kernel/test___class__.rb +1 -1
  154. data/test/lib/facets/core/kernel/test_as.rb +1 -1
  155. data/test/lib/facets/core/kernel/test_assign_from.rb +1 -1
  156. data/test/lib/facets/core/kernel/test_assign_with.rb +1 -1
  157. data/test/lib/facets/core/kernel/test_bool.rb +1 -1
  158. data/test/lib/facets/core/kernel/test_bug.rb +1 -1
  159. data/test/lib/facets/core/kernel/test_call_stack.rb +1 -1
  160. data/test/lib/facets/core/kernel/test_called.rb +1 -1
  161. data/test/lib/facets/core/kernel/test_constant.rb +1 -1
  162. data/test/lib/facets/core/kernel/test_copy.rb +1 -1
  163. data/test/lib/facets/core/kernel/test_deep_copy.rb +1 -1
  164. data/test/lib/facets/core/kernel/test_demo.rb +1 -1
  165. data/test/lib/facets/core/kernel/test_fn.rb +1 -1
  166. data/test/lib/facets/core/kernel/test_generate_method_name.rb +1 -1
  167. data/test/lib/facets/core/kernel/test_get_by_id.rb +1 -1
  168. data/test/lib/facets/core/kernel/test_here.rb +1 -1
  169. data/test/lib/facets/core/kernel/test_in.rb +1 -1
  170. data/test/lib/facets/core/kernel/test_maybe.rb +1 -1
  171. data/test/lib/facets/core/kernel/test_metaclass.rb +1 -1
  172. data/test/lib/facets/core/kernel/test_method.rb +1 -1
  173. data/test/lib/facets/core/kernel/test_methodname.rb +1 -1
  174. data/test/lib/facets/core/kernel/test_methods.rb +1 -1
  175. data/test/lib/facets/core/kernel/test_new.rb +1 -1
  176. data/test/lib/facets/core/kernel/test_object_class.rb +1 -1
  177. data/test/lib/facets/core/kernel/test_object_hexid.rb +1 -1
  178. data/test/lib/facets/core/kernel/test_require_all.rb +1 -1
  179. data/test/lib/facets/core/kernel/test_require_esc.rb +1 -1
  180. data/test/lib/facets/core/kernel/test_require_facet.rb +1 -1
  181. data/test/lib/facets/core/kernel/test_resc.rb +1 -1
  182. data/test/lib/facets/core/kernel/test_returning.rb +1 -1
  183. data/test/lib/facets/core/kernel/test_send_as.rb +1 -1
  184. data/test/lib/facets/core/kernel/test_set_from.rb +1 -1
  185. data/test/lib/facets/core/kernel/test_set_with.rb +1 -1
  186. data/test/lib/facets/core/kernel/test_silently.rb +1 -1
  187. data/test/lib/facets/core/kernel/test_singleton.rb +1 -1
  188. data/test/lib/facets/core/kernel/test_superior.rb +1 -1
  189. data/test/lib/facets/core/kernel/test_supermethod.rb +1 -1
  190. data/test/lib/facets/core/kernel/test_this.rb +1 -1
  191. data/test/lib/facets/core/kernel/test_to_b.rb +1 -1
  192. data/test/lib/facets/core/kernel/test_to_bool.rb +1 -1
  193. data/test/lib/facets/core/kernel/test_uri.rb +1 -1
  194. data/test/lib/facets/core/kernel/test_val.rb +1 -1
  195. data/test/lib/facets/core/kernel/test_with_accessor.rb +1 -1
  196. data/test/lib/facets/core/matchdata/test_match.rb +1 -1
  197. data/test/lib/facets/core/matchdata/test_matchtree.rb +1 -1
  198. data/test/lib/facets/core/module/test_abstract.rb +1 -1
  199. data/test/lib/facets/core/module/test_alias_module_function.rb +1 -1
  200. data/test/lib/facets/core/module/test_ancestor.rb +1 -1
  201. data/test/lib/facets/core/module/test_basename.rb +1 -1
  202. data/test/lib/facets/core/module/test_by_name.rb +1 -1
  203. data/test/lib/facets/core/module/test_clone_using.rb +1 -1
  204. data/test/lib/facets/core/module/test_dirname.rb +1 -1
  205. data/test/lib/facets/core/module/test_equate_on.rb +1 -1
  206. data/test/lib/facets/core/module/test_generate_instance_method_name.rb +1 -1
  207. data/test/lib/facets/core/module/test_include_as.rb +1 -1
  208. data/test/lib/facets/core/module/test_inherit.rb +1 -1
  209. data/test/lib/facets/core/module/test_initializer.rb +1 -1
  210. data/test/lib/facets/core/module/test_instance_methods.rb +1 -1
  211. data/test/lib/facets/core/module/test_integrate.rb +1 -1
  212. data/test/lib/facets/core/module/test_memoize.rb +1 -1
  213. data/test/lib/facets/core/module/test_modspace.rb +1 -1
  214. data/test/lib/facets/core/module/test_namespace.rb +1 -1
  215. data/test/lib/facets/core/module/test_nesting.rb +1 -1
  216. data/test/lib/facets/core/module/test_on_included.rb +1 -1
  217. data/test/lib/facets/core/module/test_redef.rb +1 -1
  218. data/test/lib/facets/core/module/test_redefine_method.rb +1 -1
  219. data/test/lib/facets/core/module/test_redirect.rb +1 -1
  220. data/test/lib/facets/core/module/test_redirect_method.rb +1 -1
  221. data/test/lib/facets/core/module/test_remove.rb +1 -1
  222. data/test/lib/facets/core/module/test_rename.rb +1 -1
  223. data/test/lib/facets/core/module/test_rename_method.rb +1 -1
  224. data/test/lib/facets/core/module/test_revisal.rb +1 -1
  225. data/test/lib/facets/core/module/test_shadow_method.rb +1 -1
  226. data/test/lib/facets/core/module/test_sort_on.rb +1 -1
  227. data/test/lib/facets/core/module/test_this.rb +1 -1
  228. data/test/lib/facets/core/module/test_undef.rb +1 -1
  229. data/test/lib/facets/core/module/test_wrap.rb +1 -1
  230. data/test/lib/facets/core/module/test_wrap_method.rb +1 -1
  231. data/test/lib/facets/core/nilclass/test_blank.rb +1 -1
  232. data/test/lib/facets/core/nilclass/test_empty.rb +1 -1
  233. data/test/lib/facets/core/nilclass/test_include.rb +1 -1
  234. data/test/lib/facets/core/nilclass/test_op_fetch.rb +1 -1
  235. data/test/lib/facets/core/nilclass/test_size.rb +1 -1
  236. data/test/lib/facets/core/nilclass/test_to_h.rb +1 -1
  237. data/test/lib/facets/core/numeric/test_approx.rb +1 -1
  238. data/test/lib/facets/core/numeric/test_ceil_multiple.rb +1 -1
  239. data/test/lib/facets/core/numeric/test_succ.rb +1 -1
  240. data/test/lib/facets/core/numeric/test_to_b.rb +1 -1
  241. data/test/lib/facets/core/ostruct/test___merge__.rb +1 -1
  242. data/test/lib/facets/core/ostruct/test___update__.rb +1 -1
  243. data/test/lib/facets/core/ostruct/test_op_fetch.rb +1 -1
  244. data/test/lib/facets/core/ostruct/test_op_store.rb +1 -1
  245. data/test/lib/facets/core/proc/test_compose.rb +1 -1
  246. data/test/lib/facets/core/proc/test_to_method.rb +1 -1
  247. data/test/lib/facets/core/range/test_to_r.rb +1 -1
  248. data/test/lib/facets/core/range/test_to_range.rb +1 -1
  249. data/test/lib/facets/core/range/test_umbrella.rb +1 -1
  250. data/test/lib/facets/core/range/test_within.rb +1 -1
  251. data/test/lib/facets/core/regexp/test_arity.rb +1 -1
  252. data/test/lib/facets/core/regexp/test_to_re.rb +1 -1
  253. data/test/lib/facets/core/regexp/test_to_regexp.rb +1 -1
  254. data/test/lib/facets/core/string/self/test_interpolate.rb +1 -1
  255. data/test/lib/facets/core/string/self/test_patterns.rb +1 -1
  256. data/test/lib/facets/core/string/self/test_rand_letter.rb +1 -1
  257. data/test/lib/facets/core/string/test_align_center.rb +1 -1
  258. data/test/lib/facets/core/string/test_at_rand.rb +1 -1
  259. data/test/lib/facets/core/string/test_basename.rb +1 -1
  260. data/test/lib/facets/core/string/test_blank.rb +1 -1
  261. data/test/lib/facets/core/string/test_bracket.rb +1 -1
  262. data/test/lib/facets/core/string/test_camelcase.rb +1 -1
  263. data/test/lib/facets/core/string/test_camelize.rb +1 -1
  264. data/test/lib/facets/core/string/test_capitalized.rb +1 -1
  265. data/test/lib/facets/core/string/test_chars.rb +1 -1
  266. data/test/lib/facets/core/string/test_cmp.rb +1 -1
  267. data/test/lib/facets/core/string/test_demodulize.rb +1 -1
  268. data/test/lib/facets/core/string/test_downcase.rb +1 -1
  269. data/test/lib/facets/core/string/test_dresner.rb +1 -1
  270. data/test/lib/facets/core/string/test_each_char.rb +1 -1
  271. data/test/lib/facets/core/string/test_each_word.rb +1 -1
  272. data/test/lib/facets/core/string/test_first.rb +1 -1
  273. data/test/lib/facets/core/string/test_fold.rb +1 -1
  274. data/test/lib/facets/core/string/test_frequency.rb +1 -1
  275. data/test/lib/facets/core/string/test_humanize.rb +1 -1
  276. data/test/lib/facets/core/string/test_indent.rb +1 -1
  277. data/test/lib/facets/core/string/test_index_all.rb +1 -1
  278. data/test/lib/facets/core/string/test_last.rb +1 -1
  279. data/test/lib/facets/core/string/test_line_wrap.rb +1 -1
  280. data/test/lib/facets/core/string/test_lines.rb +1 -1
  281. data/test/lib/facets/core/string/test_lowercase.rb +1 -1
  282. data/test/lib/facets/core/string/test_margin.rb +1 -1
  283. data/test/lib/facets/core/string/test_methodize.rb +1 -1
  284. data/test/lib/facets/core/string/test_modulize.rb +1 -1
  285. data/test/lib/facets/core/string/test_mscan.rb +1 -1
  286. data/test/lib/facets/core/string/test_natcmp.rb +1 -1
  287. data/test/lib/facets/core/string/test_nchar.rb +1 -1
  288. data/test/lib/facets/core/string/test_pathize.rb +1 -1
  289. data/test/lib/facets/core/string/test_pop.rb +1 -1
  290. data/test/lib/facets/core/string/test_pot.rb +1 -1
  291. data/test/lib/facets/core/string/test_probability.rb +1 -1
  292. data/test/lib/facets/core/string/test_push.rb +1 -1
  293. data/test/lib/facets/core/string/test_quote.rb +1 -1
  294. data/test/lib/facets/core/string/test_rand_byte.rb +1 -1
  295. data/test/lib/facets/core/string/test_rand_index.rb +1 -1
  296. data/test/lib/facets/core/string/test_range.rb +1 -1
  297. data/test/lib/facets/core/string/test_range_all.rb +1 -1
  298. data/test/lib/facets/core/string/test_range_of_line.rb +1 -1
  299. data/test/lib/facets/core/string/test_regesc.rb +1 -1
  300. data/test/lib/facets/core/string/test_shatter.rb +1 -1
  301. data/test/lib/facets/core/string/test_shift.rb +1 -1
  302. data/test/lib/facets/core/string/test_shuffle.rb +1 -1
  303. data/test/lib/facets/core/string/test_similarity.rb +1 -1
  304. data/test/lib/facets/core/string/test_singular.rb +1 -1
  305. data/test/lib/facets/core/string/test_soundex.rb +1 -1
  306. data/test/lib/facets/core/string/test_succ.rb +1 -1
  307. data/test/lib/facets/core/string/test_to_a.rb +1 -1
  308. data/test/lib/facets/core/string/test_to_b.rb +1 -1
  309. data/test/lib/facets/core/string/test_to_const.rb +1 -1
  310. data/test/lib/facets/core/string/test_to_date.rb +1 -1
  311. data/test/lib/facets/core/string/test_to_proc.rb +1 -1
  312. data/test/lib/facets/core/string/test_to_re.rb +1 -1
  313. data/test/lib/facets/core/string/test_to_time.rb +1 -1
  314. data/test/lib/facets/core/string/test_unix_crypt.rb +1 -1
  315. data/test/lib/facets/core/string/test_unpack.rb +1 -1
  316. data/test/lib/facets/core/string/test_unshift.rb +1 -1
  317. data/test/lib/facets/core/string/test_upcase.rb +1 -1
  318. data/test/lib/facets/core/string/test_whitespace.rb +1 -1
  319. data/test/lib/facets/core/string/test_word_filter.rb +1 -1
  320. data/test/lib/facets/core/string/test_word_wrap.rb +1 -1
  321. data/test/lib/facets/core/string/test_words.rb +1 -1
  322. data/test/lib/facets/core/symbol/test_camelcase.rb +1 -1
  323. data/test/lib/facets/core/symbol/test_camelize.rb +1 -1
  324. data/test/lib/facets/core/symbol/test_capitalize.rb +1 -1
  325. data/test/lib/facets/core/symbol/test_capitalized.rb +1 -1
  326. data/test/lib/facets/core/symbol/test_downcase.rb +1 -1
  327. data/test/lib/facets/core/symbol/test_not.rb +1 -1
  328. data/test/lib/facets/core/symbol/test_pad.rb +1 -1
  329. data/test/lib/facets/core/symbol/test_succ.rb +1 -1
  330. data/test/lib/facets/core/symbol/test_to_const.rb +1 -1
  331. data/test/lib/facets/core/symbol/test_to_proc.rb +1 -1
  332. data/test/lib/facets/core/symbol/test_to_str.rb +1 -1
  333. data/test/lib/facets/core/symbol/test_underscore.rb +1 -1
  334. data/test/lib/facets/core/symbol/test_upcase.rb +1 -1
  335. data/test/lib/facets/core/time/test_change.rb +1 -1
  336. data/test/lib/facets/core/time/test_elapse.rb +1 -1
  337. data/test/lib/facets/core/time/test_stamp.rb +1 -1
  338. data/test/lib/facets/core/time/test_to_date.rb +1 -1
  339. data/test/lib/facets/core/time/test_to_s.rb +1 -1
  340. data/test/lib/facets/core/time/test_to_time.rb +1 -1
  341. data/test/lib/facets/more/test_annotation.rb +1 -1
  342. data/test/lib/facets/more/test_ansicode.rb +1 -1
  343. data/test/lib/facets/more/test_association.rb +1 -1
  344. data/test/lib/facets/more/test_basicobject.rb +1 -1
  345. data/test/lib/facets/more/test_bbcode.rb +1 -1
  346. data/test/lib/facets/more/test_bitmask.rb +1 -1
  347. data/test/lib/facets/more/test_bytes.rb +1 -1
  348. data/test/lib/facets/more/test_classinherit.rb +1 -1
  349. data/test/lib/facets/more/test_classmethods.rb +1 -1
  350. data/test/lib/facets/more/test_coroutine.rb +1 -1
  351. data/test/lib/facets/more/test_crypt.rb +1 -1
  352. data/test/lib/facets/more/test_dictionary.rb +1 -1
  353. data/test/lib/facets/more/test_elementor.rb +1 -1
  354. data/test/lib/facets/more/test_enumerablepass.rb +1 -1
  355. data/test/lib/facets/more/test_floatstring.rb +1 -1
  356. data/test/lib/facets/more/test_functor.rb +1 -1
  357. data/test/lib/facets/more/test_htmlbuilder.rb +38 -0
  358. data/test/lib/facets/more/test_inheritor.rb +1 -1
  359. data/test/lib/facets/more/test_interval.rb +1 -1
  360. data/test/lib/facets/more/test_json.rb +1 -1
  361. data/test/lib/facets/more/test_lisp.rb +1 -1
  362. data/test/lib/facets/more/test_lisp_format.rb +1 -1
  363. data/test/lib/facets/more/test_lrucache.rb +1 -1
  364. data/test/lib/facets/more/test_mathconstants.rb +1 -1
  365. data/test/lib/facets/more/test_methodprobe.rb +1 -1
  366. data/test/lib/facets/more/test_multipliers.rb +1 -1
  367. data/test/lib/facets/more/test_multiton.rb +1 -2
  368. data/test/lib/facets/more/test_nackclass.rb +1 -1
  369. data/test/lib/facets/more/test_nilcomparable.rb +1 -1
  370. data/test/lib/facets/more/test_openobject.rb +1 -1
  371. data/test/lib/facets/more/test_overload.rb +1 -1
  372. data/test/lib/facets/more/test_paramix.rb +1 -1
  373. data/test/lib/facets/more/test_preinitialize.rb +1 -1
  374. data/test/lib/facets/more/test_promoteself.rb +1 -1
  375. data/test/lib/facets/more/test_recorder.rb +1 -1
  376. data/test/lib/facets/more/test_snapshot.rb +1 -1
  377. data/test/lib/facets/more/test_statichash.rb +1 -1
  378. data/test/lib/facets/more/test_syncarray.rb +1 -1
  379. data/test/lib/facets/more/test_synchash.rb +1 -1
  380. data/test/lib/facets/more/test_tagiterator.rb +1 -1
  381. data/test/lib/facets/more/test_timer.rb +1 -1
  382. data/test/lib/facets/more/test_times.rb +1 -1
  383. data/test/lib/facets/more/test_tuple.rb +1 -1
  384. data/test/lib/facets/more/test_typecast.rb +1 -1
  385. data/test/lib/facets/more/test_uninheritable.rb +1 -1
  386. data/test/lib/facets/more/test_units.rb +1 -1
  387. data/test/lib/facets/more/test_xmlbuilder.rb +38 -0
  388. data/test/lib/facets/more/test_xmlhelper.rb +40 -0
  389. data/test/lib/facets/more/test_xoxo.rb +1 -1
  390. data/test/lib/facets/more/test_yamlstruct.rb +1 -1
  391. metadata +17 -17
  392. data/lib/facet/module/mattr.rb +0 -1
  393. data/lib/facet/module/mattr_accessor.rb +0 -1
  394. data/lib/facet/module/mattr_reader.rb +0 -1
  395. data/lib/facet/module/mattr_writer.rb +0 -1
  396. data/lib/facets/core/module/mattr.rb +0 -180
  397. data/lib/facets/core/module/mattr_accessor.rb +0 -2
  398. data/lib/facets/core/module/mattr_reader.rb +0 -2
  399. data/lib/facets/core/module/mattr_writer.rb +0 -2
  400. data/test/lib/facets/core/array/test_slap.rb +0 -28
  401. data/test/lib/facets/core/module/test_let.rb +0 -31
  402. data/test/lib/facets/core/module/test_mattr.rb +0 -71
  403. data/test/lib/facets/core/string/test_slap.rb +0 -40
  404. data/test/lib/facets/core/string/test_to_arr.rb +0 -26
data/CHANGELOG CHANGED
@@ -3,10 +3,16 @@
3
3
  == 1.3.1
4
4
  * Deprecated string/to_arr, and slightly adjusted string#to_a.
5
5
  (Not commonly used so not a major change.)
6
+ * Minor bug fixes.
6
7
 
7
8
  == 1.3.0
9
+ * Ported parts of Nitro's Glue library to Facets.
10
+ * more/aspects.rb
11
+ * core/module/on_included.rb
12
+ * core/module/expirable.rb
13
+ * core/enumerable/accumulate.rb
8
14
  * Added xoxo.rb, json.rb and rtals.rb.
9
- * Minor bug fixes.
15
+ * Repaired missing data files for units.rb.
10
16
  * Moved cattr methods from module/ to class/.
11
17
  * mattr methods are in limbo at the moment.
12
18
  (They were aliases for cattr.)
@@ -2,8 +2,8 @@
2
2
 
3
3
  title : Facets
4
4
  name : facets
5
- version : '1.3.1'
6
- date : '2006-04-17'
5
+ version : '1.3.2'
6
+ #date : '2006-04-17'
7
7
  status : Beta/Stable
8
8
 
9
9
  author : Thomas Sawyer
@@ -43,7 +43,7 @@ package:
43
43
  - web
44
44
  - note
45
45
 
46
- testext:
46
+ extest:
47
47
  files: 'lib/facets/**/*.rb'
48
48
 
49
49
  rdoc:
@@ -81,4 +81,5 @@ announce:
81
81
  links:
82
82
  - http://facets.rubyforge.org
83
83
 
84
+ install: ~
84
85
 
@@ -92,10 +92,6 @@ module:
92
92
  - instance_methods
93
93
  - integrate
94
94
  - is
95
- - mattr
96
- - mattr_accessor
97
- - mattr_reader
98
- - mattr_writer
99
95
  - memoize
100
96
  - modspace
101
97
  - namespace
@@ -223,6 +219,7 @@ date:
223
219
  - to_time
224
220
  gem:
225
221
  - self/active
222
+ - self/gemdir
226
223
  - self/gempath
227
224
  - self/gemspec
228
225
  proc:
@@ -0,0 +1 @@
1
+ require 'facets/core/gem/self/gemdir.rb'
@@ -0,0 +1 @@
1
+ require 'facets/more/htmlbuilder.rb'
@@ -0,0 +1 @@
1
+ require 'facets/more/htmlhelper.rb'
@@ -0,0 +1 @@
1
+ require 'facets/more/xmlbuilder.rb'
@@ -0,0 +1 @@
1
+ require 'facets/more/xmlhelper.rb'
@@ -1,37 +1,27 @@
1
1
  #--
2
- # Original credit goes to DHH.
2
+ # Credit for original goes to David Heinemeier Hansson.
3
3
  #++
4
4
 
5
- class Module
5
+ class Class
6
6
 
7
7
  # Creates a class-variable attribute that can
8
8
  # be accessed both on an instance and class level.
9
9
  #
10
- # NOTE mattr used to be an alias for cattr,
11
- # and likewise for the other cattr methods.
12
- # These aliases have been deprecated in favor of
13
- # new module/mattr methods that use class-level
14
- # instance variables instead of class variables.
15
- # The mattr methods are more versitile.
10
+ # NOTE These used to be a Module methods. But turns out
11
+ # these to work as expected when included. The class-level
12
+ # method is not carried along. So the are now just class
13
+ # methods. Accordingly, #mattr will eventually be deprecated
14
+ # so use #cattr instead.
16
15
 
17
16
  def cattr( *syms )
18
- writer = false
19
- syms.reject! do |s|
20
- case s
21
- when TrueClass
22
- writer = true
23
- when FalseClass, NilClass
24
- true
25
- else
26
- false
27
- end
28
- end
29
- if writer
30
- cattr_accessor( *syms )
31
- else
32
- cattr_reader( *syms )
33
- end
17
+ accessors, readers = syms.flatten.partition { |a| a.to_s =~ /=$/ }
18
+ writers = accessors.collect{ |e| e.to_s.chomp('=').to_sym }
19
+ readers.concat( writers )
20
+ cattr_writer( *writers )
21
+ cattr_reader( *readers )
22
+ return readers + accessors
34
23
  end
24
+ alias_method :mattr, :cattr # deprecate
35
25
 
36
26
  # Creates a class-variable attr_reader that can
37
27
  # be accessed both on an instance and class level.
@@ -45,23 +35,19 @@ class Module
45
35
  # MyClass.new.a #=> 10
46
36
  #
47
37
  def cattr_reader( *syms )
48
- hsyms = ( syms.last.is_a?(Hash) ? syms.pop : {} )
49
- hsyms.update( Hash[*(syms.zip([nil]*syms.size).flatten)] )
50
- hsyms.each_pair do |sym, val|
51
- class_eval <<-EOS
52
- if ! defined? @@#{sym}
53
- @@#{sym} = val
54
- end
38
+ syms.flatten.each do |sym|
39
+ class_eval(<<-EOS, __FILE__, __LINE__)
55
40
  def self.#{sym}
56
41
  @@#{sym}
57
42
  end
58
43
  def #{sym}
59
- self.class.#{sym}
44
+ @@#{sym}
60
45
  end
61
46
  EOS
62
47
  end
63
- return hsyms.keys
48
+ return syms
64
49
  end
50
+ alias_method :mattr_reader, :cattr_reader # deprecate
65
51
 
66
52
  # Creates a class-variable attr_writer that can
67
53
  # be accessed both on an instance and class level.
@@ -79,23 +65,19 @@ class Module
79
65
  # MyClass.a #=> 29
80
66
  #
81
67
  def cattr_writer(*syms)
82
- hsyms = ( syms.last.is_a?(Hash) ? syms.pop : {} )
83
- hsyms.update( Hash[*(syms.zip([nil]*syms.size).flatten)] )
84
- hsyms.each_pair do |sym, val|
85
- class_eval <<-EOS
86
- if ! defined? @@#{sym}
87
- @@#{sym} = val
88
- end
68
+ syms.flatten.each do |sym|
69
+ class_eval(<<-EOS, __FILE__, __LINE__)
89
70
  def self.#{sym}=(obj)
90
71
  @@#{sym} = obj
91
72
  end
92
73
  def #{sym}=(obj)
93
- self.class.#{sym}=(obj)
74
+ @@#{sym}=(obj)
94
75
  end
95
76
  EOS
96
77
  end
97
- return hsyms.keys
78
+ return syms
98
79
  end
80
+ alias_method :mattr_writer, :cattr_writer # deprecate
99
81
 
100
82
  # Creates a class-variable attr_accessor that can
101
83
  # be accessed both on an instance and class level.
@@ -115,6 +97,7 @@ class Module
115
97
  m.concat( cattr_writer(*syms) )
116
98
  m
117
99
  end
100
+ alias_method :mattr_accessor, :cattr_accessor # deprecate
118
101
 
119
102
  end
120
103
 
@@ -1,3 +1,4 @@
1
1
  require 'facets/core/gem/self/active'
2
+ require 'facets/core/gem/self/gemdir'
2
3
  require 'facets/core/gem/self/gempath'
3
4
  require 'facets/core/gem/self/gemspec'
@@ -0,0 +1,12 @@
1
+ require 'Facets/core/gem/self/gempath'
2
+
3
+ module Gem
4
+
5
+ def gemdir(gemname, dir)
6
+ if active?(gemname)
7
+ File.join(gempath, dir)
8
+ end
9
+ end
10
+
11
+ end
12
+
@@ -3,8 +3,14 @@ require 'facet/gem/self/active'
3
3
 
4
4
  module Gem
5
5
 
6
- def self.gempath(gemname)
7
- @loaded_specs[gemname].full_gem_path if active?(gemname)
6
+ def self.gempath(gemname, subdir=nil)
7
+ if active?(gemname)
8
+ if subdir
9
+ File.join( @loaded_specs[gemname].full_gem_path, subdir )
10
+ else
11
+ @loaded_specs[gemname].full_gem_path
12
+ end
13
+ end
8
14
  end
9
15
 
10
16
  end
@@ -19,7 +19,7 @@ module Kernel
19
19
  #
20
20
  # C.new.x #=> 1
21
21
  #
22
- def as( klass=nil, &blk )
22
+ def __as__( klass=nil, &blk )
23
23
  selfclass = Kernel.instance_method(:class).bind(self).call
24
24
  klass ||= selfclass.superclass
25
25
  if selfclass.ancestors.include?(klass)
@@ -31,6 +31,8 @@ module Kernel
31
31
  end
32
32
  end
33
33
 
34
+ alias_method :as, :__as__
35
+
34
36
  =begin :nodoc:
35
37
  def as( role, &blk )
36
38
  unless role.is_a?(Class)
@@ -20,10 +20,6 @@ require 'facets/core/module/initializer'
20
20
  require 'facets/core/module/instance_methods'
21
21
  require 'facets/core/module/integrate'
22
22
  require 'facets/core/module/is'
23
- require 'facets/core/module/mattr'
24
- require 'facets/core/module/mattr_accessor'
25
- require 'facets/core/module/mattr_reader'
26
- require 'facets/core/module/mattr_writer'
27
23
  require 'facets/core/module/memoize'
28
24
  require 'facets/core/module/modspace'
29
25
  require 'facets/core/module/namespace'
@@ -1,7 +1,5 @@
1
1
  require 'facet/inheritor'
2
2
 
3
- module Glue
4
-
5
3
  # An Aspect is a class that defines advices.
6
4
 
7
5
  class Aspect
@@ -30,7 +28,7 @@ end
30
28
  # wrap Benchmark, :on => :index
31
29
  # post :taraa, :on => login
32
30
  # end
33
- #
31
+ #
34
32
  # module Timestamped
35
33
  # pre :on => :og_insert { |this| this.create_time = Time.now }
36
34
  # pre :on => :og_update { |this| this.update_time = Time.now }
@@ -48,12 +46,12 @@ module Aspects
48
46
 
49
47
  def self.wrap(target, methods = target.instance_methods)
50
48
  include_advice_modules(target)
51
-
49
+
52
50
  for m in [methods].flatten
53
51
  args = []
54
52
  target.instance_method(m).arity.times { |i| args << "a#{i}" }
55
53
  args = args.join(',')
56
-
54
+
57
55
  target.module_eval <<-end_eval, __FILE__, __LINE__
58
56
  alias_method :__unwrapped_#{m}, :#{m}
59
57
  def #{m}(#{args})
@@ -74,11 +72,11 @@ module Aspects
74
72
  def self.include_advice_modules(target)
75
73
  add_advices = []
76
74
  del_advices = []
77
-
75
+
78
76
  for a in target.advices
79
77
  if a.code.is_a?(Module) and (!a.code.class.ancestors.include?(Class))
80
78
  target.module_eval %{ include #{a.code} }
81
-
79
+
82
80
  options = a.options.reject { |k,v| k == :pre || k == :post }
83
81
 
84
82
  method = (a.options[:pre] || 'pre').to_s
@@ -86,32 +84,32 @@ module Aspects
86
84
  options.update(:where => :prepend, :join => :pre)
87
85
  add_advices << Advice.new(method.to_sym, options)
88
86
  end
89
-
87
+
90
88
  method = (a.options[:post] || 'post').to_s
91
89
  if a.code.instance_methods.include?(method)
92
90
  options.update(:where => :append, :join => :post)
93
91
  add_advices << Advice.new(method.to_sym, options)
94
92
  end
95
-
93
+
96
94
  del_advices << a
97
95
  end
98
96
  end
99
97
 
100
98
  # Delete the original advices.
101
-
99
+
102
100
  for a in del_advices
103
101
  target.advices!.delete(a)
104
102
  end
105
-
103
+
106
104
  # Add the new advices.
107
-
105
+
108
106
  target.advices!.concat(add_advices)
109
107
  end
110
108
 
111
109
  # Generates the code to call the aspects.
112
-
110
+
113
111
  def self.gen_advice_code(method, advices, join = :pre) # :nodoc:
114
- code = ''
112
+ code = ''
115
113
 
116
114
  advices.each_with_index do |advice, idx|
117
115
  o = options = advice.options
@@ -121,7 +119,7 @@ module Aspects
121
119
  elsif except = options[:except]
122
120
  next if [except].flatten.include?(method.to_sym)
123
121
  end
124
-
122
+
125
123
  advice = advice.code
126
124
 
127
125
  if advice.is_a?(Symbol) or advice.is_a?(String)
@@ -144,9 +142,9 @@ module Aspects
144
142
  end
145
143
  end
146
144
  end
147
-
145
+
148
146
  return code
149
- end
147
+ end
150
148
 
151
149
  def self.append_features(base)
152
150
  super
@@ -155,7 +153,7 @@ module Aspects
155
153
  end
156
154
 
157
155
  module ClassMethods
158
-
156
+
159
157
  # Add a pre (before) advice.
160
158
 
161
159
  def pre(*args, &block)
@@ -170,17 +168,15 @@ module Aspects
170
168
  else
171
169
  new_advices = args.collect { |a| Advice.new(a, options) }
172
170
  end
173
- =begin
174
- if options[:where] == :prepend
175
- self.advices = advices + self.advices
176
- else
177
- self.advices = self.advices + advices
178
- end
179
- =end
171
+ # if options[:where] == :prepend
172
+ # self.advices = advices + self.advices
173
+ # else
174
+ # self.advices = self.advices + advices
175
+ # end
180
176
  self.advices!.concat(new_advices)
181
177
  end
182
178
  alias_method :before, :pre
183
-
179
+
184
180
  # Add a post (after) advice.
185
181
 
186
182
  def post(*args, &block)
@@ -195,20 +191,18 @@ module Aspects
195
191
  else
196
192
  new_advices = args.collect { |a| Advice.new(a, options) }
197
193
  end
198
- =begin
199
- if options[:where] == :prepend
200
- self.advices = advices + self.advices
201
- else
202
- self.advices = self.advices + advices
203
- end
204
- =end
194
+ # if options[:where] == :prepend
195
+ # self.advices = advices + self.advices
196
+ # else
197
+ # self.advices = self.advices + advices
198
+ # end
205
199
  self.advices!.concat(new_advices)
206
200
  end
207
201
  alias_method :after, :post
208
202
 
209
203
  # Add a wrap (arround) aspect. An aspect is a class that
210
204
  # responds to the before and after advices.
211
-
205
+
212
206
  def wrap(*args)
213
207
  o = options = {
214
208
  :pre => :pre,
@@ -223,8 +217,6 @@ module Aspects
223
217
  alias_method :around, :wrap
224
218
  alias_method :observer, :wrap
225
219
 
226
- end
227
-
228
- end
220
+ end
229
221
 
230
222
  end
@@ -16,16 +16,16 @@
16
16
  # ==========================================================================
17
17
  # Revision History
18
18
  # ==========================================================================
19
- # 2006.04.03
20
- # * added #instance method.
19
+ # 2006.04.03 trans
20
+ # * Got rid of ^object_ exclusion.
21
21
  #
22
- # 2005.10.26
23
- # * preserved a few addtional methods --everyhting ending in ?, dup and
22
+ # 2005.10.26 trans
23
+ # * Preserved a few addtional methods --everyhting ending in ?, dup and
24
24
  # object_id.
25
- # * changed name from BlankSlate to BasicObject
25
+ # * Changed name from BlankSlate to BasicObject
26
26
  #
27
27
  # 2005.04.28 trans
28
- # * ported from BlankSlate and added __class__
28
+ # * Ported from BlankSlate and added __class__.
29
29
  # ==========================================================================
30
30
  #
31
31
  # TODO Might be nice it there were a factory method to alter which methods
@@ -47,13 +47,13 @@ require 'facets/core/kernel/__class__'
47
47
  #
48
48
  # The pattern used to reserve methods is:
49
49
  #
50
- # /(^__|^instance_|^object_|^null$|^inspect$|^dup$|\?$)/
50
+ # /(^__|^instance_|^initialize$|^null$|^inspect$|^dup$|^clone$\?$)/
51
51
  #
52
52
  # By default these are the reserved methods:
53
53
  #
54
- # __id__ __class__ __self__ __send__ dup eql? equal? frozen? inspect instance_eval
55
- # instance_of? instance_variable_get instance_variable_set instance_variables
56
- # is_a? kind_of? nil? null object_id respond_to? tainted?
54
+ # __id__ __class__ __self__ __send__ clone dup eql? equal? frozen? initialize
55
+ # inspect instance_eval instance_of? instance_variable_get instance_variable_set
56
+ # instance_variables is_a? kind_of? nil? null respond_to? tainted?
57
57
  #
58
58
  # The special method #__self__ allows access to the underlying object via a
59
59
  # specialized Functor-style class called, BasicObject::Self. This binds the
@@ -70,63 +70,102 @@ require 'facets/core/kernel/__class__'
70
70
 
71
71
  class BasicObject
72
72
 
73
+ # The Self class allows one to get access the hidden Object/Kernel methods.
74
+ # It is essentially a specialized Functor which binds an Object/Kernel
75
+ # method to the current object for the current call.
76
+
77
+ class Self < self
78
+ def method_missing(meth, *args, &blk)
79
+ Object.instance_method(meth).bind(self).call(*args, &blk)
80
+ end
81
+ end
82
+
83
+ # Returns the Self functor class, which can then be used to
84
+ # call Kernel/Object methods on the current object.
85
+
86
+ def __self__
87
+ @__self__ ||= Self.new
88
+ end
89
+
90
+ # Shodow some important methods.
73
91
  alias_method :__method__, :method
74
92
 
75
- #EXCLUDE = /^(__id__|__send__)$/
76
- EXCLUDE = /(^__|^instance_|^object_|^null$|^inspect$|^dup$|\?$)/
93
+ # Methods not to get rid of. They are too important.
94
+ #EXCLUDE = /^(__|instance_eval$)/
95
+ EXCLUDE = /(^__|^instance_|^initialize$|^initialize_copy$|^null$|^inspect$|^dup$|^clone$|\?$)/
77
96
 
78
97
  def self.hide(name)
79
98
  #if instance_methods.include?(name.to_s) and name !~ EXCLUDE #/^(#{EXCLUDE.join('|')})/
80
- if method_defined?(name) and name !~ EXCLUDE
99
+ if name !~ EXCLUDE and
100
+ ( public_instance_methods.include?(name.to_s) or
101
+ private_instance_methods.include?(name.to_s) or
102
+ protected_instance_methods.include?(name.to_s)
103
+ )
81
104
  undef_method name
82
105
  end
83
106
  end
84
107
 
85
- instance_methods.each { |m| hide(m) }
86
-
87
- class Self < self
88
- define_method( :method_missing ) do |meth, *args| # &blk|
89
- Object.instance_method(meth).bind(self).call(*args) # ,&blk)
90
- end
91
- end
92
-
93
- def __self__
94
- @__self__ ||= Self.new
95
- end
108
+ # remove all methods
109
+ public_instance_methods(true).each { |m| hide(m) }
110
+ private_instance_methods(true).each { |m| hide(m) }
111
+ protected_instance_methods(true).each { |m| hide(m) }
96
112
 
97
113
  end
98
114
 
99
115
  # Since Ruby is very dynamic, methods added to the ancestors of
100
116
  # BasicObject <em>after BasicObject is defined</em> will show up in the
101
- # list of available BasicObject methods. We handle this by defining a hook
102
- # in the Object and Kernel classes that will hide any defined.
117
+ # list of available BasicObject methods. We handle this by defining
118
+ # hooks in Object, Kernel and Module that will hide any defined.
103
119
 
104
120
  module Kernel
105
121
  class << self
106
122
  madded = method(:method_added)
107
123
  define_method(:method_added) do |name|
108
- #return if name == :kernel_method_added
109
124
  r = madded.call(name)
110
- return if self != Kernel
125
+ return r if self != Kernel
111
126
  BasicObject.hide(name)
112
127
  r
113
128
  end
114
129
  end
115
130
  end
116
131
 
132
+ # See Kernel callback.
133
+
117
134
  class Object
118
135
  class << self
119
136
  madded = method(:method_added)
120
137
  define_method(:method_added) do |name|
121
- #return if name == :object_method_added
122
138
  r = madded.call(name)
123
- return if self != Object
139
+ return r if self != Object
124
140
  BasicObject.hide(name)
125
141
  r
126
142
  end
127
143
  end
128
144
  end
129
145
 
146
+ # Also, modules included into Object need to be scanned and have their
147
+ # instance methods removed from blank slate. In theory, modules
148
+ # included into Kernel would have to be removed as well, but a
149
+ # "feature" of Ruby prevents late includes into modules from being
150
+ # exposed in the first place.
151
+ =begin
152
+ class Module
153
+ if method_defined?(:append_features)
154
+ mappended = method(:append_features)
155
+ else
156
+ mappended = nil
157
+ end
158
+ define_method(:append_features) do |mod|
159
+ r = mappended.call(mod) if mappended
160
+ return r if mod != Object
161
+ public_instance_methods(true).each { |name| BasicObject.hide(name) }
162
+ private_instance_methods(true).each { |name| BasicObject.hide(name) }
163
+ public_instance_methods(true).each { |name| BasicObject.hide(name) }
164
+ r
165
+ end
166
+ end
167
+ =end
168
+
130
169
 
131
170
  # _____ _
132
171
  # |_ _|__ ___| |_