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,18 +1,15 @@
1
- # TITLE:
2
- #
3
- # Class Descendent Extensions
4
- #
5
- # SUMMARY:
6
- #
7
- # Extension methods for Class class for accessing
8
- # and even removing subclasses.
9
- #
10
- # CREDITS:
11
- #
12
- # - ?
13
-
14
1
  class Class
15
2
 
3
+ # List all descedents of this class.
4
+ #
5
+ # class X ; end
6
+ # class A < X; end
7
+ # class B < X; end
8
+ # X.descendents #=> [A,B]
9
+ #
10
+ # NOTE: This is a intesive operation. Do not
11
+ # expect it to be super fast.
12
+
16
13
  def descendents
17
14
  subclass = []
18
15
  ObjectSpace.each_object( Class ) do |c|
@@ -23,8 +20,13 @@ class Class
23
20
  return subclass
24
21
  end
25
22
 
23
+ # Obvious alias for descendents.
24
+
26
25
  alias_method :subclasses, :descendents
27
26
 
27
+ # Remove descendents. This simple deletes the constant
28
+ # associated to the descendents name.
29
+
28
30
  def remove_descendents
29
31
  self.descendents.each do |subclass|
30
32
  Object.send(:remove_const, subclass.name) rescue nil
@@ -32,37 +34,8 @@ class Class
32
34
  ObjectSpace.garbage_collect
33
35
  end
34
36
 
37
+ # Obvious alias for remove_descendents.
38
+
35
39
  alias_method :remove_subclasses, :remove_descendents
36
40
 
37
41
  end
38
-
39
-
40
- # _____ _
41
- # |_ _|__ ___| |_
42
- # | |/ _ \/ __| __|
43
- # | | __/\__ \ |_
44
- # |_|\___||___/\__|
45
- #
46
- =begin test
47
-
48
- require 'test/unit'
49
-
50
- class TestClassDescendents < Test::Unit::TestCase
51
-
52
- class A ; end
53
- class B < A ; end
54
- class C < B ; end
55
-
56
- def test_descendents
57
- assert_equal( [C,B], A.descendents )
58
- end
59
-
60
- def test_remove_descendents
61
- assert_nothing_raised { B.remove_descendents }
62
- # doesn't work despite above; not sure why
63
- #assert_equal( [B], A.descendents )
64
- end
65
-
66
- end
67
-
68
- =end
@@ -1,22 +1,3 @@
1
- # +FILE+
2
- #
3
- # bound.rb
4
- #
5
- # +DESCRIPTION+
6
- #
7
- # Limit comparisons.
8
- #
9
- # +AUTHORS+
10
- #
11
- # CREDIT Florian Gross
12
- #
13
- # +NOTES+
14
- #
15
- # NOTE Are the module methods better as parameterized mixins?
16
- #
17
- # TODO Maybe improve the naming or the module methods.
18
-
19
- #
20
1
  module Comparable
21
2
 
22
3
  # Returns the lower of self or x.
@@ -24,6 +5,8 @@ module Comparable
24
5
  # 4.at_least(5) #=> 5
25
6
  # 6.at_least(5) #=> 6
26
7
  #
8
+ # CREDIT Florian Gross
9
+
27
10
  def at_least(x)
28
11
  (self >= x) ? self : x
29
12
  end
@@ -33,6 +16,8 @@ module Comparable
33
16
  # 4.at_most(5) #=> 4
34
17
  # 6.at_most(5) #=> 5
35
18
  #
19
+ # CREDIT Florian Gross
20
+
36
21
  def at_most(x)
37
22
  (self <= x) ? self : x
38
23
  end
@@ -48,6 +33,8 @@ module Comparable
48
33
  # 9.clip(2,7) #=> 7
49
34
  # 1.clip(2,7) #=> 2
50
35
  #
36
+ # CREDIT Trans
37
+
51
38
  def clip(lower, upper=nil)
52
39
  return lower if self < lower
53
40
  return self unless upper
@@ -62,59 +49,10 @@ module Comparable
62
49
  # 4.cap(5) #=> 4
63
50
  # 6.cap(5) #=> 5
64
51
  #
52
+ # CREDIT Trans
53
+
65
54
  def cap(upper)
66
55
  (self <= upper) ? self : upper
