facets 2.1.3 → 2.2.0

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -1,5 +1,3 @@
1
- require 'facets/namespace' # FIXME
2
-
3
1
  class Module
4
2
 
5
3
  # An alias for #include.
@@ -8,17 +6,23 @@ class Module
8
6
  # is Enumerable
9
7
  # end
10
8
  #
11
- alias_method :is, :include
9
+ # CREDIT: Trans
12
10
 
13
- # TODO
14
- # def is(*mods)
15
- # mods.each do |mod|
16
- # if mod.const_defined?(:Self)
17
- # extend mod.const_get(:Self)
18
- # end
19
- # end
20
- # include(*mods)
21
- # end
11
+ #alias_method :is, :include
12
+
13
+ def is(*mods)
14
+ mods.each do |mod|
15
+ if mod.const_defined?(:Self)
16
+ extend mod::Self
17
+ # pass it along if module
18
+ if instance_of?(Module)
19
+ const_set(:Self, Module.new) unless const_defined?(:Self)
20
+ const_get(:Self).send(:include, mod::Self)
21
+ end
22
+ end
23
+ end
24
+ include(*mods)
25
+ end
22
26
 
23
27
  # Expirmental idea for #is.
24
28
  #
@@ -53,7 +57,9 @@ class Module
53
57
  #
54
58
  # Y.is?(X) #=> true
55
59
  #
56
- def is?( base )
60
+ # CREDIT: Trans
61
+
62
+ def is?(base)
57
63
  ancestors.slice(1..-1).include?( base )
58
64
  end
59
65
 
@@ -64,51 +70,55 @@ class Module
64
70
  # class Y < X ; end
65
71
  #
66
72
  # X.ancestor?(Y)
67
- #
73
+
68
74
  def ancestor?( mod )
69
75
  ancestors.include? mod
70
76
  end
71
77
 
78
+ # Alias for #===. This provides a verbal method
79
+ # for inquery.
80
+ #
81
+ # s = "HELLO"
82
+ # s.class? String #=> true
83
+ #
84
+ # CREDIT: Trans
85
+
72
86
  alias_method :class?, :===
73
87
 
74
- # Both includes and extends a module.
75
- #
76
- def include_and_extend(*mods)
77
- include *mods
78
- extend *mods
79
- end
88
+ # DEPRECATED
89
+ # # Both includes and extends a module.
90
+ # #
91
+ # # NOTE: If #include and/or #extend returned thier modules then
92
+ # # one could just do:
93
+ # #
94
+ # # extend(*include(M1, M2, ...))
95
+ # #
96
+ # # CREDIT: Trans
97
+ #
98
+ # def include_and_extend(*mods)
99
+ # include *mods
100
+ # extend *mods
101
+ # end
80
102
 
81
103
  # Include module and apply module_fuction to the
82
104
  # included methods.
83
105
  #
106
+ # CREDIT: Trans
107
+
84
108
  def include_function_module *mod
85
- include *mod
86
- module_function *mod.collect{|m| m.private_instance_methods & m.methods(false)}.flatten
109
+ include(*mod)
110
+ module_function(*mod.collect{|m| m.private_instance_methods & m.methods(false)}.flatten)
87
111
  end
88
112
 
89
- # Include a module via a specified namespace.
90
- #
91
- # module T
92
- # def t ; "HERE" ; end
93
- # end
94
- #
95
- # class X
96
- # include_as :test => T
97
- # def t ; test.t ; end
98
- # end
113
+ # NOTE: include_as is now in more library namespace.rb.
114
+
115
+ # A macro for dynamic modules.
99
116
  #
100
- # X.new.t #=> "HERE"
117
+ # TODO: This method ecourages a bad practice, and should not be used.
118
+ # It's here because Nitro uses it, but eventually it will be deprecated.
101
119
  #
102
- def include_as( h )
103
- h.each { |name, mod| method_space(name, mod) }
104
- end
120
+ # CREDIT: George Moschovitis
105
121
 
