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,30 +1,25 @@
1
- # TITLE:
2
- #
1
+ # = TITLE:
3
2
  # Super/As Extensions
4
3
  #
5
- # DESCRIPTION:
6
- #
4
+ # = DESCRIPTION:
7
5
  # Extensions for calling ancestor methods.
8
6
  #
9
- # AUTHORS:
10
- #
7
+ # = AUTHORS:
11
8
  # CREDIT Thomas Sawyer
12
9
  #
13
- # CHANGES:
14
- #
15
- # - LOG 2006-11-04 trans@gmail.com Use own delegator instead of Functor.
16
- # - LOG 2006-11-04 trans@gmail.com Now #as can take a block.
10
+ # = LOG:
11
+ # - 2006-11-04 trans@gmail.com Use own delegator instead of Functor.
12
+ # - 2006-11-04 trans@gmail.com Now #as can take a block.
17
13
  #
18
- # TODOs:
14
+ # = TODO:
19
15
  #
20
- # - TODO Probably get rid of __self__ or get a new name.
16
+ # - Probably get rid of __self__ or get a new name.
21
17
  # It is similar to #meta + #as, but just for Object/Kernel.
22
18
  #
23
- # - TODO Deprecatee either #super_method or #supermethod.
19
+ # - Deprecatee either #super_method or #supermethod.
24
20
 
25
21
  require 'facets/functor'
26
22
 
27
- #
28
23
  module Kernel
29
24
 
30
25
  # Returns a Functor that allows one to call any
@@ -42,6 +37,7 @@ module Kernel
42
37
  #
43
38
  # NOTE: This has been through a couple of renamings,
44
39
  # including #__object__, #__self__, and #self.
40
+
45
41
  def __real__
46
42
  @__real__ ||= Functor.new do |meth, *args| # &blk|
47
43
  Object.instance_method(meth).bind(self).call(*args) # ,&blk)
@@ -76,6 +72,7 @@ module Kernel
76
72
  end
77
73
 
78
74
  # Call parent class/module methods once bound to self.
75
+
79
76
  def send_as(ancestor, sym, *args, &blk)
80
77
  ancestor.instance_method(sym).bind(self).call(*args,&blk)
81
78
  end
@@ -148,7 +145,7 @@ end
148
145
 
149
146
  class As #:nodoc:
150
147
  # Privatize all methods except #binding an operators.
151
- private *instance_methods.select { |m| m !~ /(^__|^\W|^binding$)/ }
148
+ private(*instance_methods.select { |m| m !~ /(^__|^\W|^binding$)/ })
152
149
 
153
150
  def initialize(subject, ancestor)
154
151
  @subject = subject
@@ -159,64 +156,3 @@ class As #:nodoc:
159
156
  @ancestor.instance_method(sym).bind(@subject).call(*args,&blk)
160
157
  end
161
158
  end
162
-
163
-
164
- # _____ _
165
- # |_ _|__ ___| |_
166
- # | |/ _ \/ __| __|
167
- # | | __/\__ \ |_
168
- # |_|\___||___/\__|
169
- #
170
- =begin test
171
-
172
- require 'test/unit'
173
-
174
- class TestKernelSuper < Test::Unit::TestCase
175
-
176
- class X ; def x ; 1 ; end ; end
177
- class Y < X ; def x ; 2 ; end ; end
178
- class Z < Y ; def x ; superior(X) ; end ; end
179
-
180
- def test_superior
181
- z = Z.new
182
- assert_equal( 1, z.x )
183
- end
184
-
185
- class X2 ; def x ; 1 ; end ; end
186
- class Y2 < X2 ; def x ; 2 ; end ; end
187
- class Z2 < Y2 ; def x ; 3 ; end ; end
188
-
189
- def test_super_method
190
- x = X2.new
191
- z = Z2.new
192
- s0 = x.method( :x )
193
- s1 = z.super_method( X2, :x )
194
- assert_equal( s0.call, s1.call )
195
- end
196
-
197
- class A
198
- def x; "A.x"; end
199
- def y; "A.y"; end
200
- end
201
- class B < A
202
- def x; "B.x" end
203
- def y; "B.y" end
204
- end
205
- class C < B
206
- def x; "C.x"; end
207
- def y; as(B).x ; end
208
- end
209
-
210
- def test_as
211
- c = C.new
212
- assert_equal("B.x", c.y)
213
- assert_equal("C.x", c.x)
214
- end
215
-
216
- def test_send_as
217
- assert_equal( String, "A".send_as(Object, :class) )
218
- end
219
-
220
- end
221
-
222
- =end
@@ -1,116 +1,34 @@
1
- # TITLE:
2
- #
3
- # K-Combinators, Tap and Returning
4
- #
5
- # SUMMARY:
6
- #
7
- # Veriations on K-Combinator, namely #tap and
8
- # #returning, and returning's alias #with.
9
- #
10
- # AUTHORS:
11
- #
12
- # - Mikael Brockman
13
- # -Thomas Sawyer
1
+ # DEPRECATE for 1.9.
2
+ unless (RUBY_VERSION[0,3] == '1.9')
14
3
 