67
56
  end
68
57
 
69
58
  end
70
-
71
-
72
- # _____ _
73
- # |_ _|__ ___| |_
74
- # | |/ _ \/ __| __|
75
- # | | __/\__ \ |_
76
- # |_|\___||___/\__|
77
- #
78
- =begin test
79
-
80
- require 'test/unit'
81
-
82
- class TestComparable < Test::Unit::TestCase
83
-
84
- def test_at_most
85
- assert_equal( 3, 3.at_most(4) )
86
- assert_equal( 4, 4.at_most(4) )
87
- assert_equal( 4, 5.at_most(4) )
88
- end
89
-
90
- def test_at_least
91
- assert_equal( 4, 3.at_least(4) )
92
- assert_equal( 4, 4.at_least(4) )
93
- assert_equal( 5, 5.at_least(4) )
94
- end
95
-
96
- def test_clip
97
- assert_equal( 4, 3.clip(4) )
98
- assert_equal( 4, 4.clip(4) )
99
- assert_equal( 5, 5.clip(4) )
100
- assert_equal( 4, 4.clip(3,5) )
101
- assert_equal( 3, 3.clip(3,5) )
102
- assert_equal( 5, 5.clip(3,5) )
103
- assert_equal( 3, 2.clip(3,5) )
104
- assert_equal( 5, 6.clip(3,5) )
105
- assert_equal( 'd', 'd'.clip('c','e') )
106
- assert_equal( 'c', 'c'.clip('c','e') )
107
- assert_equal( 'e', 'e'.clip('c','e') )
108
- assert_equal( 'c', 'b'.clip('c','e') )
109
- assert_equal( 'e', 'f'.clip('c','e') )
110
- end
111
-
112
- def test_cap
113
- assert_equal( 3, 3.cap(4) )
114
- assert_equal( 4, 4.cap(4) )
115
- assert_equal( 4, 5.cap(4) )
116
- end
117
-
118
- end
119
-
120
- =end
@@ -1,23 +1,3 @@
1
- # TITLE:
2
- #
3
- # Cmp and Succ/Pred
4
- #
5
- # SUMMARY:
6
- #
7
- # Comparison and Succ/Pred extensions.
8
- #
9
- # AUTHORS:
10
- #
11
- # - Florian Gross
12
- # - Thomas Sawyer
13
- #
14
- # NOTES:
15
- #
16
- # - NOTE Are the module methods better as parameterized mixins?
17
- #
18
- # - TODO Maybe improve the naming or the module methods.
19
-
20
- #
21
1
  class Integer
22
2
  # This is needed to allow Integer to look back to
23
3
  # its Numeric ancestor for the new definition of #succ.
@@ -25,7 +5,6 @@ class Integer
25
5
  remove_method( :succ )
26
6
  end
27
7
 
28
- #
29
8
  module Comparable
30
9
  # Alternate name for comparison operator #<=>.
31
10
  #
@@ -35,6 +14,8 @@ module Comparable
35
14
  #
36
15
  # This fundamental compare method is used to keep
37
16
  # comparison compatible with <tt>#succ</tt>.
17
+ #
18
+ # CREDIT Peter Vanbroekhoven
38
19
 
39
20
  def cmp(o)
40
21
  self<=>o
@@ -50,6 +31,8 @@ class String # Compare method that takes length into account.
50
31
  # "abcd".cmp("abc") #=> 1
51
32
  # "abc".cmp("abcd") #=> -1
52
33
  # "xyz".cmp("abc") #=> 1
34
+ #
35
+ # CREDIT Peter Vanbroekhoven
53
36
 
54
37
  def cmp(other)
55
38
  return -1 if length < other.length
@@ -62,6 +45,8 @@ class String # Compare method that takes length into account.
62
45
  # "abc".succ #=> "abd"
63
46
  # "abc".succ(4) #=> "abg"
64
47
  # "abc".succ(24) #=> "aca"
48
+ #
49
+ # CREDIT Trans
65
50
 
66
51
  def succ(n=1)
67
52
  s = self
@@ -77,6 +62,8 @@ class Numeric
77
62
  #
78
63
  # 4.distance(3) #=> 1
79
64
  #
65
+ # CREDIT Trans
66
+
80
67
  def distance( other )
81
68
  self - other