106
- # A useful macro for dynamic modules.
107
- #--
108
- # FIXME: quick and easy implementation, should
109
- # come up with something better. The name
110
- # sucks too.
111
- #++
112
122
  def on_included(code)
113
123
  tag = caller[0].split(' ').first.split(/\/|\\/).last.gsub(/:|\.|\(|\)/, '_')
114
124
  old = "__included_#{tag}"
@@ -130,88 +140,18 @@ module Kernel
130
140
 
131
141
  # Convenience alias for #is_a? to go along with #is.
132
142
  #
143
+ # TODO: Somewhat confusing with Module#is?, should this be deprecated?
144
+
133
145
  alias_method :is?, :is_a?
134
146
 
135
147
  end
136
148
 
137
149
 
138
- # _____ _
139
- # |_ _|__ ___| |_
140
- # | |/ _ \/ __| __|
141
- # | | __/\__ \ |_
142
- # |_|\___||___/\__|
143
- #
144
- =begin test
145
-
146
- require 'test/unit'
147
-
148
- class TestIncludeAs < Test::Unit::TestCase
149
-
150
- module MockModule
151
- def x; "X"; end
152
- def y; @y; end
153
- end
154
-
155
- class MockObject
156
- include_as :mod => MockModule
157
-
158
- def initialize
159
- @y = "Y"
160
- end
161
- end
162
-
163
- def test_01
164
- m = MockObject.new
165
- assert_equal( "X", m.mod.x )
166
- end
167
-
168
- def test_02
169
- m = MockObject.new
170
- assert_equal( "Y", m.mod.y )
171
- end
172
-
173
- end
174
-
175
- class TestOnInclude < Test::Unit::TestCase
176
-
177
- module M
178
- def self.check ; @@check ; end
179
- on_included %{
180
- @@check = 1
181
- }
182
- end
183
-
184
- module Q
185
- def self.check ; @@check ; end
186
- on_included %{
187
- @@check = 1
188
- }
189
- on_included %{
190
- @@check = 2
191
- }
192
- end
193
-
194
- class C
195
- include M
196
- include Q
197
- end
198
-
199
- def test_included
200
- assert_equal(1, M.check)
201
- assert_equal(2, Q.check)
202
- end
203
-
204
- end
205
-
206
- =end
207
-
208
150
 
209
151
  # demonstration
210
152
 
211
153
  =begin demo
212
154
 
213
- # test
214
-
215
155
  module T
216
156
  def t ; p self ; end
217
157
  def r ; p self ; end
@@ -1,4 +1,3 @@
1
-
2
1
  class Module
3
2
 
4
3
  # List all instance_methods, equivalent to
@@ -6,29 +5,32 @@ class Module
6
5
  # public_instance_methods +
7
6
  # protected_instance_methods +
8
7
  # private_instance_methods
8
+ #
9
+ # CREDIT: Trans
9
10
 
10
- def all_instance_methods(all=true)
11
- public_instance_methods(all) +
12
- protected_instance_methods(all) +
13
- private_instance_methods(all)
11
+ def all_instance_methods(include_super=true)
12
+ public_instance_methods(include_super) +
13
+ protected_instance_methods(include_super) +
14
+ private_instance_methods(include_super)
14
15
  end
15
16
 
16
17
  # Query whether an instance method is defined for the module.
17
18
  #
18
- # CREDIT Noah Gibbs
19
- # CREDIT Gavin Sinclair
19
+ # CREDIT: Gavin Sinclair
20
+ # CREDIT: Noah Gibbs
21
+
20
22
 
21
- def instance_method_defined?(_method)
22
- instance_methods(true).find { |m| m == _method.to_s }
23
+ def instance_method_defined?(meth)
24
+ instance_methods(true).find { |m| m == meth.to_s }
23
25
  end
24
26
 
25
27
  # Query whether a normal (singleton) method is defined for the module.
26
28
  #
