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
@@ -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