82
69
  end
@@ -85,6 +72,8 @@ class Numeric
85
72
  #
86
73
  # 3.succ(2) #=> 5
87
74
  #
75
+ # CREDIT Trans
76
+
88
77
  def succ(n=nil)
89
78
  n ||= 1
90
79
  self + n
@@ -94,79 +83,10 @@ class Numeric
94
83
  #
95
84
  # 3.pred(2) #=> 1
96
85
  #
86
+ # CREDIT Trans
87
+
97
88
  def pred(n=nil)
98
89
  n ||= 1
99
90
  self - n
100
91
  end
101
92
  end
102
-
103
-
104
- # _____ _
105
- # |_ _|__ ___| |_
106
- # | |/ _ \/ __| __|
107
- # | | __/\__ \ |_
108
- # |_|\___||___/\__|
109
- #
110
- =begin test
111
-
112
- require 'test/unit'
113
-
114
- class TestComparable < Test::Unit::TestCase
115
-
116
- def test_cmp
117
- assert_equal( -1, 3.cmp(4) )
118
- assert_equal( 0, 3.cmp(3) )
119
- assert_equal( 1, 3.cmp(2) )
120
- end
121
-
122
- end
123
-
124
- class TestStringCompare < Test::Unit::TestCase
125
-
126
- def test_cmp
127
- assert_equal( 0, "abc".cmp("abc") )
128
- assert_equal( -1, "abc".cmp("abcd") )
129
- assert_equal( 1, "abcd".cmp("abc") )
130
- assert_equal( -1, "abc".cmp("bcd") )
131
- assert_equal( 1, "bcd".cmp("abc") )
132
- end
133
-
134
- def test_succ
135
- assert_equal( "b", "a".succ )
136
- assert_equal( "b", "a".succ(1) )
137
- assert_equal( "c", "a".succ(2) )
138
- assert_equal( "d", "a".succ(3) )
139
- end
140
-
141
- end
142
-
143
- class TestNumericCompare < Test::Unit::TestCase
144
-
145
- def test_distance
146
- assert_equal( 4, 10.distance(6) )
147
- assert_equal( 2, 10.distance(8) )
148
- assert_equal( -2, 7.distance(9) )
149
- end
150
-
151
-
152
- def test_pred
153
- assert_equal( 3, 4.pred )
154
- assert_equal( -3, -2.pred )
155
- assert_equal( 2, 4.pred(2) )
156
- assert_equal( -4, -2.pred(2) )
157
- assert_equal( 6, 4.pred(-2) )
158
- assert_equal( 0, -2.pred(-2) )
159
- end
160
-
161
- def test_succ
162
- assert_equal( 5, 4.succ )
163
- assert_equal( -1, -2.succ )
164
- assert_equal( 6, 4.succ(2) )
165
- assert_equal( 0, -2.succ(2) )
166
- assert_equal( 2, 4.succ(-2) )
167
- assert_equal( -4, -2.succ(-2) )
168
- end
169
-
170
- end
171
-
172
- =end
@@ -6,7 +6,9 @@
6
6
  #
7
7
  # Conversion extensions.
8
8
  #
9
- # CREDITS:
9
+ # _A horse is a horse, a horse of course!_
10
+ #
11
+ # AUTHORS:
10
12
  #
11
13
  # - Thomas Sawyer
12
14
  # - Willian James
@@ -17,7 +19,7 @@
17
19
 
18
20
  require 'facets/functor'
19
21
 
20
- #
22
+
21
23
  class Array
22
24
 
23
25
  # Converts a two-element associative array into a hash.
@@ -30,11 +32,13 @@ class Array
30
32
  # a = [ [:a,1,2], [:b,3] ]
31
33
  # a.to_h(true) #=> { :a=>[1,2], :b=>[3] }
32
34
  #
33
- # NOTE: the use of a values parameter has been deprecated
35
+ # Note that the use of a values parameter has been deprecated
34
36
  # because that functionality is as simple as:
35
37
  #
36
38
  # array1.zip(array2).to_h
37
39
  #
40
+ # CREDIT: Trans
41
+
38
42
  def to_h(arrayed=nil)
39
43
  h = {}
40
44
  if arrayed #or (flatten.size % 2 == 1)
@@ -52,6 +56,10 @@ class Array
52
56
  end