27
- # CREDIT Noah Gibbs
28
- # CREDIT Gavin Sinclair
29
+ # CREDIT: Gavin Sinclair
30
+ # CREDIT: Noah Gibbs
29
31
 
30
- def module_method_defined?(_method)
31
- singleton_methods(true).find { |m| m == _method.to_s }
32
+ def module_method_defined?(meth)
33
+ singleton_methods(true).find { |m| m == meth.to_s }
32
34
  end
33
35
 
34
36
  end
@@ -1,16 +1,3 @@
1
- # TITLE:
2
- #
3
- # Module Modify
4
- #
5
- # SUMMARY:
6
- #
7
- # Module extensions for modifying a module's methods.
8
- #
9
- # CREDITS:
10
- #
11
- # - Thomas Sawyer
12
-
13
- #
14
1
  class Module
15
2
 
16
3
  private
@@ -49,21 +36,25 @@ class Module
49
36
  # This is like #revisal, but #revisal only
50
37
  # returns the reconstructred module. It does not
51
38
  # include it.
39
+ #
40
+ # CREDIT: Trans
52
41
 
53
- def integrate( mod, &block )
42
+ def integrate(mod, &block)
54
43
  #include mod.revisal( &blk )
55
- m = Module.new { include mod }
56
- m.class_eval &block
44
+ m = Module.new{ include mod }
45
+ m.class_eval(&block)
57
46
  include m
58
47
  end
59
48
 
60
49
  # Return a new module based on another.
61
50
  # This includes the original module into the new one.
51
+ #
52
+ # CREDIT: Trans
62
53
 
63
- def revisal( &blk )
54
+ def revisal(&blk)
64
55
  base = self
65
- nm = Module.new { include base }
66
- nm.class_eval &blk
56
+ nm = Module.new{ include base }
57
+ nm.class_eval(&blk)
67
58
  nm
68
59
  end
69
60
 
@@ -88,7 +79,9 @@ class Module
88
79
  #
89
80
  # Greeter.new.hello #=> "Hello, friend!"
90
81
  #
91
- def redefine_method( sym, aka=nil, &blk )
82
+ # CREDIT: Trans
83
+
84
+ def redefine_method(sym, aka=nil, &blk)
92
85
  raise ArgumentError, "method does not exist" unless method_defined?( sym )
93
86
  alias_method( aka, sym ) if aka
94
87
  undef_method( sym )
@@ -127,6 +120,8 @@ class Module
127
120
  # end
128
121
  # end
129
122
  #
123
+ # CREDIT: Trans
124
+
130
125
  def redirect_method( method_hash )
131
126
  method_hash.each do |targ,adv|
132
127
  define_method(targ) { |*args| send(adv,*args) }
@@ -139,6 +134,8 @@ class Module
139
134
  #
140
135
  # rename_method( :to_method, :from_method )
141
136
  #
137
+ # CREDIT: Trans
138
+
142
139
  def rename_method( to_sym, from_sym )
143
140
  raise ArgumentError, "method #{from_sym} does not exist" unless method_defined?( from_sym )
144
141
  alias_method( to_sym, from_sym )
@@ -163,6 +160,8 @@ class Module
163
160
  #
164
161
  # Keep in mind that this can not be used to wrap methods
165
162
  # that take a block.
163
+ #
164
+ # CREDIT: Trans
166
165
 
167
166
  def wrap_method( sym, &blk )
168
167
  old = instance_method(sym)
@@ -170,190 +169,5 @@ class Module
170
169
  end
171
170
 
172
171
  alias_method :wrap, :wrap_method
