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,22 +1,14 @@
1
- # TITLE:
2
- # Proc Bind
3
- #
4
- # LOG:
5
- # - 2006-12-27 (trans) Deprecated use of TemporaryMethods module
6
-
7
- #
8
1
  class Proc
9
2
 
10
- # Bind a proc to an object. Returns a Method.
3
+ # Bind a Proc to an object returning a Method.
11
4
  #
12
5
  # The block's #to_s method (same as #inspect) is
13
6
  # used for the temporary method label defined in
14
7
  # the Object class.
15
8
  #
16
- # Note this dynamically loads thread.so if used.
17
- #--
18
- # But I'm not so sure it is thread critical anymore.
19
- #++
9
+ # NOTE: This dynamically loads thread.so if used.
10
+ # NOTE: Not so sure it is thread critical anymore.
11
+
20
12
  def bind(object=nil)
21
13
  require 'thread'
22
14
 
@@ -39,11 +31,22 @@ class Proc
39
31
  end
40
32
  Thread.critical = old
41
33
  end
34
+
42
35
  return meth
43
36
  end
44
37
 
45
38
  # Convert Proc to method.
46
39
  #
40
+ # Class X; end
41
+ #
42
+ # plusproc = lambda { |x| x + 1 }
43
+ # plusproc.to_method('foo', X)
44
+ # X.new.foo(1) #=> 2
45
+ #
46
+ # TODO: Should use singleton instead of object.class ?
47
+ #
48
+ # CREDIT: Trans
49
+
47
50
  def to_method(name=nil, object=nil)
48
51
  return bind unless name
49
52
 
@@ -57,51 +60,5 @@ class Proc
57
60
 
58
61
  object.method(name)
59
62
  end
60
- end
61
-
62
-
63
-
64
-
65
- # _____ _
66
- # |_ _|__ ___| |_
67
- # | |/ _ \/ __| __|
68
- # | | __/\__ \ |_
69
- # |_|\___||___/\__|
70
- #
71
- =begin test
72
-
73
- require 'test/unit'
74
-
75
- class TestProc < Test::Unit::TestCase
76
-
77
- def test_to_method
78
- a = 2
79
- tproc = proc { |x| x + a }
80
- tmethod = tproc.to_method(:tryit)
81
- assert_equal( 3, tmethod.call(1) )
82
- assert_respond_to( self, :tryit )
83
- assert_equal( 3, tryit(1) )
84
- end
85
-
86
- def test_memory_leak
87
- a = 2
88
- tproc = lambda { |x| x + a }
89
- 100.times {
90
- tmethod = tproc.to_method
91
- assert_equal( 3, tmethod.call(1) )
92
- }
93
- meths = (
94
- Object.instance_methods +
95
- Object.public_instance_methods +
96
- Object.private_instance_methods +
97
- Object.protected_instance_methods
98
- )
99
- meths = meths.select{ |s| s.to_s =~ /^_bind_/ }
100
- #meths = Symbol.all_symbols.select { |s| s.to_s =~ /^_bind_/ } # why ?
101
- assert_equal( 0, meths.size )
102
- end
103
-
104
- end
105
-
106
- =end
107
63
 
64
+ end
@@ -9,7 +9,7 @@ class Proc
9
9
  # a.compose(b).call(4) #=> 6
10
10
  # b.compose(a).call(4) #=> 4
11
11
  #
12
- # CREDIT Dave
12
+ # CREDIT: Dave
13
13
 
14
14
  def compose(g)
15
15
  raise ArgumentError, "arity count mismatch" unless arity == g.arity
@@ -24,12 +24,14 @@ class Proc
24
24
  # (a * b).call(4) #=> 6
25
25
  # (b * a).call(4) #=> 4
26
26
  #
27
- # CREDIT Dave
27
+ # CREDIT: Dave
28
28
 
29
29
  def *(x)
30
30
  if Integer===x
31
31
  # collect times
32
- a = []; x.times{|i| a << call(i)}; a
32
+ c = []
33
+ x.times{|i| c << call(i)}
34
+ c
33
35
  else
34
36
  # compose procs
35
37
  lambda{|*a| self[x[*a]]}