15
- #
16
- module Kernel
4
+ module Kernel
17
5
 
18
- # Yield self -and- return self.
6
+ # The tap K-Combinator. This yields self -and- returns self.
7
+ #
8
+ # CREDIT: ?
19
9
 
20
- def tap(&b)
21
- if block_given?
22
- b.arity == 1 ? yield(self) : instance_eval(&b)
23
- end
24
- self
25
- end
26
-
27
- # require 'facets/functor'
28
- #
29
- # # Yield self -and- return self.
30
- #
31
- # def tap(&b)
32
- # if block_given?
33
- # b.arity == 1 ? yield(self) : instance_eval(&b)
34
- # self
35
- # else
36
- # Functor.new{ |op, *args| self.send(op, *args); self }
37
- # end
38
- # end
39
-
40
- # A Ruby-ized realization of the K combinator.
41
- #
42
- # returning Book.new do |book|
43
- # book.title = "Imperium"
44
- # book.author = "Ulick Varange"
45
- # end
46
- #
47
- # Also aliased as #with.
48
- #
49
- # def foo
50
- # with values = [] do
51
- # values << 'bar'
52
- # values << 'baz'
53
- # end
54
- # end
55
- #
56
- # foo # => ['bar', 'baz']
57
- #
58
- # Technically, #returning probably should force the return of
59
- # the stated object irregardless of any return statements that
60
- # might appear within it's block. This might differentiate
61
- # #returning from #with, however it also would require
62
- # implementation in Ruby itself.
63
-
64
- def returning(obj=self)
65
- yield obj
66
- obj
67
- end
68
-
69
- alias :with :returning
70
-
71
- # Repeat loop until it yeilds false or nil.
72
-
73
- def complete
74
- loop { break unless yield }
75
- end
76
-
77
- end
78
-
79
-
80
-
81
- # _____ _
82
- # |_ _|__ ___| |_
83
- # | |/ _ \/ __| __|
84
- # | | __/\__ \ |_
85
- # |_|\___||___/\__|
86
- #
87
- =begin test
88
-
89
- require 'test/unit'
90
-
91
- class TCKernel < Test::Unit::TestCase
92
-
93
- def test_returning
94
- foo = returning( values = [] ) do
95
- values << 'bar'
96
- values << 'baz'
10
+ def tap(&b)
11
+ if block_given?
12
+ b.arity == 1 ? yield(self) : instance_eval(&b)
97
13
  end
98
- assert_equal( ['bar', 'baz'], foo )
14
+ self
99
15
  end
100
16
 
101
- def test_tap
102
- x = "foo"
103
- r = ("foobar".tap{ gsub! /bar/, '' })
104
- assert_equal(x, r)
105
- end
106
-
107
- def test_tap_array
108
- x = [1,2,3]
109
- x.tap{ |a|
110
- assert_equal(x, a)
111
- }
112
- end
17
+ # This is just an odd consideration for #tap using Functor:
18
+ #
19
+ # require 'facets/functor'
20
+ #
21
+ # # Yield self -and- return self.
22
+ #
23
+ # def tap(&b)
24
+ # if block_given?
25
+ # b.arity == 1 ? yield(self) : instance_eval(&b)
26
+ # self
27
+ # else
28
+ # Functor.new{ |op, *args| self.send(op, *args); self }
29
+ # end
30
+ # end
113
31
 
114
32
  end
115
33
 
116
- =end
34
+ end
@@ -4,6 +4,11 @@ module Kernel
4
4
  # is considered to have value if it is not nil?
