facets 2.1.3 → 2.2.0

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 (303) hide show
  1. data/AUTHORS +14 -12
  2. data/CHANGES +45 -2
  3. data/NOTES +9 -7
  4. data/lib/core/facets/1stclassmethod.rb +15 -11
  5. data/lib/core/facets/array.rb +0 -1
  6. data/lib/core/facets/array/conjoin.rb +40 -8
  7. data/lib/core/facets/array/delete.rb +8 -2
  8. data/lib/core/facets/array/indexable.rb +30 -3
  9. data/lib/core/facets/array/merge.rb +11 -0
  10. data/lib/core/facets/array/only.rb +3 -3
  11. data/lib/core/facets/array/pad.rb +4 -46
  12. data/lib/core/facets/array/rotate.rb +4 -4
  13. data/lib/core/facets/array/select.rb +2 -0
  14. data/lib/core/facets/array/splice.rb +16 -2
  15. data/lib/core/facets/array/stackable.rb +6 -40
  16. data/lib/core/facets/binding.rb +3 -0
  17. data/lib/core/facets/binding/cflow.rb +10 -64
  18. data/lib/core/facets/binding/defined.rb +10 -0
  19. data/lib/core/facets/binding/eval.rb +10 -76
  20. data/lib/core/facets/binding/here.rb +9 -0
  21. data/lib/core/facets/binding/self.rb +10 -0
  22. data/lib/core/facets/binding/vars.rb +0 -45
  23. data/lib/core/facets/boolean.rb +31 -103
  24. data/lib/core/facets/class/descendents.rb +17 -44
  25. data/lib/core/facets/comparable/bound.rb +8 -70
  26. data/lib/core/facets/comparable/cmp.rb +12 -92
  27. data/lib/core/facets/conversion.rb +122 -321
  28. data/lib/core/facets/dir/multiglob.rb +0 -13
  29. data/lib/core/facets/dir/traverse.rb +61 -111
  30. data/lib/core/facets/enumerable.rb +4 -2
  31. data/lib/core/facets/enumerable/cartesian.rb +36 -85
  32. data/lib/core/facets/enumerable/collect.rb +64 -152
  33. data/lib/core/facets/enumerable/combination.rb +40 -42
  34. data/lib/core/facets/enumerable/count.rb +99 -174
  35. data/lib/core/facets/enumerable/each.rb +86 -0
  36. data/lib/core/facets/enumerable/mash.rb +58 -0
  37. data/lib/core/facets/enumerable/permutation.rb +39 -44
  38. data/lib/core/facets/enumerable/probability.rb +16 -90
  39. data/lib/core/facets/enumerable/split.rb +113 -0
  40. data/lib/core/facets/exception/detail.rb +1 -2
  41. data/lib/core/facets/facets.rb +3 -2
  42. data/lib/core/facets/file/read.rb +4 -59
  43. data/lib/core/facets/file/topath.rb +8 -96
  44. data/lib/core/facets/file/write.rb +21 -49
  45. data/lib/core/facets/filetest/root.rb +4 -3
  46. data/lib/core/facets/functor.rb +5 -43
  47. data/lib/core/facets/hash/at.rb +7 -37
  48. data/lib/core/facets/hash/delete.rb +9 -58
  49. data/lib/core/facets/hash/has_keys.rb +4 -43
  50. data/lib/core/facets/hash/insert.rb +5 -38
  51. data/lib/core/facets/hash/inverse.rb +2 -41
  52. data/lib/core/facets/hash/iterate.rb +4 -45
  53. data/lib/core/facets/hash/keyize.rb +24 -92
  54. data/lib/core/facets/hash/merge.rb +4 -38
  55. data/lib/core/facets/hash/new.rb +5 -38
  56. data/lib/core/facets/hash/op.rb +20 -66
  57. data/lib/core/facets/hash/rekey.rb +9 -87
  58. data/lib/core/facets/hash/select.rb +1 -1
  59. data/lib/core/facets/hash/slice.rb +42 -0
  60. data/lib/core/facets/hash/traverse.rb +6 -46
  61. data/lib/core/facets/hash/update.rb +27 -67
  62. data/lib/core/facets/hash/weave.rb +22 -42
  63. data/lib/core/facets/indexable.rb +42 -14
  64. data/lib/core/facets/integer/bitmask.rb +69 -106
  65. data/lib/core/facets/integer/factorial.rb +1 -44
  66. data/lib/core/facets/integer/multiples.rb +27 -22
  67. data/lib/core/facets/integer/of.rb +1 -33
  68. data/lib/core/facets/kernel.rb +4 -2
  69. data/lib/core/facets/kernel/ask.rb +15 -3
  70. data/lib/core/facets/kernel/callstack.rb +38 -69
  71. data/lib/core/facets/kernel/constant.rb +2 -38
  72. data/lib/core/facets/kernel/deepcopy.rb +3 -55
  73. data/lib/core/facets/kernel/dir.rb +2 -0
  74. data/lib/core/facets/kernel/ergo.rb +2 -2
  75. data/lib/core/facets/kernel/instance.rb +51 -120
  76. data/lib/core/facets/kernel/metaid.rb +35 -73
  77. data/lib/core/facets/kernel/object.rb +14 -39
  78. data/lib/core/facets/kernel/op_esc.rb +24 -2
  79. data/lib/core/facets/kernel/populate.rb +6 -69
  80. data/lib/core/facets/kernel/report.rb +28 -33
  81. data/lib/core/facets/kernel/require.rb +7 -21
  82. data/lib/core/facets/kernel/respond.rb +11 -1
  83. data/lib/core/facets/kernel/returning.rb +50 -0
  84. data/lib/core/facets/kernel/silence.rb +12 -24
  85. data/lib/core/facets/kernel/super.rb +12 -76
  86. data/lib/core/facets/kernel/tap.rb +25 -107
  87. data/lib/core/facets/kernel/val.rb +7 -46
  88. data/lib/core/facets/kernel/withattr.rb +6 -64
  89. data/lib/core/facets/matchdata/matchset.rb +8 -50
  90. data/lib/core/facets/module.rb +3 -1
  91. data/lib/core/facets/module/abstract.rb +9 -47
  92. data/lib/core/facets/module/alias.rb +11 -68
  93. data/lib/core/facets/module/attr.rb +36 -15
  94. data/lib/core/facets/module/cattr.rb +8 -76
  95. data/lib/core/facets/module/clone.rb +15 -66
  96. data/lib/core/facets/module/include.rb +54 -114
  97. data/lib/core/facets/module/methods.rb +15 -13
  98. data/lib/core/facets/module/modify.rb +20 -206
  99. data/lib/core/facets/module/name.rb +19 -83
  100. data/lib/core/facets/module/require.rb +48 -53
  101. data/lib/core/facets/module/traits.rb +74 -33
  102. data/lib/core/facets/nilclass/status.rb +25 -2
  103. data/lib/core/facets/numeric/round.rb +24 -89
  104. data/lib/core/facets/proc/bind.rb +16 -59
  105. data/lib/core/facets/proc/compose.rb +6 -40
  106. data/lib/core/facets/proc/fn.rb +2 -0
  107. data/lib/core/facets/range/combine.rb +15 -51
  108. data/lib/core/facets/range/overlap.rb +8 -64
  109. data/lib/core/facets/regexp/arity.rb +6 -41
  110. data/lib/core/facets/stackable.rb +43 -4
  111. data/lib/core/facets/string.rb +2 -0
  112. data/lib/core/facets/string/align.rb +45 -55
  113. data/lib/core/facets/string/blank.rb +2 -46
  114. data/lib/core/facets/string/bracket.rb +14 -87
  115. data/lib/core/facets/string/case.rb +45 -32
  116. data/lib/core/facets/string/crypt.rb +3 -40
  117. data/lib/core/facets/string/filter.rb +7 -49
  118. data/lib/core/facets/string/format.rb +24 -126
  119. data/lib/core/facets/string/indexable.rb +50 -133
  120. data/lib/core/facets/string/interpolate.rb +24 -59
  121. data/lib/core/facets/string/natcmp.rb +5 -39
  122. data/lib/core/facets/string/nchar.rb +37 -45
  123. data/lib/core/facets/string/op.rb +13 -0
  124. data/lib/core/facets/string/partitions.rb +38 -99
  125. data/lib/core/facets/string/range.rb +8 -49
  126. data/lib/core/facets/string/regesc.rb +9 -42
  127. data/lib/core/facets/string/scan.rb +6 -52
  128. data/lib/core/facets/string/splice.rb +8 -13
  129. data/lib/core/facets/string/tabs.rb +16 -153
  130. data/lib/core/facets/symbol.rb +3 -1
  131. data/lib/core/facets/symbol/chomp.rb +11 -29
  132. data/lib/core/facets/symbol/generate.rb +4 -43
  133. data/lib/core/facets/symbol/not.rb +13 -25
  134. data/lib/core/facets/symbol/shadow.rb +2 -40
  135. data/lib/core/facets/symbol/succ.rb +14 -13
  136. data/lib/core/facets/symbol/to_proc.rb +33 -28
  137. data/lib/core/facets/time.rb +1 -0
  138. data/lib/core/facets/time/change.rb +5 -38
  139. data/lib/core/facets/time/elapse.rb +2 -41
  140. data/lib/core/facets/time/stamp.rb +47 -0
  141. data/lib/core/facets/unboundmethod.rb +3 -0
  142. data/lib/core/facets/unboundmethod/arguments.rb +27 -4
  143. data/lib/core/facets/unboundmethod/name.rb +21 -7
  144. data/lib/methods/facets/enumerable/cluster_by.rb +1 -1
  145. data/lib/methods/facets/enumerable/collate.rb +1 -0
  146. data/lib/methods/facets/enumerable/divide.rb +1 -1
  147. data/lib/methods/facets/enumerable/each_by.rb +1 -1
  148. data/lib/methods/facets/enumerable/each_pair.rb +1 -1
  149. data/lib/methods/facets/enumerable/eachn.rb +1 -1
  150. data/lib/methods/facets/enumerable/graph.rb +1 -1
  151. data/lib/methods/facets/enumerable/group_by.rb +1 -1
  152. data/lib/methods/facets/enumerable/inject.rb +1 -0
  153. data/lib/methods/facets/enumerable/map_send.rb +1 -0
  154. data/lib/methods/facets/enumerable/modulate.rb +1 -0
  155. data/lib/methods/facets/enumerable/partition_by.rb +1 -1
  156. data/lib/methods/facets/hash/collate.rb +1 -1
  157. data/lib/methods/facets/hash/except.rb +1 -0
  158. data/lib/methods/facets/hash/graph.rb +1 -1
  159. data/lib/methods/facets/hash/mash.rb +1 -0
  160. data/lib/methods/facets/kernel/Bit.rb +1 -0
  161. data/lib/methods/facets/kernel/complete.rb +1 -1
  162. data/lib/methods/facets/kernel/here.rb +1 -1
  163. data/lib/methods/facets/kernel/non_nil.rb +1 -0
  164. data/lib/methods/facets/kernel/respond_with_value.rb +1 -0
  165. data/lib/methods/facets/kernel/with.rb +1 -1
  166. data/lib/methods/facets/module/class_def.rb +1 -0
  167. data/lib/methods/facets/string/camelcase.rb +1 -0
  168. data/lib/methods/facets/string/op_minus.rb +1 -0
  169. data/lib/methods/facets/string/snakecase.rb +1 -0
  170. data/lib/more/facets/attributes.rb +5 -5
  171. data/lib/more/facets/basicobject.rb +0 -62
  172. data/lib/{core/facets/continuation/create.rb → more/facets/continuation.rb} +4 -21
  173. data/lib/more/facets/duration.rb +534 -0
  174. data/lib/more/facets/lazy.rb +3 -3
  175. data/lib/more/facets/namespace.rb +23 -71
  176. data/lib/more/facets/rbsystem.rb +42 -8
  177. data/lib/more/facets/stylize.rb +6 -3
  178. data/lib/more/facets/thread.rb +55 -0
  179. data/meta/MANIFEST +49 -18
  180. data/meta/ROLLRC +1 -1
  181. data/meta/project.yaml +2 -2
  182. data/task/install +1 -1
  183. data/task/test/general +8 -2
  184. data/test/unit/array/test_pad.rb +30 -45
  185. data/test/unit/array/test_stackable.rb +14 -28
  186. data/test/unit/binding/test_cflow.rb +34 -49
  187. data/test/unit/binding/test_defined.rb +17 -0
  188. data/test/unit/binding/test_eval.rb +11 -39
  189. data/test/unit/binding/test_here.rb +17 -0
  190. data/test/unit/binding/test_self.rb +17 -0
  191. data/test/unit/binding/test_vars.rb +22 -37
  192. data/test/unit/class/test_descendents.rb +15 -30
  193. data/test/unit/class/test_initializer.rb +1 -8
  194. data/test/unit/comparable/test_bound.rb +38 -53
  195. data/test/unit/comparable/test_cmp.rb +45 -60
  196. data/test/unit/dir/test_traverse.rb +56 -0
  197. data/test/unit/enumerable/test_cartesian.rb +34 -47
  198. data/test/unit/enumerable/test_collect.rb +16 -125
  199. data/test/unit/enumerable/test_combination.rb +1 -8
  200. data/test/unit/enumerable/test_count.rb +51 -66
  201. data/test/unit/enumerable/test_each.rb +77 -0
  202. data/test/unit/enumerable/test_mash.rb +51 -0
  203. data/test/unit/enumerable/test_permutation.rb +1 -7
  204. data/test/unit/enumerable/test_probability.rb +42 -55
  205. data/test/unit/enumerable/test_split.rb +52 -0
  206. data/test/unit/exception/test_detail.rb +19 -0
  207. data/test/unit/file/test_read.rb +34 -0
  208. data/test/unit/file/test_topath.rb +17 -25
  209. data/test/unit/file/test_write.rb +6 -12
  210. data/test/unit/filetest/test_root.rb +14 -0
  211. data/test/unit/hash/test_at.rb +9 -21
  212. data/test/unit/hash/test_delete.rb +22 -37
  213. data/test/unit/hash/test_has_keys.rb +13 -28
  214. data/test/unit/hash/test_insert.rb +9 -23
  215. data/test/unit/hash/test_inverse.rb +11 -26
  216. data/test/unit/hash/test_iterate.rb +16 -31
  217. data/test/unit/hash/test_keyize.rb +40 -55
  218. data/test/unit/hash/test_merge.rb +10 -25
  219. data/test/unit/hash/test_new.rb +9 -24
  220. data/test/unit/hash/test_op.rb +1 -7
  221. data/test/unit/hash/test_rekey.rb +47 -62
  222. data/test/unit/hash/test_traverse.rb +17 -32
  223. data/test/unit/hash/test_update.rb +30 -45
  224. data/test/unit/hash/test_weave.rb +10 -23
  225. data/test/unit/integer/test_bitmask.rb +48 -44
  226. data/test/unit/integer/test_factorial.rb +11 -26
  227. data/test/unit/integer/test_multiples.rb +1 -5
  228. data/test/unit/integer/test_of.rb +14 -29
  229. data/test/unit/kernel/test_callstack.rb +13 -28
  230. data/test/unit/kernel/test_constant.rb +14 -28
  231. data/test/unit/kernel/test_deepcopy.rb +20 -35
  232. data/test/unit/kernel/test_instance.rb +46 -61
  233. data/test/unit/kernel/test_metaid.rb +42 -57
  234. data/test/unit/kernel/test_object.rb +14 -29
  235. data/test/unit/kernel/test_populate.rb +38 -53
  236. data/test/unit/kernel/test_report.rb +1 -7
  237. data/test/unit/kernel/test_returning.rb +16 -0
  238. data/test/unit/kernel/test_silence.rb +8 -23
  239. data/test/unit/kernel/test_super.rb +41 -56
  240. data/test/unit/kernel/test_tap.rb +15 -39
  241. data/test/unit/kernel/test_val.rb +7 -20
  242. data/test/unit/kernel/test_withattr.rb +29 -44
  243. data/test/unit/matchdata/test_matchset.rb +20 -35
  244. data/test/unit/module/test_abstract.rb +15 -30
  245. data/test/unit/module/test_alias.rb +32 -45
  246. data/test/unit/module/test_cattr.rb +39 -54
  247. data/test/unit/module/test_clone.rb +31 -43
  248. data/test/unit/module/test_include.rb +1 -35
  249. data/test/unit/module/test_modify.rb +102 -114
  250. data/test/unit/module/test_name.rb +1 -7
  251. data/test/unit/numeric/test_round.rb +46 -61
  252. data/test/unit/proc/test_bind.rb +29 -44
  253. data/test/unit/proc/test_compose.rb +20 -35
  254. data/test/unit/range/test_combine.rb +14 -29
  255. data/test/unit/range/test_overlap.rb +34 -51
  256. data/test/unit/regexp/test_arity.rb +14 -29
  257. data/test/unit/string/test_align.rb +13 -27
  258. data/test/unit/string/test_blank.rb +12 -27
  259. data/test/unit/string/test_bracket.rb +52 -67
  260. data/test/unit/string/test_case.rb +19 -38
  261. data/test/unit/string/test_crypt.rb +10 -25
  262. data/test/unit/string/test_filter.rb +1 -7
  263. data/test/unit/string/test_format.rb +2 -7
  264. data/test/unit/string/test_indexable.rb +54 -69
  265. data/test/unit/string/test_interpolate.rb +8 -21
  266. data/test/unit/string/test_natcmp.rb +11 -26
  267. data/test/unit/string/test_nchar.rb +1 -14
  268. data/test/unit/string/test_op.rb +14 -0
  269. data/test/unit/string/test_partitions.rb +39 -54
  270. data/test/unit/string/test_range.rb +17 -32
  271. data/test/unit/string/test_regesc.rb +1 -7
  272. data/test/unit/string/test_scan.rb +23 -38
  273. data/test/unit/string/test_stackable.rb +79 -98
  274. data/test/unit/string/test_tabs.rb +1 -7
  275. data/test/unit/symbol/test_chomp.rb +10 -21
  276. data/test/unit/symbol/test_generate.rb +7 -22
  277. data/test/unit/symbol/test_not.rb +10 -25
  278. data/test/unit/symbol/test_shadow.rb +8 -23
  279. data/test/unit/symbol/test_succ.rb +1 -7
  280. data/test/unit/symbol/test_to_proc.rb +1 -7
  281. data/test/unit/test_attributes.rb +1 -1
  282. data/test/unit/test_continuation.rb +13 -0
  283. data/test/unit/test_conversion.rb +1 -14
  284. data/test/unit/test_namespace.rb +30 -3
  285. data/test/unit/test_thread.rb +23 -0
  286. data/test/unit/time/test_change.rb +11 -26
  287. data/test/unit/time/test_elapse.rb +10 -25
  288. data/test/unit/time/test_stamp.rb +28 -0
  289. metadata +65 -25
  290. data/lib/core/facets/array/unzip.rb +0 -14
  291. data/lib/core/facets/continuation.rb +0 -1
  292. data/lib/core/facets/enumerable/collate.rb +0 -104
  293. data/lib/core/facets/kernel/require_esc.rb +0 -44
  294. data/lib/more/facets/mapsend.rb +0 -98
  295. data/lib/more/facets/pp_s.rb +0 -30
  296. data/log/history.rd +0 -38
  297. data/log/todo.rd +0 -4
  298. data/task/special/quickopts +0 -15
  299. data/test/unit/continuation/test_create.rb +0 -28
  300. data/test/unit/enumerable/test_collate.rb +0 -51
  301. data/test/unit/kernel/test_require_esc.rb +0 -29
  302. data/test/unit/test_mapsend.rb +0 -18
  303. data/test/unit/test_pp_s.rb +0 -17