53
57
 
54
58
  # Turn an array into a file path.
59
+ #
60
+ # ["usr", "local", "lib"].to_path #=> "usr/local/lib"
61
+ #
62
+ # CREDIT: Trans
55
63
 
56
64
  def to_path
57
65
  File.join( *(self.compact) )
@@ -59,10 +67,8 @@ class Array
59
67
 
60
68
  end
61
69
 
62
- #
63
- class Class
64
70
 
65
- # CREDIT Daniel Schierbeck
71
+ class Class
66
72
 
67
73
  # Convert instatiation of a class into a Proc.
68
74
  #
@@ -78,6 +84,7 @@ class Class
78
84
  #
79
85
  # %w(john bob jane hans).map(&Person) => [john, bob, jane, hans]
80
86
  #
87
+ # CREDIT: Daniel Schierbeck
81
88
 
82
89
  def to_proc
83
90
  proc{|*args| new(*args)}
@@ -85,7 +92,7 @@ class Class
85
92
 
86
93
  end
87
94
 
88
- #
95
+
89
96
  module Enumerable
90
97
 
91
98
  # Produces a hash from an Enumerable with index for keys.
@@ -100,7 +107,9 @@ module Enumerable
100
107
  # enu = 'a'..'b'
101
108
  # enu.to_hash{ |e,i| e } #=> { 0=>'a', 1=>'b' }
102
109
  #
103
- # See also #graph.
110
+ # See also #mash.
111
+ #
112
+ # CREDIT: Trans
104
113
 
105
114
  def to_hash( &blk )
106
115
  h = {}
@@ -112,7 +121,10 @@ module Enumerable
112
121
  h
113
122
  end
114
123
 
124
+ # Convert an Enumerable object into a hash bu first
125
+ # turning it into an array.
115
126
  #
127
+ # CREDIT: Trans
116
128
 
117
129
  def to_h(arrayed=nil)
118
130
  to_a.to_h(arrayed)
@@ -120,11 +132,13 @@ module Enumerable
120
132
 
121
133
  end
122
134
 
123
- #
135
+
124
136
  class Hash
125
137
 
126
138
  # Like Array#join but specialized to Hash.
127
139
  #
140
+ # CREDIT: Mauricio Fernandez
141
+
128
142
  def join(pair_divider='', elem_divider='')
129
143
  s = []
130
144
  each_pair { |k,v| s << "#{k}#{pair_divider}#{v}" }
@@ -135,13 +149,9 @@ class Hash
135
149
  #
136
150
  # {"a"=>1,"b"=>2}.to_h #=> {"b"=>2,"a"=>1}
137
151
  #
138
- #--
139
- # A horse is a horse, a horse of course.
140
- #++
141
- def to_h; rehash; end
152
+ # CREDIT: Forian Gross
142
153
 
143
- # CREDIT Forian Gross
144
- # CREDIT Mauricio Fernandez
154
+ def to_h; rehash; end
145
155
 
146
156
  # Constructs a Proc object from a hash such
147
157
  # that the parameter of the Proc is assigned
@@ -153,6 +163,7 @@ class Hash
153
163
  # p.call(o)
154
164
  # o.a #=> 1
155
165
  #
166
+ # CREDIT: Trans
156
167
 
157
168
  def to_proc
158
169
  lambda do |o|
@@ -163,6 +174,13 @@ class Hash
163
174
  end
164
175
  end
165
176
 
177
+ # A fault-tolerent version of #to_proc.
178
+ #
179
+ # It works just like #to_proc, but the block will make
180
+ # sure# the object responds to the assignment.
181
+ #
182
+ # CREDIT: Trans
183
+
166
184
  def to_proc_with_reponse
167
185
  lambda do |o|
168
186
  self.each do |k,v|
@@ -172,12 +190,12 @@ class Hash
172
190
  end
173
191
  end
174
192
 
175
- # CREDIT Daniel Berger
176
-
177
193
  # A method to convert a Hash into a Struct.
178
194
  #
179
195
  # h = {:name=>"Dan","age"=>33,"rank"=>"SrA","grade"=>"E4"}
180
196
  # s = h.to_struct("Foo")
197
+ #
198
+ # CREDIT: Daniel Berger
181
199
 