5
5
  # and if it responds to #empty?, is not empty.
6
6
  #
7
+ # nil.val? #=> false
8
+ # [].val? #=> false
9
+ # 10.val? #=> true
10
+ # [nil].val? #=> true
11
+
7
12
  def val?
8
13
  return false if nil?
9
14
  return false if empty? if respond_to?(:empty?)
@@ -15,14 +20,13 @@ module Kernel
15
20
  # "hello".not_nil? # -> true
16
21
  # nil.not_nil? # -> false
17
22
  #
18
- # CREDIT Gavin Sinclair
23
+ # CREDIT: Gavin Sinclair
19
24
 
20
25
  def not_nil?
21
26
  not nil?
22
27
  end
23
28
 
24
- # TODO Do not need two of these.
25
- #alias_method :non_nil?, :not_nil?
29
+ alias_method :non_nil?, :not_nil?
26
30
 
27
31
  # Is self included in other?
28
32
  #
@@ -34,46 +38,3 @@ module Kernel
34
38
  end
35
39
 
36
40
  end
37
-
38
-
39
- # _____ _
40
- # |_ _|__ ___| |_
41
- # | |/ _ \/ __| __|
42
- # | | __/\__ \ |_
43
- # |_|\___||___/\__|
44
- #
45
- =begin test
46
-
47
- require 'test/unit'
48
-
49
- class TestKernelVal < Test::Unit::TestCase
50
-
51
- def test_val_1
52
- f = nil
53
- t = 1
54
- assert( ! f.val? )
55
- assert( t.val? )
56
- end
57
-
58
- def test_val_2
59
- f = []
60
- t = [1]
61
- assert( ! f.val? )
62
- assert( t.val? )
63
- end
64
-
65
- def test_val_3
66
- f = ''
67
- t = '1'
68
- assert( ! f.val? )
69
- assert( t.val? )
70
- end
71
-
72
- def test_in?
73
- assert( 5.in?(0..10) )
74
- assert( 5.in?([1,2,3,4,5]) )
75
- end
76
-
77
- end
78
-
79
- =end
@@ -1,21 +1,3 @@
1
- # FILE:
2
- #
3
- # kernel/with.rb
4
- #
5
- # DESCRIPTION:
6
- #
7
- # With-accessors create singleton attributes.
8
- #
9
- # AUTHORS:
10
- #
11
- # CREDIT THomas Sawyer
12
- #
13
- # NOTES:
14
- #
15
- # TODO Consider the use cases of these, and at the very
16
- # least find new names.
17
-
18
- #
19
1
  class Object
20
2
 
21
3
  # Takes a hash and creates (singleton) attr_readers for each key.
@@ -26,6 +8,8 @@ class Object
26
8
  # self.x #=> 1
27
9
  # self.y #=> 2
28
10
  #
11
+ # CREDIT: Trans
12
+
29
13
  def with_reader(h)
30
14
  (class << self ; self ; end).send( :attr_reader, *h.keys )
31
15
  h.each { |k,v| instance_variable_set("@#{k}", v) }
@@ -41,6 +25,8 @@ class Object
41
25
  # @x #=> 3
42
26
  # @y #=> 4
43
27
  #
28
+ # CREDIT: Trans
29
+
44
30
  def with_writer(h)
45
31
  (class << self ; self ; end).send( :attr_writer, *h.keys )
46
32
  h.each { |k,v| instance_variable_set("@#{k}", v) }
@@ -57,55 +43,11 @@ class Object
57
43
  # self.x #=> 3
58
44
  # self.y #=> 4
59
45
  #
46
+ # CREDIT: Trans
47
+
60
48
  def with_accessor(h)
61
49
  (class << self ; self ; end).send( :attr_accessor, *h.keys )
62
50
  h.each { |k,v| instance_variable_set("@#{k}", v) }
63
51
  end
64
52
 
65
53
  end