@@ -7,5 +7,7 @@ require 'facets/module/traits.rb'
7
7
  require 'facets/module/modify.rb'
8
8
  require 'facets/module/alias.rb'
9
9
  require 'facets/module/attr.rb'
10
- require 'facets/module/require.rb'
11
10
  require 'facets/module/methods.rb'
11
+
12
+ # remove for 1.9
13
+ require 'facets/module/require.rb'
@@ -1,30 +1,17 @@
1
- # TITLE:
2
- #
3
- # Abstract method.
4
- #
5
- # SUMMARY:
6
- #
7
- # Create an abstrct method. If it is not overriden it will raise
8
- # an exception when called.
9
- #
10
- # AUTHORS:
11
- #
12
- # - Thomas Sawyer
13
-
14
- #
15
1
  class Module
16
2
 
17
- # Creates a method that requires to be overridding.
18
- # If it not overridden and called upon a TypeError
19
- # will be raised.
3
+ # Create an abstract method. If it is not overridden, it will
4
+ # raise a TypeError when called.
20
5
  #
21
- # class C
22
- # abstract :a
23
- # end
6
+ # class C
7
+ # abstract :a
8
+ # end
24
9
  #
25
- # c = C.new
26
- # c.a #=> Error: undefined abstraction #a
10
+ # c = C.new
11
+ # c.a #=> Error: undefined abstraction #a
27
12
  #