@@ -38,44 +40,8 @@ class Proc
38
40
 
39
41
  # Use a Proc as an observable.
40
42
  #
41
- # CREDIT Tim Pease
43
+ # CREDIT: Tim Pease
42
44
 
43
45
  alias_method :update, :call
44
46
 
45
47
  end
46
-
47
-
48
- # _____ _
49
- # |_ _|__ ___| |_
50
- # | |/ _ \/ __| __|
51
- # | | __/\__ \ |_
52
- # |_|\___||___/\__|
53
- #
54
- =begin test
55
-
56
- require 'test/unit'
57
-
58
- class TestProc < Test::Unit::TestCase
59
-
60
- def test_compose_op
61
- a = lambda { |x| x + 4 }
62
- b = lambda { |y| y / 2 }
63
- assert_equal( 6, (a * b).call(4) )
64
- assert_equal( 4, (b * a).call(4) )
65
- end
66
-
67
- def test_times_collect_op
68
- a = lambda { |x| x + 4 }
69
- assert_equal( [4,5,6], a * 3 )
70
- end
71
-
72
- def test_compose
73
- a = lambda { |x| x + 4 }
74
- b = lambda { |y| y / 2 }
75
- assert_equal( 6, (a.compose(b)).call(4) )
76
- assert_equal( 4, (b.compose(a)).call(4) )
77
- end
78
-
79
- end
80
-
81
- =end
@@ -5,6 +5,8 @@ module Kernel
5
5
  # adder = fn { |x,y| x + y }
6
6
  # adder[1,2] #=> 3
7
7
  #
8
+ # CREDIT: Trans
9
+
8
10
  alias_method :fn, :lambda
9
11
 
10
12
  end
@@ -1,24 +1,11 @@
1
- # = FILE
2
- #
3
- # combine.rb
4
- #
5
- # = DESCRIPTION
6
- #
7
- # Range extensions for combination.
8
- #
9
- # = AUTHORS
10
- #
11
- # CREDIT Daniel Schierbeck
12
- # CREDIT Brandon Keepers
13
- #
14
- # = NOTES
15
- #
16
- # TODO Incorporate end sentinal inclusion vs. exclusion in #combine.
17
-
18
- #
19
1
  class Range
20
2
 
21
3
  # Combine intervals.
4
+ #
5
+ # Range.combine(1..2, 2..4) #=> [1..4]
6
+ # Range.combine(1..2, 3..4) #=> [1..2, 3..4]
7
+ #
8
+ # CREDIT: Trans
22
9
 
23
10
  def self.combine(*intervals)
24
11
  intype = intervals.first.class
@@ -28,13 +15,13 @@ class Range
28
15
  [i.first, i.last]
29
16
  end
30
17
 
31
- intervals.sort.inject([]) do |result, (from, to)|
18
+ intervals.sort.each do |(from, to)| #inject([]) do |result,
32
19
  if result.empty? or from > result.last[1]
33
20
  result << [from, to]
34
21
  elsif to > result.last[1]
35
22
  result.last[1] = to
36
23
  end
37
- result
24
+ #result
38
25
  end
39
26
 
40
27
  if intype <= Range
@@ -44,40 +31,17 @@ class Range
44
31
  end
45
32
  end
46
33
 
47
- # Combine intervals.
34
+ # Combine ranges.
35
+ #
36
+ # (1..2).combine(2..4) #=> [1..4]
37
+ # (1..2).combine(3..4) #=> [1..2, 3..4]
38
+ #
39
+ # TODO: Incorporate end-sentinal inclusion vs. exclusion.
40
+ #
41
+ # CREDIT: Trans
48
42
 
49
43
  def combine(*intervals)
50
44
  Range.combine(self, *intervals)
51
45
  end
52
46
 
53
47
  end