66
-
67
-
68
- # _____ _
69
- # |_ _|__ ___| |_
70
- # | |/ _ \/ __| __|
71
- # | | __/\__ \ |_
72
- # |_|\___||___/\__|
73
- #
74
- =begin test
75
-
76
- require 'test/unit'
77
-
78
- class TCKernel < Test::Unit::TestCase
79
- # fixture for #with_reader, #with_writer and #with_accessor
80
- class TestWith
81
- def initialize
82
- with_reader :foo => "FOO"
83
- with_writer :bar => "BAR"
84
- with_accessor :baz => "BAZ"
85
- end
86
- def get_bar
87
- @bar
88
- end
89
- end
90
-
91
- def test_with_reader
92
- assert_nothing_raised { @t = TestWith.new }
93
- assert_equal("FOO", @t.foo)
94
- end
95
-
96
- def test_with_writer
97
- assert_nothing_raised { @t = TestWith.new }
98
- assert_equal("BAR", @t.get_bar)
99
- @t.bar = "BAR2"
100
- assert_equal("BAR2", @t.get_bar)
101
- end
102
-
103
- def test_with_accessor
104
- assert_nothing_raised { @t = TestWith.new }
105
- assert_equal("BAZ", @t.baz)
106
- @t.baz = "BAZ2"
107
- assert_equal("BAZ2", @t.baz)
108
- end
109
- end
110
-
111
- =end
@@ -1,23 +1,14 @@
1
- # TITLE:
2
- # Matchset
3
- #
4
- # DESCRIPTION:
5
- # Matchdata methods to produces a hierachical list of a match result.
6
- # This also includes Regexp#arity.
7
- #
8
- # AUTHORS:
9
- # - Thomas Sawyer
10
-
11
- #
12
1
  class MatchData
13
2
 
14
- # TODO Is MatchData#match really worth having? It's kind of confusing w/ Regexp#match.
15
-
16
3
  # Return the primary match string. This is equivalent to +md[0]+.
17
4
  #
18
5
  # md = /123/.match "123456"
19
6
  # md.match #=> "123"
20
7
  #
8
+ # TODO: Is MatchData#match really worth having? It's kind of confusing w/ Regexp#match.
9
+ #
10
+ # CREDIT: Trans
11
+
21
12
  def match
22
13
  self[0]
23
14
  end
@@ -28,6 +19,8 @@ class MatchData
28
19
  # md.to_a #=> ["XXaabbccddeeffXX", "bb", "ccdd", "dd", "ee"]
29
20
  # md.matchset #=> ["XXaa", [["bb"], ["cc", ["dd"]], "ee"], "ffXX"]
30
21
  #
22
+ # CREDIT: Trans
23
+
31
24
  def matchset
32
25
  [pre_match, matchtree, post_match]
33
26
  end
@@ -39,6 +32,8 @@ class MatchData
39
32
  # md.to_a #=> ["XXaabbccddeeffXX", "bb", "ccdd", "dd", "ee"]
40
33
  # md.matchtree #=> [["bb"], ["cc", ["dd"]], "ee"]
41
34
  #
35
+ # CREDIT: Trans
36
+
42
37
  def matchtree(index=0)
43
38
  ret=[]
44
39
  b, e=self.begin(index), self.end(index)
@@ -59,40 +54,3 @@ class MatchData
59
54
  end
60
55
 
61
56
  end
62
-
63
-
64
- # _____ _
65
- # |_ _|__ ___| |_
66
- # | |/ _ \/ __| __|
67
- # | | __/\__ \ |_
68
- # |_|\___||___/\__|
69
- #
70
- =begin test
71
-
72
- require 'test/unit'
73
-
74
- class TestMatchData < Test::Unit::TestCase
75
-
76
- def test_match
77
- md = /X(a)(b)(c)X/.match("YXabcXY")
78
- assert_equal( "XabcX", md.match )
79
- end
80
-
81
- def test_matchtree_01
82
- md = /(bb)(cc(dd))(ee)/.match "XXaabbccddeeffXX"
83
- assert_equal( [["bb"], ["cc", ["dd"]], ["ee"]] , md.matchtree )
84
- end
85
-
86
- def test_matchtree_02
87
- md = /(bb)c(c(dd))(ee)/.match "XXaabbccddeeffXX"
88
- assert_equal( [["bb"], "c", ["c", ["dd"]], ["ee"]] , md.matchtree )
89
- end
90
-
91
- def test_matchset
92
- md = /(bb)(cc(dd))(ee)/.match "XXaabbccddeeffXX"
93
- assert_equal( ["XXaa", [["bb"], ["cc", ["dd"]], ["ee"]], "ffXX"] , md.matchset )
94
- end
95
-
96
- end
97
-
98
- =end