182
200
  def to_struct(struct_name)
183
201
  Struct.new(struct_name,*keys).new(*values)
@@ -186,23 +204,30 @@ class Hash
186
204
  end
187
205
 
188
206
 
189
- #
190
207
  class NilClass
191
208
 
192
209
  # Why doesn't Ruby have therese already?
193
210
 
194
- # Allows <tt>nil</tt> to respond to #to_f.
195
- # Always returns <tt>0</tt>.
196
- #
197
- # nil.to_f #=> 0.0
198
- #
199
- def to_f; 0.0; end
211
+ unless (RUBY_VERSION[0,3] == '1.9')
212
+
213
+ # Allows <tt>nil</tt> to respond to #to_f.
214
+ # Always returns <tt>0</tt>.
215
+ #
216
+ # nil.to_f #=> 0.0
217
+ #
218
+ # CREDIT: Matz
219
+
220
+ def to_f; 0.0; end
221
+
222
+ end
200
223
 
201
224
  # Allows <tt>nil</tt> to create an empty hash,
202
225
  # similar to #to_a and #to_s.
203
226
  #
204
- # nil.to_h #=> {}
227
+ # nil.to_h #=> {}
205
228
  #
229
+ # CREDIT: Trans
230
+
206
231
  def to_h; {}; end
207
232
 
208
233
  end
@@ -219,6 +244,7 @@ class Proc
219
244
  # }
220
245
  # l.to_h #=> {:a=>1, :b=>2, :c=>3}
221
246
  #
247
+ # CREDIT: Trans
222
248
 
223
249
  def to_h
224
250
  h = {}
@@ -229,12 +255,14 @@ class Proc
229
255
 
230
256
  end
231
257
 
232
- #
258
+
233
259
  class Range
234
260
 
235
261
  # A thing really should know itself.
236
262
  # This simply returns _self_.
237
263
  #
264
+ # CREDIT: Trans
265
+
238
266
  def to_r
239
267
  self
240
268
  end
@@ -246,13 +274,15 @@ class Range
246
274
  # interpretor such that it can coerce Range-like
247
275
  # objects into a Range.
248
276
  #
277
+ # CREDIT: Trans
278
+
249
279
  def to_range
250
280
  self
251
281
  end
252
282
 
253
283
  end
254
284
 
255
- #
285
+
256
286
  class Regexp
257
287
 
258
288
  # Simply returns itself. Helpful when converting
@@ -263,6 +293,8 @@ class Regexp
263
293
  #
264
294
  # /abc/.to_re #=> /abc/
265
295
  #
296
+ # CREDIT: Trans
297
+
266
298
  def to_re( esc=false )
267
299
  self # Of course, things really should know how to say "I" ;)
268
300
  end
@@ -270,14 +302,17 @@ class Regexp
270
302
  # Like #to_re, but following Ruby's formal definitions,
271
303
  # only a Regular expression type object will respond to this.
272
304
  #
273
- # Note: To be of much real use this should be defined in core Ruby.
305
+ # Note that to be of much real use this should be defined in core Ruby.
306
+ #
307
+ # CREDIT: Florian Gross
308
+
274
309
  def to_regexp
275
310
  self
276
311
  end
277
312
 
278
313
  end
279
314
 
280
- #
315
+
281
316
  class String
282
317
 
283
318
  # Get a constant by a given string name.
@@ -288,12 +323,16 @@ class String
288
323
  # since it can not access contants relative to the current
289
324
  # execution context. But without a binding_of_caller that
290
325
  # does not seem possible.
326
+ #
327
+
291
328
  def to_const
292
329
  split('::').inject(Object){ |namespace,name| namespace.const_get(name) }
293
330
  end
294
331
 
295
332
  # Parse data from string.
296
333
  #
334
+ # CREDIT: Trans
335
+
297
336
  def to_date
298
337
  require 'date'
299
338
  require 'parsedate'
@@ -302,6 +341,8 @@ class String
302
341
 
303
342
  # Parse string to time.
304
343
  #
344
+ # CREDIT: Trans
345
+
305
346
  def to_time
306
347
  require 'time'
307
348
  Time.parse(self)
@@ -313,6 +354,8 @@ class String
313
354
  #
314
355
  # "[".to_re #=> /\[/
315
356
  #