54
-
55
-
56
-
57
- # _____ _
58
- # |_ _|__ ___| |_
59
- # | |/ _ \/ __| __|
60
- # | | __/\__ \ |_
61
- # |_|\___||___/\__|
62
- #
63
- =begin test
64
-
65
- require 'test/unit'
66
-
67
- class TestRangeCombine < Test::Unit::TestCase
68
-
69
- def test_combine_ranges
70
- r = Range.combine(0..4, 2..6, 6..10, 13..17, 12..19)
71
- x = [0..10, 12..19]
72
- assert_equal(x, r)
73
- end
74
-
75
- def test_combine_arrays_as_intervals
76
- r = Range.combine([0, 4], [2, 6], [6, 10], [13, 17], [12, 19])
77
- x = [[0, 10], [12, 19]]
78
- assert_equal(x, r)
79
- end
80
-
81
- end
82
-
83
- =end
@@ -1,20 +1,9 @@
1
- # = FILE
2
- #
3
- # overlap.rb
4
- #
5
- # = DESCRIPTION
6
- #
7
- # Range extensions for overlap comparison.
8
- #
9
- # = AUTHORS
10
- #
11
- # CREDIT Daniel Schierbeck
12
- # CREDIT Brandon Keepers
13
-
14
- #
15
1
  class Range
16
2
 
17
3
  # Do two ranges overlap?
4
+ #
5
+ # CREDIT: Daniel Schierbeck
6
+ # CREDIT: Brandon Keepers
18
7
 
19
8
  def overlap?(other)
20
9
  include?(other.first) or other.include?(first)
@@ -48,6 +37,9 @@ class Range
48
37
  #
49
38
  # (0..3).umbrella(1..2) #=> [-1,-1]
50
39
  #
40
+ # CREDIT: Trans
41
+ # CREDIT: Chris Kappler
42
+
51
43
  def umbrella(r)
52
44
  s = first <=> r.first
53
45
  e = r.last <=> last
@@ -68,6 +60,8 @@ class Range
68
60
  #
69
61
  # (1..3).within?(0..4) #=> true
70
62
  #
63
+ # CREDIT: Trans
64
+
71
65
  def within?(rng)
72
66
  case rng.umbrella(self)
73
67
  when [0,0], [-1,0], [0,-1], [-1,-1]
@@ -78,53 +72,3 @@ class Range
78
72
  end
79
73
 
80
74
  end
81
-
82
-
83
-
84
- # _____ _
85
- # |_ _|__ ___| |_
86
- # | |/ _ \/ __| __|
87
- # | | __/\__ \ |_
88
- # |_|\___||___/\__|
89
- #
90
- =begin test
91
-
92
- require 'test/unit'
93
-
94
- class TestRangeOverlap < Test::Unit::TestCase
95
-
96
- def test_umbrella_aligned
97
- assert_equal( [0,0], (3..6).umbrella(3..6) )
98
- assert_equal( [0,0], (3...6).umbrella(3...6) )
99
- end
100
-
101
- def test_umbrella_partial_aligned
102
- assert_equal( [1,0], (3..6).umbrella(2..6) )
103
- assert_equal( [0,1], (3..6).umbrella(3..7) )
104
- assert_equal( [-1,0], (3..6).umbrella(4..6) )
105
- assert_equal( [0,-1], (3..6).umbrella(3..5) )
106
- end
107
-
108
- def test_umbrella_offset
109
- assert_equal( [1,1], (3..6).umbrella(2..7) )
110
- assert_equal( [-1,1], (3..6).umbrella(4..7) )
111
- assert_equal( [1,-1], (3..6).umbrella(2..5) )
112
- assert_equal( [-1,-1], (3..6).umbrella(4..5) )
113
- end
114
-
115
- def test_umbrella_offset_by_exclusion
116
- $xx = true
117
- assert_equal( [0,1], (10...20).umbrella(10..20) )
118
- $xx = false
119
- end
120
-
121
- def test_within?
122
- assert( (4..5).within?(3..6) )
123
- assert( (3..6).within?(3..6) )
124
- assert(! (2..5).within?(3..6) )
125
- assert(! (5..7).within?(3..6) )
126
- end
127
-
128
- end
129
-
130
- =end
@@ -1,52 +1,17 @@
1
- # TITLE:
2
- # Regexp Arity
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 Regexp
2
+
13
3
  # Returns the number of backreferencing subexpressions.
14
4
  #
15
5
  # /(a)(b)(c)/.arity #=> 3
16
6
  # /(a(b(c)))/.arity #=> 3
17
7
  #