173
- end
174
-
175
-
176
-
177
- # _____ _
178
- # |_ _|__ ___| |_
179
- # | |/ _ \/ __| __|
180
- # | | __/\__ \ |_
181
- # |_|\___||___/\__|
182
- #
183
- =begin test
184
-
185
- require 'test/unit'
186
-
187
- # integrate
188
-
189
- class TestModuleModifyIntegrate < Test::Unit::TestCase
190
-
191
- module M
192
- def x ; 1 ; end
193
- end
194
-
195
- class C
196
- integrate M do
197
- rename :y, :x
198
- end
199
- end
200
-
201
- def test_integrate
202
- c = C.new
203
- assert_raises( NoMethodError ) { c.x }
204
- assert_equal( 1, c.y )
205
- end
206
-
207
- end
208
-
209
- # revisal
210
-
211
- class TestModuleModifyRevisal < Test::Unit::TestCase
212
-
213
- module M
214
- def x ; 1 ; end
215
- end
216
-
217
- class C
218
- include M.revisal {
219
- rename :y, :x
220
- }
221
- end
222
-
223
- def test_revisal
224
- c = C.new
225
- assert_raises( NoMethodError ) { c.x }
226
- assert_equal( 1, c.y )
227
- end
228
-
229
- end
230
-
231
- # nodef
232
-
233
- class TestModuleModifyNoDef < Test::Unit::TestCase
234
-
235
- def the_undefined_method ; 'not here' ; end
236
-
237
- nodef :the_undefined_method
238
-
239
- def test_nodef
240
- assert( ! respond_to?( :the_undefined_method ) )
241
- end
242
-
243
- end
244
-
245
- # redef
246
-
247
- class TestModuleModifyReDef < Test::Unit::TestCase
248
-
249
- # redef_method
250
-
251
- def a; "a"; end
252
-
253
- redefine_method(:a) { nil }
254
-
255
- def test_redefine_method
256
- assert_equal( nil, a )
257
- end
258
-
259
- # redef
260
-
261
- def b; "b"; end
262
-
263
- redef(:b) { "x" }
264
-
265
- def test_redef
266
- assert_equal( "x", b )
267
- end
268
-
269
- end
270
-
271
- # redirect_method
272
-
273
- class TestModuleModifyReDirect < Test::Unit::TestCase
274
-
275
- def red1 ; 1 ; end
276
-
277
- redirect_method :red2 => :red1
278
-
279
- def test_redirect
280
- assert_equal( 1, red2 )
281
- end
282
-
283
- # redirect
284
-
285
- def blue1 ; 1 ; end
286
-
287
- redirect :blue2 => :blue1
288
-
289
- def test_redirect
290
- assert_equal( 1, blue2 )
291
- end
292
-
293
- end
294
-
295
- # remove method
296
-
297
- class TestModuleModifyRemove < Test::Unit::TestCase
298
-
299
- def the_removed_method ; 'not here' ; end
300
-
301
- remove :the_removed_method
302
-
303
- def test_remove
304
- assert( ! respond_to?( :the_removed_method ) )
305
- end
306
-
307
- end
308
-
309
- # Rename
310
-
311
- class TestModuleModifyRename < Test::Unit::TestCase
312
172
 
313
- def a; "A" ; end
314
-
315
- rename_method :b, :a
316
-
317
- def test_rename_method
318
- assert( ! respond_to?( :a ) )
319
- assert( respond_to?( :b ) )
320
- end
321
-
322
- # rename
323
-
324
- def c; "C" ; end
325
-
326
- rename :d, :c
327
-
328
- def test_rename
329
- assert( ! respond_to?( :c ) )
330
- assert( respond_to?( :d ) )
331
- end
332
-
333
- end
334
-
335
- # wrap_method
336
-
337
- class TestModuleModifyWrap < Test::Unit::TestCase
338
-
339
- def a; "A"; end
340
-
341
- wrap_method(:a) { |old| old.call + "B" }
342
-
343
- def test_wrap_method
344
- assert_equal( "AB", a )
345
- end
346
-
347
- # wrap
348
-
349
- def b; "B"; end
350
-
351
- wrap(:b) { |old| old.call + "C" }
352
-
353
- def test_wrap
354
- assert_equal( "BC", b )
355
- end
356
-
357
- end
358
-
359
- =end
173
+ end