357
+ # CREDIT: Trans
358
+
316
359
  def to_re(esc=true)
317
360
  Regexp.new((esc ? Regexp.escape(self) : self))
318
361
  end
@@ -322,6 +365,8 @@ class String
322
365
  #
323
366
  # "a?".to_rx #=> /a?/
324
367
  #
368
+ # CREDIT: Trans
369
+
325
370
  def to_rx
326
371
  Regexp.new(self)
327
372
  end
@@ -332,15 +377,15 @@ class String
332
377
  # xyp.class #=> Proc
333
378
  # xyp.call(1,2) #=> 3
334
379
  #
335
- #--
336
- # Note: Sure would be nice if this could
337
- # grab the caller's context!
338
- #++
380
+ # NOTE: Sure would be nice if this could grab the caller's context!
381
+ #
382
+ # CREDIT: Trans
383
+
339
384
  def to_proc(context=nil)
340
385
  if context
341
386
  if context.kind_of?(Binding) or context.kind_of?(Proc)
342
387
  Kernel.eval "proc { #{self} }", context
343
- else context
388
+ else #context
344
389
  context.instance_eval "proc { #{self} }"
345
390
  end
346
391
  else
@@ -364,9 +409,34 @@ class String
364
409
 
365
410
  end
366
411
 
367
- #
412
+
368
413
  class Symbol
369
414
 
415
+ unless (RUBY_VERSION[0,3] == '1.9')
416
+
417
+ # Turn a symbol into a proc calling the method to
418
+ # which it refers.
419
+ #
420
+ # up = :upcase.to_proc
421
+ # up.call("hello") #=> HELLO
422
+ #
423
+ # More useful is the fact that this allows <tt>&</tt>
424
+ # to be used to coerce Symbol into Proc.
425
+ #
426
+ # %w{foo bar qux}.map(&:upcase) #=> ["FOO","BAR","QUX"]
427
+ # [1, 2, 3].inject(&:+) #=> 6
428
+ #
429
+ # TODO: Deprecate for Ruby 1.9+.
430
+ #
431
+ # CREDIT: Florian Gross
432
+ # CREDIT: Nobuhiro Imai
433
+
434
+ def to_proc
435
+ Proc.new{|*args| args.shift.__send__(self, *args)}
436
+ end
437
+
438
+ end
439
+
370
440
  # Get a constant by a given symbol name.
371
441
  #
372
442
  # :Class.to_const #=> Class
@@ -375,31 +445,11 @@ class Symbol
375
445
  # since it can not access contants relative to the current
376
446
  # execution context. But without a binding_of_caller that
377
447
  # does not seem possible.
448
+
378
449
  def to_const
379
450
  to_s.split('::').inject(Object){ |namespace,name| namespace.const_get(name) }
380
451
  end
381
452
 
382
- # CREDIT Florian Gross
383
- # CREDIT Nobuhiro Imai
384
-
385
- # NOTE Symbol#to_proc is already in 1.9+.
386
-
387
- # Turn a symbol into a proc calling the method to
388
- # which it refers.
389
- #
390
- # up = :upcase.to_proc
391
- # up.call("hello") #=> HELLO
392
- #
393
- # More useful is the fact that this allows <tt>&</tt>
394
- # to be used to coerce Symbol into Proc.
395
- #
396
- # %w{foo bar qux}.map(&:upcase) #=> ["FOO","BAR","QUX"]
397
- # [1, 2, 3].inject(&:+) #=> 6
398
-
399
- def to_proc
400
- Proc.new{|*args| args.shift.__send__(self, *args)}
401
- end
402
-
403
453
  # Same functionality as before, just a touch more efficient.
404
454
  #
405
455
  #--
@@ -426,279 +476,30 @@ class Symbol
426
476
 
427
477
  end
428
478
 