18
- # Note: This is not perfect, especially with regards to \x
8
+ # Note that this is not perfect, especially with regards to \x
19
9
  # and embedded comments.
10
+ #
11
+ # CREDIT: Trans
20
12
 
21
13
  def arity
22
- self.source.scan( /(?!\\)[(](?!\?[#=:!>-imx])/ ).length
23
- end
24
- end
25
-
26
-
27
- # _____ _
28
- # |_ _|__ ___| |_
29
- # | |/ _ \/ __| __|
30
- # | | __/\__ \ |_
31
- # |_|\___||___/\__|
32
- #
33
- =begin test
34
-
35
- require 'test/unit'
36
-
37
- class TestRegexpArity < Test::Unit::TestCase
38
-
39
- def test_arity
40
- r = /(1)(2)(3)/
41
- assert_equal( 3, r.arity )
42
- r = /(1)(2)(3)(4)/
43
- assert_equal( 4, r.arity )
44
- r = /(1)(2)((a)3)/
45
- assert_equal( 4, r.arity )
46
- r = /(?#nothing)(1)(2)(3)(?=3)/
47
- assert_equal( 3, r.arity )
48
- end
49
-
14
+ source.scan( /(?!\\)[(](?!\?[#=:!>-imx])/ ).length
50
15
  end
51
16
 
52
- =end
17
+ end
@@ -1,27 +1,58 @@
1
- # TITLE:
1
+ # = TITLE:
2
+ #
2
3
  # Stackable
3
4
  #
4
- # DESCRIPTION:
5
- # Stackable mixin.
5
+ # = DESCRIPTION:
6
+ #
7
+ # Stackable mixin provides #pop, #push, #pull, etc.
8
+ # It depends on #slice, #splice and #insert.
9
+ #
10
+ # = COPYRIGHT:
11
+ #
12
+ # Copyright (c) 2007 Thomas Sawyer
13
+ #
14
+ # Ruby License
15
+ #
16
+ # This module is free software. You may use, modify, and/or redistribute this
17
+ # software under the same terms as Ruby.
18
+ #
19
+ # This program is distributed in the hope that it will be useful, but WITHOUT
20
+ # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
21
+ # FOR A PARTICULAR PURPOSE.
22
+ #
23
+ # = AUTHORS:
24
+ #
25
+ # - Thomas Sawyer
6
26
 
7
27
  # Stackable mixin provides #pop, #push, #pull, etc.
8
28
  # It depends on #slice, #splice and #insert.
9
29
 
10
30
  module Stackable
11
31
 
32
+ # Pop item off stack.
12
33
  #
34
+ # a = [1, 2, 3]
35
+ # a.pop #=> 3
36
+ # a #=> [1, 2]
13
37
 
14
38
  def pop
15
39
  splice(-1)
16
40
  end
17
41
 
42
+ # Push item onto the stack.
18
43
  #
44
+ # a = [1, 2]
45
+ # a.push(3) #=> [1, 2, 3]
19
46
 
20
47
  def push(x)
21
48
  insert(-1,x)
22
49
  end
23
50
 
51
+ # Pull item off the stack.
24
52
  #
53
+ # a = [1, 2, 3]
54
+ # a.pull #=> 1
55
+ # a #=> [2, 3]
25
56
 
26
57
  def pull
27
58
  slice(0)
@@ -29,7 +60,12 @@ module Stackable
29
60
 
30
61
  alias_method :shift, :pull
31
62
 
63
+ # Poke item onto the stack.
32
64
  #
65
+ # a = [2, 3]
66
+ # a.poke(1) #=> [1, 2, 3]
67
+ #
68
+ # TODO: Better name (besides unshift)?
33
69
 
34
70
  def poke(x)
35
71
  insert(0,x)
@@ -37,11 +73,14 @@ module Stackable
37
73
 
38
74
  alias_method :unshift, :poke
39
75
 
76
+ # Peek at the top of the stack.
40
77
  #
78
+ # a = [1, 2, 3]
79
+ # a.peek #=> 3
80
+ # a #=> [1, 2, 3]
41
81
 
42
82
  def peek
43
83
  splice(-1)
44
84
  end
45
85
 
46
86
  end
47
-