13
+ # CREDIT: Trans
14
+
28
15
  def abstract( *sym )
29
16
  sym.each { |s|
30
17
  define_method( s ) { raise TypeError, "undefined abstraction ##{s}" }
@@ -32,28 +19,3 @@ class Module
32
19
  end
33
20
 
34
21
  end
35
-
36
-
37
- =begin test
38
-
39
- require 'test/unit'
40
-
41
- class TestAttrTester < Test::Unit::TestCase
42
-
43
- class Aq
44
- abstract :q
45
- end
46
-
47
- def test_abstract_01
48
- ac = Aq.new
49
- assert_raises( TypeError ) { ac.q }
50
- end
51
-
52
- def test_abstract_02
53
- ac = Class.new { abstract :q }.new
54
- assert_raises( TypeError ) { ac.q }
55
- end
56
-
57
- end
58
-
59
- =end
@@ -13,12 +13,6 @@
13
13
  # AUTHORS:
14
14
  #
15
15
  # CREDIT Thomas Saywer
16
- #
17
- # LOG:
18
- #
19
- # - 2007.10.31 trans
20
- # Made #alias_method_chain compatible with current ActiveSupport version.
21
-
22
16
  class Module
23
17
 
24
18
  private
@@ -42,6 +36,7 @@ class Module
42
36
  end
43
37
 
44
38
  # As with alias_accessor, but just for the reader.
39
+ # This is basically the same as alias_method.
45
40
 
46
41
  def alias_reader(*args)
47
42
  orig = args.last
@@ -61,17 +56,18 @@ class Module
61
56
  end
62
57
  end
63
58
 
64
- # Like module_funtion but makes the instance method
65
- # public rather than private. This can not work
66
- # as a sectional modifier however.
59
+ # Like module_function but makes the instance method
60
+ # public rather than private.
61
+ #
62
+ # NOTE: This does not work as a sectional modifier.
67
63
 
68
- def module_method *meth
69
- module_function *meth
70
- public *meth
64
+ def module_method(*meth)
65
+ module_function(*meth)
66
+ public(*meth)
71
67
  end
72
68
 
73
69
  # Alias a module function so that the alias is also
74
- # a module function. The typical #alias_method
70
+ # a module function. The typical #alias_method
75
71
  # does not do this.
76
72
  #
77
73
  # module Demo
@@ -116,8 +112,8 @@ class Module
116
112
  #
117
113
  # so you can safely chain foo, foo?, and foo! with the same feature.
118
114
  #
119
- # CREDIT Bitsweat and Rails Team.
120
- #++
115
+ # CREDIT: Bitsweat
116
+ # CREDIT: Rails Team
121
117
 
122
118
  def alias_method_chain(target, feature)
123
119
  # Strip out punctuation on predicates or bang methods since
@@ -141,56 +137,3 @@ class Module
141
137
  end
142
138
 
143
139
  end
144
-
145
-
146
- # _____ _
147
- # |_ _|__ ___| |_
148
- # | |/ _ \/ __| __|
149
- # | | __/\__ \ |_
150
- # |_|\___||___/\__|
151
- #
152
- =begin test
153
-
154
- require 'test/unit'
155
-
156
- class TCModule < Test::Unit::TestCase
157
-
158
- module MockModule
159
- # for alias_module_method
160
- def x ; 33 ; end
161
- module_function :x
162
- alias_module_function :y, :x
163
- end
164
-
165
- def test_alias_module_function
166
- assert_equal( 33, MockModule.y )
167
- #assert_equal( 33, @m.send(:y) ) # use send b/c private
168
- end
169
-
170
- module X
171
- def self.included(base)
172
- base.module_eval {
173
- alias_method_chain :foo, :feature
174
- }
175
- end
176
- def foo_with_feature
177
- foo_without_feature + '!'
178
- end
179
- end
180
-
181
- class Y
182
- def foo
183
- "FOO"
184
- end
185
- include X
186
- #alias_method_chain :foo, :feature
187
- end
188
-
189
- def test_001
190
- y = Y.new
191
- assert_equal( "FOO!", y.foo )
192
- end
193
-
194
- end
195
-
196
- =end
@@ -1,20 +1,9 @@
1
- # TITLE:
2
- #
3
- # Extra Attributes Methods
4
- #
5
- # SUMMARY:
6
- #
7
- # Module attribute extensions.
8
- #
9
- # AUTHORS:
10
- #
11
- # - Thomas Sawyer
12
-
13
- #
14
1
  class Module
15
2
 
16
3
  # Like attr_writer, but the writer method validates the
17
4
  # setting against the given block.
5
+ #
6
+ # CREDIT: ?
18
7
 
19
8
  def attr_validator(*symbols, &validator)
20
9
  made = []
@@ -30,11 +19,13 @@ class Module
30
19
  made
31
20
  end
32
21
 
22
+ # Create aliases for validators.
23
+
33
24
  def alias_validator(*args)
34
25
  orig = args.last
35
26
  args = args - [orig]
36
27
  args.each do |name|
37
- alias_method(name, orig)
28
+ #alias_method(name, orig)
38
29
  alias_method("#{name}=", "#{orig}=")
39
30
  end
40
31
  end
@@ -57,6 +48,8 @@ class Module
57
48
  # end
58
49
  # end
59
50
  #
51
+ # CREDIT: Trans
52
+
60
53
  def attr_setter(*args)
61
54
  code, made = '', []
62
55
  args.each do |a|
@@ -71,6 +64,20 @@ class Module
71
64
  made
72
65
  end
73
66
 
67
+ # Alias an accessor. This create an alias for
68
+ # both a reader and a writer.
69
+ #
70
+ # class X
71
+ # attr_accessor :a
72
+ # alias_accessor :b, :a
73
+ # end
74
+ #
75
+ # x = X.new
76
+ # x.b = 1
77
+ # x.a #=> 1
78
+ #
79
+ # CREDIT: Trans
80
+
74
81
  def alias_setter(*args)
75
82
  args = args - [orig]
76
83
  args.each do |name|
@@ -94,6 +101,8 @@ class Module
94
101
  # @a = value
95
102
  # self
96
103
  # end
104
+ #
105
+ # CREDIT: Trans
97
106
 
98
107
  def attr_accessor!(*args)
99
108
  attr_reader!(*args) + attr_writer!(*args)
@@ -101,6 +110,10 @@ class Module
101
110
  alias_method :attr_switcher, :attr_accessor!
102
111
  alias_method :attr_toggler, :attr_accessor!
103
112
 
113
+ # Create aliases for flag accessors.
114
+ #
115
+ # CREDIT: Trans
116
+
104
117
  def alias_accessor!(*args)
105
118
  orig = args.last
106
119
  args = args - [orig]
@@ -112,7 +125,7 @@ class Module
112
125
  alias_method :alias_switcher, :alias_accessor!
113
126
  alias_method :alias_toggler, :alias_accessor!
114
127
 
115
- # Create an tester attribute. This creates a single methods
128
+ # Create an tester attribute. This creates a single method
116
129
  # used to test the attribute for truth.
117
130
  #
118
131
  # attr_reader! :a
@@ -139,6 +152,10 @@ class Module
139
152
  alias_method :attr_reader?, :attr_reader!
140
153
  alias_method :attr_tester, :attr_reader!
141
154
 
155
+ # Create aliases for flag reader.
156
+ #
157
+ # CREDIT: Trans
158
+
142
159
  def alias_reader!(*args)
143
160
  orig = args.last
144
161
  args = args - [orig]
@@ -176,6 +193,10 @@ class Module
176
193
  made
177
194
  end
178
195
 
196
+ # Create aliases for flag writer.
197
+ #
198
+ # CREDIT: Trans
199
+
179
200
  def alias_writer!(*args)
180
201
  orig = args.last
181
202
  args = args - [orig]
@@ -1,20 +1,3 @@
1
- # TITLE:
2
- #
3
- # Class Attributes
4
- #
5
- # FILE:
6
- #
7
- # cattr.rb
8
- #
9
- # DESCRIPTION:
10
- #
11
- # Class attributes with instance level access.
12
- #
13
- # AUTHORS:
14
- #
15
- # CREDIT David Heinemeier Hansson
16
-
17
- #
18
1
  class Class
19
2
 
20
3
  # Creates a class-variable attribute that can
@@ -25,6 +8,8 @@ class Class
25
8
  # method is not carried along. So the are now just class
26
9
  # methods. Accordingly, #mattr will eventually be deprecated
27
10
  # so use #cattr instead.
11
+ #
12
+ # CREDIT: David Heinemeier Hansson
28
13
 
29
14
  def cattr( *syms )
30
15
  accessors, readers = syms.flatten.partition { |a| a.to_s =~ /=$/ }
@@ -48,6 +33,8 @@ class Class
48
33
  # MyClass.a #=> 10
49
34
  # MyClass.new.a #=> 10
50
35
  #
36
+ # CREDIT: David Heinemeier Hansson
37
+
51
38
  def cattr_reader( *syms )
52
39
  syms.flatten.each do |sym|
53
40
  class_eval(<<-EOS, __FILE__, __LINE__)
@@ -79,6 +66,8 @@ class Class
79
66
  # MyClass.new.a = 29
80
67
  # MyClass.a #=> 29
81
68
  #
69
+ # CREDIT: David Heinemeier Hansson
70
+
82
71
  def cattr_writer(*syms)
83
72
  syms.flatten.each do |sym|
84
73
  class_eval(<<-EOS, __FILE__, __LINE__)
@@ -107,6 +96,8 @@ class Class
107
96
  # mc = MyClass.new
108
97
  # mc.a #=> 10
109
98
  #
99
+ # CREDIT: David Heinemeier Hansson
100
+
110
101
  def cattr_accessor(*syms)
111
102
  m = []
112
103
  m.concat( cattr_reader(*syms) )
@@ -117,62 +108,3 @@ class Class
117
108
  alias_method :mattr_accessor, :cattr_accessor # deprecate
118
109
 
119
110
  end
120
-
121
-
122
-
123
- # _____ _
124
- # |_ _|__ ___| |_
125
- # | |/ _ \/ __| __|
126
- # | | __/\__ \ |_
127
- # |_|\___||___/\__|
128
- #
129
- =begin test
130
-
131
- require 'test/unit'
132
-
133
- class TCModule < Test::Unit::TestCase
134
-
135
- class MockObject
136
- def initialize
137
- @@a = 10
138
- end
139
- def b ; @@b ; end
140
- end
141
-
142
- def test_cattr
143
- assert_nothing_raised {
144
- MockObject.class_eval { cattr :a }
145
- }
146
- t = MockObject.new
147
- assert_equal( 10, t.a )
148
- end
149
-
150
- def test_cattr_reader
151
- assert_nothing_raised {
152
- MockObject.class_eval { cattr_reader :a }
153
- }
154
- t = MockObject.new
155
- assert_equal( 10, t.a )
156
- end
157
-
158
- def test_cattr_writer
159
- assert_nothing_raised {
160
- MockObject.class_eval { cattr_writer :b }
161
- }
162
- t = MockObject.new
163
- t.b = 5
164
- assert_equal( 5, t.b )
165
- end
166
-
167
- def test_cattr_accessor
168
- assert_nothing_raised {
169
- MockObject.class_eval { cattr_accessor :c }
170
- }
171
- t = MockObject.new
172
- t.c = 50
173
- assert_equal( 50, t.c )
174
- end
175
-
176
- end
177
-
178
- =end
@@ -1,22 +1,12 @@
1
- # TITLE:
2
- #
3
- # Module Clone and Augment
4
- #
5
- # SUMMARY:
6
- #
7
- # Module extensions for cloning and augmenting a module.
8
- # These will *probably* be fully usurped by Traits in
9
- # the long run.
10
- #
11
- # CREDITS:
12
- #
13
- # - Thomas Sawyer
14
-
15
- #
16
1
  class Module
17
2
 
18
3
  # Returns an anonymous module with the specified methods
19
4
  # of the receiving module renamed.
5
+ #
6
+ # NOTE: These is likely to be usurped by traits.rb.
7
+ #
8
+ # CREDIT: Trans
9
+
20
10
  def clone_renaming( pairs )
21
11
  mod = self.dup
22
12
  pairs.each_pair{ |to_sym, from_sym|
@@ -30,6 +20,11 @@ class Module
30
20
 
31
21
  # Returns an anonymous module with the specified methods
32
22
  # of the receiving module removed.
23
+ #
24
+ # NOTE: These is likely to be usurped by traits.rb.
25
+ #
26
+ # CREDIT: Trans
27
+
33
28
  def clone_removing( *meths )
34
29
  mod = self.dup
35
30
  methods_to_remove = meths
@@ -39,6 +34,11 @@ class Module
39
34
 
40
35
  # Returns an anonymous module with only the specified methods
41
36
  # of the receiving module intact.
37
+ #
38
+ # NOTE: These is likely to be usurped by traits.rb.
39
+ #
40
+ # CREDIT: Trans
41
+
42
42
  def clone_using( *methods )
43
43
  methods.collect!{ |m| m.to_s }
44
44
  methods_to_remove = instance_methods - methods
@@ -48,54 +48,3 @@ class Module
48
48
  end
49
49
 
50
50
  end
51
-
52
-
53
-
54
- # _____ _
55
- # |_ _|__ ___| |_
56
- # | |/ _ \/ __| __|
57
- # | | __/\__ \ |_
58
- # |_|\___||___/\__|
59
- #
60
- =begin test
61
-
62
- require 'test/unit'
63
-
64
- class TestModuleClone < Test::Unit::TestCase
65
-
66
- module M
67
- def f; 1; end
68
- def g; 2; end
69
- end
70
-
71
- class Remove
72
- include M.clone_removing( :g )
73
- end
74
-
75
- class Rename
76
- include M.clone_renaming( :q => :g )
77
- end
78
-
79
- class Use
80
- include M.clone_using( :f )
81
- end
82
-
83
- def test_removing
84
- assert( Remove.method_defined?(:f) )
85
- assert( ! Remove.method_defined?(:g) )
86
- end
87
-
88
- def test_renaming
89
- assert( ! Rename.method_defined?(:g) )
90
- assert( Rename.method_defined?(:f) )
91
- assert( Rename.method_defined?(:q) )
92
- end
93
-
94
- def test_using_2
95
- assert( ! Use.method_defined?(:g) )
96
- assert( Use.method_defined?(:f) )
97
- end
98
-
99
- end
100
-
101
- =end