429
- #
430
- class Time
431
-
432
- #--
433
- # CHANGE 2006-12-10 <transfire@gmail.com>
434
- # * Added FORMAT constant to make more flexible.
435
- #++
436
-
437
- unless const_defined?('FORMAT')
438
- FORMAT = {
439
- :db => "%Y-%m-%d %H:%M:%S",
440
- :dbase => "%Y-%m-%d %H:%M:%S",
441
- :datbase => "%Y-%m-%d %H:%M:%S",
442
- :utc => "%Y-%m-%d %H:%M:%S",
443
- :short => "%d %b %H:%M",
444
- :long => "%B %d, %Y %H:%M",
445
- :day1st => "%d-%m-%Y %H:%M",
446
- :dmYHM => "%d-%m-%Y %H:%M",
447
- :rfc822 => "%a, %d %b %Y %H:%M:%S %z",
448
- nil => "%a %b %d %H:%M:%S %Z %Y"
449
- }
450
- end
451
-
452
- def stamp( fmt = nil )
453
- unless String === fmt
454
- fmt = FORMAT[fmt]
455
- end
456
- strftime(fmt).strip
457
- end
458
-
459
- def self.stamp(*args)
460
- now.stamp(*args)
461
- end
462
-
463
- # Enhance #to_s by aliasing to #stamp.
464
- alias_method :to_s, :stamp
465
-
466
- # Convert a Time to a Date. Time is a superset of Date.
467
- # It is the year, month and day that are carried over.
468
- def to_date
469
- require 'date'
470
- ::Date.new(year, month, day)
471
- end
472
-
473
- # To be able to keep Dates and Times interchangeable
474
- # on conversions.
475
- def to_time
476
- self
477
- end
478
-
479
- end
480
-
481
-
482
- # _____ _
483
- # |_ _|__ ___| |_
484
- # | |/ _ \/ __| __|
485
- # | | __/\__ \ |_
486
- # |_|\___||___/\__|
487
- #
488
- =begin test
489
-
490
- require 'test/unit'
491
-
492
-
493
- class TestArrayConversion < Test::Unit::TestCase
494
-
495
- def test_to_h_1
496
- k = [1,3,5]
497
- v = [2,4,6]
498
- assert_equal( { 1=>2, 3=>4, 5=>6 }, k.zip(v).to_h )
499
- end
500
-
501
- def test_to_h_2
502
- a = [[1,2],[3,4],[5,6]]
503
- assert_equal( { 1=>2, 3=>4, 5=>6 }, a.to_h )
504
- end
505
-
506
- def test_to_hash
507
- a = [:a,:b,:c]
508
- assert_equal( { 0=>:a, 1=>:b, 2=>:c }, a.to_hash )
509
- end
510
-
511
- end
512
-
513
-
514
- class TestClassConversion < Test::Unit::TestCase
515
-
516
- Person = Struct.new(:name)
517
-
518
- def test_to_proc
519
- people = ["joe"].map(&Person)
520
- assert_equal("joe", people[0].name)
521
- end
522
-
523
- end
524
-
525
-
526
- class TestEnumerableConversion < Test::Unit::TestCase
527
-
528
- def test_to_hash
529
- a = [:a,:b,:c]
530
- assert_equal( { 0=>:a, 1=>:b, 2=>:c }, a.to_h )
531
- end
532
-
533
- end
534
-
535
-
536
- class TestHashConversion < Test::Unit::TestCase
537
-
538
- def test_to_h
539
- a = { :a => 1, :b => 2, :c => 3 }
540
- assert_equal( a, a.to_h )
541
- end
542
-
543
- end
544
-
545
-
546
- class TestNilClassConversion < Test::Unit::TestCase
547
-
548
- def test_to_f
549
- assert_equal( 0, nil.to_f )
550
- end
551
-
552
- def test_to_h
553
- assert_equal( {}, nil.to_h )
554
- end
555
-
556
- end
557
-
558
-
559
- class TestRangeConversion < Test::Unit::TestCase
560
-
561
- def test_to_r
562
- a = (0..10)
563
- assert_equal( a, a.to_r )
564
- end
565
-
566
- def test_to_range
567
- a = (0..10)
568
- assert_equal( a, a.to_range )
569
- end
570
-
571
- end
572
479
 
480
+ class Time
573
481
 
574
- class TestRegexpConversion < Test::Unit::TestCase
575
-
576
- def test_to_re
577
- r = /0..10/
578
- assert_equal( r, r.to_re )
579
- end
580
-
581
- def test_to_regexp
582
- r = /0..10/
583
- assert_equal( r, r.to_regexp )
584
- end
585
-
586
- end
587
-
588
-
589
- class TestStringConversion < Test::Unit::TestCase
590
-
591
- TestConst = 4
592
-
593
- def test_to_const
594
- assert_equal( 4, "TestStringConversion::TestConst".to_const )
595
- end
596
-
597
- def test_to_date
598
- s = "2005-10-31"
599
- d = s.to_date
600
- assert_equal( 31, d.day )
601
- assert_equal( 10, d.month )
602
- assert_equal( 2005, d.year )
603
- end
604
-
605
- def test_to_time
606
- s = "2:31:15 PM"
607
- t = s.to_time
608
- assert_equal( 14, t.hour )
609
- assert_equal( 31, t.min )
610
- assert_equal( 15, t.sec )
611
- end
612
-
613
- def test_to_re
614
- assert_equal( /abc/, "abc".to_re )
615
- assert_equal( /a\+bc/, "a+bc".to_re )
616
- assert_equal( /a+bc/, "a+bc".to_re(false) )
617
- end
618
-
619
- def test_to_proc
620
- assert_nothing_raised { @add = '|x,y| x + y'.to_proc }
621
- assert_equal(4, @add.call(2,2))
622
- @t = 3
623
- @multi = '|y| @t * y'.to_proc(self)
624
- assert_equal(6, @multi.call(2))
625
- x = 4
626
- @div = '|y| x / y'.to_proc(binding)
627
- assert_equal(2, @div.call(2))
628
- end
629
-
630
- #def test_to_a
631
- # arr = 'abc'
632
- # assert_equal( ['a','b','c'], arr.to_a )
633
- #end
634
-
635
- end
636
-
637
-
638
- class TestSymbolConversion < Test::Unit::TestCase
639
-
640
- TESTCONST = 1
641
-
642
- def test_to_const
643
- assert_equal( 1, :"TestSymbolConversion::TESTCONST".to_const )
644
- end
645
-
646
- def test_proc_01
647
- assert_instance_of(Proc, up = :upcase.to_proc )
648
- assert_equal( "HELLO", up.call("hello") )
649
- end
650
-
651
- def test_proc_02
652
- q = [[1,2,3], [4,5,6], [7,8,9]].map(&:reverse)
653
- a = [[3, 2, 1], [6, 5, 4], [9, 8, 7]]
654
- assert_equal( a, q )
655
- end
656
-
657
- # Deprecated b/c of stringe issues.
658
-
659
- #def test_to_str
660
- # assert_equal( "a", :a.to_str )
661
- # assert_equal( "abc", :abc.to_str )
662
- # assert_equal( '#$%', :'#$%'.to_str )
663
- #end
664
-
665
- end
666
-
667
-
668
- require 'time'
669
-
670
- class TestTimeConversion < Test::Unit::TestCase
671
-
672
- def setup
673
- @t = Time.parse('4/20/2005 15:37')
674
- end
675
-
676
- # FIXME Problem with Timezone on different systems.
677
-
678
- #def test_stamp_01
679
- # assert_equal( "Wed Apr 20 15:37:00 PDT 2005", @t.stamp )
680
- #end
482
+ unless (RUBY_VERSION[0,3] == '1.9')
681
483
 
682
- def test_stamp_02
683
- assert_equal( "April 20, 2005 15:37", @t.stamp(:long) )
684
- end
484
+ # Convert a Time to a Date. Time is a superset of Date.
485
+ # It is the year, month and day that are carried over.
486
+ #
487
+ # CREDIT: Trans
685
488
 
686
- def test_stamp_03
687
- assert_equal( "20 Apr 15:37", @t.stamp(:short) )
489
+ def to_date
490
+ require 'date'
491
+ ::Date.new(year, month, day)
688
492
  end
689
493
 
690
- def test_to_date
691
- assert_instance_of( ::Date, @t.to_date )
692
- end
494
+ # To be able to keep Dates and Times interchangeable
495
+ # on conversions.
496
+ #
497
+ # CREDIT: Trans
693
498
 
694
- #def test_to_s
695
- # assert_equal( "Wed Apr 20 15:37:00 EDT 2005", @t.to_s )
696
- #end
697
-
698
- def test_to_time
699
- assert_instance_of( ::Time, @t.to_time )
499
+ def to_time
500
+ self
700
501
  end
701
502
 
702
503
  end
703
504
 
704
- =end
505
+ end