facets 2.1.3 → 2.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (303) hide show
  1. data/AUTHORS +14 -12
  2. data/CHANGES +45 -2
  3. data/NOTES +9 -7
  4. data/lib/core/facets/1stclassmethod.rb +15 -11
  5. data/lib/core/facets/array.rb +0 -1
  6. data/lib/core/facets/array/conjoin.rb +40 -8
  7. data/lib/core/facets/array/delete.rb +8 -2
  8. data/lib/core/facets/array/indexable.rb +30 -3
  9. data/lib/core/facets/array/merge.rb +11 -0
  10. data/lib/core/facets/array/only.rb +3 -3
  11. data/lib/core/facets/array/pad.rb +4 -46
  12. data/lib/core/facets/array/rotate.rb +4 -4
  13. data/lib/core/facets/array/select.rb +2 -0
  14. data/lib/core/facets/array/splice.rb +16 -2
  15. data/lib/core/facets/array/stackable.rb +6 -40
  16. data/lib/core/facets/binding.rb +3 -0
  17. data/lib/core/facets/binding/cflow.rb +10 -64
  18. data/lib/core/facets/binding/defined.rb +10 -0
  19. data/lib/core/facets/binding/eval.rb +10 -76
  20. data/lib/core/facets/binding/here.rb +9 -0
  21. data/lib/core/facets/binding/self.rb +10 -0
  22. data/lib/core/facets/binding/vars.rb +0 -45
  23. data/lib/core/facets/boolean.rb +31 -103
  24. data/lib/core/facets/class/descendents.rb +17 -44
  25. data/lib/core/facets/comparable/bound.rb +8 -70
  26. data/lib/core/facets/comparable/cmp.rb +12 -92
  27. data/lib/core/facets/conversion.rb +122 -321
  28. data/lib/core/facets/dir/multiglob.rb +0 -13
  29. data/lib/core/facets/dir/traverse.rb +61 -111
  30. data/lib/core/facets/enumerable.rb +4 -2
  31. data/lib/core/facets/enumerable/cartesian.rb +36 -85
  32. data/lib/core/facets/enumerable/collect.rb +64 -152
  33. data/lib/core/facets/enumerable/combination.rb +40 -42
  34. data/lib/core/facets/enumerable/count.rb +99 -174
  35. data/lib/core/facets/enumerable/each.rb +86 -0
  36. data/lib/core/facets/enumerable/mash.rb +58 -0
  37. data/lib/core/facets/enumerable/permutation.rb +39 -44
  38. data/lib/core/facets/enumerable/probability.rb +16 -90
  39. data/lib/core/facets/enumerable/split.rb +113 -0
  40. data/lib/core/facets/exception/detail.rb +1 -2
  41. data/lib/core/facets/facets.rb +3 -2
  42. data/lib/core/facets/file/read.rb +4 -59
  43. data/lib/core/facets/file/topath.rb +8 -96
  44. data/lib/core/facets/file/write.rb +21 -49
  45. data/lib/core/facets/filetest/root.rb +4 -3
  46. data/lib/core/facets/functor.rb +5 -43
  47. data/lib/core/facets/hash/at.rb +7 -37
  48. data/lib/core/facets/hash/delete.rb +9 -58
  49. data/lib/core/facets/hash/has_keys.rb +4 -43
  50. data/lib/core/facets/hash/insert.rb +5 -38
  51. data/lib/core/facets/hash/inverse.rb +2 -41
  52. data/lib/core/facets/hash/iterate.rb +4 -45
  53. data/lib/core/facets/hash/keyize.rb +24 -92
  54. data/lib/core/facets/hash/merge.rb +4 -38
  55. data/lib/core/facets/hash/new.rb +5 -38
  56. data/lib/core/facets/hash/op.rb +20 -66
  57. data/lib/core/facets/hash/rekey.rb +9 -87
  58. data/lib/core/facets/hash/select.rb +1 -1
  59. data/lib/core/facets/hash/slice.rb +42 -0
  60. data/lib/core/facets/hash/traverse.rb +6 -46
  61. data/lib/core/facets/hash/update.rb +27 -67
  62. data/lib/core/facets/hash/weave.rb +22 -42
  63. data/lib/core/facets/indexable.rb +42 -14
  64. data/lib/core/facets/integer/bitmask.rb +69 -106
  65. data/lib/core/facets/integer/factorial.rb +1 -44
  66. data/lib/core/facets/integer/multiples.rb +27 -22
  67. data/lib/core/facets/integer/of.rb +1 -33
  68. data/lib/core/facets/kernel.rb +4 -2
  69. data/lib/core/facets/kernel/ask.rb +15 -3
  70. data/lib/core/facets/kernel/callstack.rb +38 -69
  71. data/lib/core/facets/kernel/constant.rb +2 -38
  72. data/lib/core/facets/kernel/deepcopy.rb +3 -55
  73. data/lib/core/facets/kernel/dir.rb +2 -0
  74. data/lib/core/facets/kernel/ergo.rb +2 -2
  75. data/lib/core/facets/kernel/instance.rb +51 -120
  76. data/lib/core/facets/kernel/metaid.rb +35 -73
  77. data/lib/core/facets/kernel/object.rb +14 -39
  78. data/lib/core/facets/kernel/op_esc.rb +24 -2
  79. data/lib/core/facets/kernel/populate.rb +6 -69
  80. data/lib/core/facets/kernel/report.rb +28 -33
  81. data/lib/core/facets/kernel/require.rb +7 -21
  82. data/lib/core/facets/kernel/respond.rb +11 -1
  83. data/lib/core/facets/kernel/returning.rb +50 -0
  84. data/lib/core/facets/kernel/silence.rb +12 -24
  85. data/lib/core/facets/kernel/super.rb +12 -76
  86. data/lib/core/facets/kernel/tap.rb +25 -107
  87. data/lib/core/facets/kernel/val.rb +7 -46
  88. data/lib/core/facets/kernel/withattr.rb +6 -64
  89. data/lib/core/facets/matchdata/matchset.rb +8 -50
  90. data/lib/core/facets/module.rb +3 -1
  91. data/lib/core/facets/module/abstract.rb +9 -47
  92. data/lib/core/facets/module/alias.rb +11 -68
  93. data/lib/core/facets/module/attr.rb +36 -15
  94. data/lib/core/facets/module/cattr.rb +8 -76
  95. data/lib/core/facets/module/clone.rb +15 -66
  96. data/lib/core/facets/module/include.rb +54 -114
  97. data/lib/core/facets/module/methods.rb +15 -13
  98. data/lib/core/facets/module/modify.rb +20 -206
  99. data/lib/core/facets/module/name.rb +19 -83
  100. data/lib/core/facets/module/require.rb +48 -53
  101. data/lib/core/facets/module/traits.rb +74 -33
  102. data/lib/core/facets/nilclass/status.rb +25 -2
  103. data/lib/core/facets/numeric/round.rb +24 -89
  104. data/lib/core/facets/proc/bind.rb +16 -59
  105. data/lib/core/facets/proc/compose.rb +6 -40
  106. data/lib/core/facets/proc/fn.rb +2 -0
  107. data/lib/core/facets/range/combine.rb +15 -51
  108. data/lib/core/facets/range/overlap.rb +8 -64
  109. data/lib/core/facets/regexp/arity.rb +6 -41
  110. data/lib/core/facets/stackable.rb +43 -4
  111. data/lib/core/facets/string.rb +2 -0
  112. data/lib/core/facets/string/align.rb +45 -55
  113. data/lib/core/facets/string/blank.rb +2 -46
  114. data/lib/core/facets/string/bracket.rb +14 -87
  115. data/lib/core/facets/string/case.rb +45 -32
  116. data/lib/core/facets/string/crypt.rb +3 -40
  117. data/lib/core/facets/string/filter.rb +7 -49
  118. data/lib/core/facets/string/format.rb +24 -126
  119. data/lib/core/facets/string/indexable.rb +50 -133
  120. data/lib/core/facets/string/interpolate.rb +24 -59
  121. data/lib/core/facets/string/natcmp.rb +5 -39
  122. data/lib/core/facets/string/nchar.rb +37 -45
  123. data/lib/core/facets/string/op.rb +13 -0
  124. data/lib/core/facets/string/partitions.rb +38 -99
  125. data/lib/core/facets/string/range.rb +8 -49
  126. data/lib/core/facets/string/regesc.rb +9 -42
  127. data/lib/core/facets/string/scan.rb +6 -52
  128. data/lib/core/facets/string/splice.rb +8 -13
  129. data/lib/core/facets/string/tabs.rb +16 -153
  130. data/lib/core/facets/symbol.rb +3 -1
  131. data/lib/core/facets/symbol/chomp.rb +11 -29
  132. data/lib/core/facets/symbol/generate.rb +4 -43
  133. data/lib/core/facets/symbol/not.rb +13 -25
  134. data/lib/core/facets/symbol/shadow.rb +2 -40
  135. data/lib/core/facets/symbol/succ.rb +14 -13
  136. data/lib/core/facets/symbol/to_proc.rb +33 -28
  137. data/lib/core/facets/time.rb +1 -0
  138. data/lib/core/facets/time/change.rb +5 -38
  139. data/lib/core/facets/time/elapse.rb +2 -41
  140. data/lib/core/facets/time/stamp.rb +47 -0
  141. data/lib/core/facets/unboundmethod.rb +3 -0
  142. data/lib/core/facets/unboundmethod/arguments.rb +27 -4
  143. data/lib/core/facets/unboundmethod/name.rb +21 -7
  144. data/lib/methods/facets/enumerable/cluster_by.rb +1 -1
  145. data/lib/methods/facets/enumerable/collate.rb +1 -0
  146. data/lib/methods/facets/enumerable/divide.rb +1 -1
  147. data/lib/methods/facets/enumerable/each_by.rb +1 -1
  148. data/lib/methods/facets/enumerable/each_pair.rb +1 -1
  149. data/lib/methods/facets/enumerable/eachn.rb +1 -1
  150. data/lib/methods/facets/enumerable/graph.rb +1 -1
  151. data/lib/methods/facets/enumerable/group_by.rb +1 -1
  152. data/lib/methods/facets/enumerable/inject.rb +1 -0
  153. data/lib/methods/facets/enumerable/map_send.rb +1 -0
  154. data/lib/methods/facets/enumerable/modulate.rb +1 -0
  155. data/lib/methods/facets/enumerable/partition_by.rb +1 -1
  156. data/lib/methods/facets/hash/collate.rb +1 -1
  157. data/lib/methods/facets/hash/except.rb +1 -0
  158. data/lib/methods/facets/hash/graph.rb +1 -1
  159. data/lib/methods/facets/hash/mash.rb +1 -0
  160. data/lib/methods/facets/kernel/Bit.rb +1 -0
  161. data/lib/methods/facets/kernel/complete.rb +1 -1
  162. data/lib/methods/facets/kernel/here.rb +1 -1
  163. data/lib/methods/facets/kernel/non_nil.rb +1 -0
  164. data/lib/methods/facets/kernel/respond_with_value.rb +1 -0
  165. data/lib/methods/facets/kernel/with.rb +1 -1
  166. data/lib/methods/facets/module/class_def.rb +1 -0
  167. data/lib/methods/facets/string/camelcase.rb +1 -0
  168. data/lib/methods/facets/string/op_minus.rb +1 -0
  169. data/lib/methods/facets/string/snakecase.rb +1 -0
  170. data/lib/more/facets/attributes.rb +5 -5
  171. data/lib/more/facets/basicobject.rb +0 -62
  172. data/lib/{core/facets/continuation/create.rb → more/facets/continuation.rb} +4 -21
  173. data/lib/more/facets/duration.rb +534 -0
  174. data/lib/more/facets/lazy.rb +3 -3
  175. data/lib/more/facets/namespace.rb +23 -71
  176. data/lib/more/facets/rbsystem.rb +42 -8
  177. data/lib/more/facets/stylize.rb +6 -3
  178. data/lib/more/facets/thread.rb +55 -0
  179. data/meta/MANIFEST +49 -18
  180. data/meta/ROLLRC +1 -1
  181. data/meta/project.yaml +2 -2
  182. data/task/install +1 -1
  183. data/task/test/general +8 -2
  184. data/test/unit/array/test_pad.rb +30 -45
  185. data/test/unit/array/test_stackable.rb +14 -28
  186. data/test/unit/binding/test_cflow.rb +34 -49
  187. data/test/unit/binding/test_defined.rb +17 -0
  188. data/test/unit/binding/test_eval.rb +11 -39
  189. data/test/unit/binding/test_here.rb +17 -0
  190. data/test/unit/binding/test_self.rb +17 -0
  191. data/test/unit/binding/test_vars.rb +22 -37
  192. data/test/unit/class/test_descendents.rb +15 -30
  193. data/test/unit/class/test_initializer.rb +1 -8
  194. data/test/unit/comparable/test_bound.rb +38 -53
  195. data/test/unit/comparable/test_cmp.rb +45 -60
  196. data/test/unit/dir/test_traverse.rb +56 -0
  197. data/test/unit/enumerable/test_cartesian.rb +34 -47
  198. data/test/unit/enumerable/test_collect.rb +16 -125
  199. data/test/unit/enumerable/test_combination.rb +1 -8
  200. data/test/unit/enumerable/test_count.rb +51 -66
  201. data/test/unit/enumerable/test_each.rb +77 -0
  202. data/test/unit/enumerable/test_mash.rb +51 -0
  203. data/test/unit/enumerable/test_permutation.rb +1 -7
  204. data/test/unit/enumerable/test_probability.rb +42 -55
  205. data/test/unit/enumerable/test_split.rb +52 -0
  206. data/test/unit/exception/test_detail.rb +19 -0
  207. data/test/unit/file/test_read.rb +34 -0
  208. data/test/unit/file/test_topath.rb +17 -25
  209. data/test/unit/file/test_write.rb +6 -12
  210. data/test/unit/filetest/test_root.rb +14 -0
  211. data/test/unit/hash/test_at.rb +9 -21
  212. data/test/unit/hash/test_delete.rb +22 -37
  213. data/test/unit/hash/test_has_keys.rb +13 -28
  214. data/test/unit/hash/test_insert.rb +9 -23
  215. data/test/unit/hash/test_inverse.rb +11 -26
  216. data/test/unit/hash/test_iterate.rb +16 -31
  217. data/test/unit/hash/test_keyize.rb +40 -55
  218. data/test/unit/hash/test_merge.rb +10 -25
  219. data/test/unit/hash/test_new.rb +9 -24
  220. data/test/unit/hash/test_op.rb +1 -7
  221. data/test/unit/hash/test_rekey.rb +47 -62
  222. data/test/unit/hash/test_traverse.rb +17 -32
  223. data/test/unit/hash/test_update.rb +30 -45
  224. data/test/unit/hash/test_weave.rb +10 -23
  225. data/test/unit/integer/test_bitmask.rb +48 -44
  226. data/test/unit/integer/test_factorial.rb +11 -26
  227. data/test/unit/integer/test_multiples.rb +1 -5
  228. data/test/unit/integer/test_of.rb +14 -29
  229. data/test/unit/kernel/test_callstack.rb +13 -28
  230. data/test/unit/kernel/test_constant.rb +14 -28
  231. data/test/unit/kernel/test_deepcopy.rb +20 -35
  232. data/test/unit/kernel/test_instance.rb +46 -61
  233. data/test/unit/kernel/test_metaid.rb +42 -57
  234. data/test/unit/kernel/test_object.rb +14 -29
  235. data/test/unit/kernel/test_populate.rb +38 -53
  236. data/test/unit/kernel/test_report.rb +1 -7
  237. data/test/unit/kernel/test_returning.rb +16 -0
  238. data/test/unit/kernel/test_silence.rb +8 -23
  239. data/test/unit/kernel/test_super.rb +41 -56
  240. data/test/unit/kernel/test_tap.rb +15 -39
  241. data/test/unit/kernel/test_val.rb +7 -20
  242. data/test/unit/kernel/test_withattr.rb +29 -44
  243. data/test/unit/matchdata/test_matchset.rb +20 -35
  244. data/test/unit/module/test_abstract.rb +15 -30
  245. data/test/unit/module/test_alias.rb +32 -45
  246. data/test/unit/module/test_cattr.rb +39 -54
  247. data/test/unit/module/test_clone.rb +31 -43
  248. data/test/unit/module/test_include.rb +1 -35
  249. data/test/unit/module/test_modify.rb +102 -114
  250. data/test/unit/module/test_name.rb +1 -7
  251. data/test/unit/numeric/test_round.rb +46 -61
  252. data/test/unit/proc/test_bind.rb +29 -44
  253. data/test/unit/proc/test_compose.rb +20 -35
  254. data/test/unit/range/test_combine.rb +14 -29
  255. data/test/unit/range/test_overlap.rb +34 -51
  256. data/test/unit/regexp/test_arity.rb +14 -29
  257. data/test/unit/string/test_align.rb +13 -27
  258. data/test/unit/string/test_blank.rb +12 -27
  259. data/test/unit/string/test_bracket.rb +52 -67
  260. data/test/unit/string/test_case.rb +19 -38
  261. data/test/unit/string/test_crypt.rb +10 -25
  262. data/test/unit/string/test_filter.rb +1 -7
  263. data/test/unit/string/test_format.rb +2 -7
  264. data/test/unit/string/test_indexable.rb +54 -69
  265. data/test/unit/string/test_interpolate.rb +8 -21
  266. data/test/unit/string/test_natcmp.rb +11 -26
  267. data/test/unit/string/test_nchar.rb +1 -14
  268. data/test/unit/string/test_op.rb +14 -0
  269. data/test/unit/string/test_partitions.rb +39 -54
  270. data/test/unit/string/test_range.rb +17 -32
  271. data/test/unit/string/test_regesc.rb +1 -7
  272. data/test/unit/string/test_scan.rb +23 -38
  273. data/test/unit/string/test_stackable.rb +79 -98
  274. data/test/unit/string/test_tabs.rb +1 -7
  275. data/test/unit/symbol/test_chomp.rb +10 -21
  276. data/test/unit/symbol/test_generate.rb +7 -22
  277. data/test/unit/symbol/test_not.rb +10 -25
  278. data/test/unit/symbol/test_shadow.rb +8 -23
  279. data/test/unit/symbol/test_succ.rb +1 -7
  280. data/test/unit/symbol/test_to_proc.rb +1 -7
  281. data/test/unit/test_attributes.rb +1 -1
  282. data/test/unit/test_continuation.rb +13 -0
  283. data/test/unit/test_conversion.rb +1 -14
  284. data/test/unit/test_namespace.rb +30 -3
  285. data/test/unit/test_thread.rb +23 -0
  286. data/test/unit/time/test_change.rb +11 -26
  287. data/test/unit/time/test_elapse.rb +10 -25
  288. data/test/unit/time/test_stamp.rb +28 -0
  289. metadata +65 -25
  290. data/lib/core/facets/array/unzip.rb +0 -14
  291. data/lib/core/facets/continuation.rb +0 -1
  292. data/lib/core/facets/enumerable/collate.rb +0 -104
  293. data/lib/core/facets/kernel/require_esc.rb +0 -44
  294. data/lib/more/facets/mapsend.rb +0 -98
  295. data/lib/more/facets/pp_s.rb +0 -30
  296. data/log/history.rd +0 -38
  297. data/log/todo.rd +0 -4
  298. data/task/special/quickopts +0 -15
  299. data/test/unit/continuation/test_create.rb +0 -28
  300. data/test/unit/enumerable/test_collate.rb +0 -51
  301. data/test/unit/kernel/test_require_esc.rb +0 -29
  302. data/test/unit/test_mapsend.rb +0 -18
  303. data/test/unit/test_pp_s.rb +0 -17
@@ -1,36 +1,20 @@
1
- # = Bitmask
2
- #
3
- # Bitmask extends the Integer class to allow for easy manipulation
4
- # of a number as a bit field.
5
- #
6
- # == Examples
7
- #
8
- # 0xb0100.bit(-3) #=> 0
9
- #
10
- # == Authors and Contributors
11
- #
12
- # * George Moschovitis
13
- # * Thomas Sawyer
14
- #
15
- # == Copyright (c) 2005 George Moschovitis
16
- #
17
- # Ruby License
18
- #
19
- # This module is free software. You may use, modify, and/or redistribute this
20
- # software under the same terms as Ruby.
21
- #
22
- # This program is distributed in the hope that it will be useful, but WITHOUT
23
- # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
24
- # FOR A PARTICULAR PURPOSE.
25
-
26
- #
27
1
  class Integer
28
2
 
29
- # Bit.
3
+ # Set a bit.
4
+ #
5
+ # 0.bit!(4) #=> 8
6
+ #
7
+ # Using an inverted bit will clear a bit.
8
+ #
9
+ # 10.bit!(~3) #=> 2
10
+ # 0xb0100.bit(~3) #=> 0
11
+ #
12
+ # CREDIT: Thomas Sawyer
13
+ # CREDIT: George Moschovitis
30
14
 
31
- def bit!(bit)
15
+ def bit(bit)
32
16
  if bit < 0
33
- mask = (1 << bit)
17
+ mask = (1 << ~bit)
34
18
  self & ~mask
35
19
  else
36
20
  mask = (1 << bit)
@@ -38,104 +22,83 @@ class Integer
38
22
  end
39
23
  end
40
24
 
41
- def bit?(bit)
42
- mask = (1 << bit)
43
- (self & mask) != 0
44
- end
45
-
46
- def bitmask!(mask)
47
- if mask < 0
48
- self & ~mask
49
- else
50
- self | mask
51
- end
52
- end
53
-
54
- def bitmask?(mask)
55
- (self & mask) != 0
56
- end
57
-
58
- # TODO The following may be deprecated.
25
+ # Old name. Probably will be deprecated.
26
+ alias_method :bit!, :bit
59
27
 
28
+ # Clear bit.
60
29
  #
61
- def set_bit(bit)
62
- mask = (1 << bit)
63
- self | mask
64
- end
30
+ # CREDIT: George Moschovitis
65
31
 
66
32
  def clear_bit(bit)
67
33
  mask = (1 << bit)
68
34
  self & ~mask
69
35
  end
70
36
 
71
- alias_method :test_bit, :bit?
72
- alias_method :bit_set?, :bit?
73
-
74
- def set_bitmask(mask)
75
- self | mask
76
- end
37
+ # Is a bit set?
38
+ #
39
+ # 8.bit?(3) #=> true
40
+ # 8.bit?(2) #=> false
41
+ #
42
+ # CREDIT: Thomas Sawyer
43
+ # CREDIT: George Moschovitis
77
44
 
78
- def clear_bitmask(mask)
79
- self & ~mask
45
+ def bit?(bit)
46
+ mask = (1 << bit)
47
+ (self & mask) != 0
80
48
  end
81
49
 
82
- alias_method :test_bitmask, :bitmask?
50
+ # Apply a bitmask.
51
+ #
52
+ # 1.bitmask(6) #=> 7
53
+ #
54
+ # Using a inverted bitmask clears bits.
55
+ #
56
+ # 7.bitmask(~2) #=> 5
57
+ # 5.bitmask(~2) #=> 5
58
+ #
59
+ # CREDIT: George Moschovitis
83
60
 
84
- end
61
+ def bitmask(mask)
62
+ if mask < 0
63
+ self & mask
64
+ else
65
+ self | mask
66
+ end
67
+ end
85
68
 
69
+ # Old name. Probably will be deprecated.
70
+ alias_method :bitmask!, :bitmask
86
71
 
87
- module Kernel
72
+ # Is bitmask set?
73
+ #
74
+ # 7.bitmask?(7) #=> true
75
+ # 7.bitmask?(5) #=> true
76
+ # 8.bitmask?(3) #=> false
77
+ #
78
+ # CREDIT: George Moschovitis
88
79
 
89
- def bitmask(bit)
90
- 1 << bit
80
+ def bitmask?(mask)
81
+ (self & mask) != 0
91
82
  end
92
83
 
93
84
  end
94
85
 
95
86
 
96
- # _____ _
97
- # |_ _|__ ___| |_
98
- # | |/ _ \/ __| __|
99
- # | | __/\__ \ |_
100
- # |_|\___||___/\__|
101
- #
102
-
103
- =begin test
104
-
105
- require 'test/unit'
106
-
107
- class TestIntegerBitmask < Test::Unit::TestCase
108
-
109
- def test_001
110
- assert_equal( 1, 0.set_bit(0) )
111
- assert_equal( 2, 0.set_bit(1) )
112
- assert_equal( 4, 0.set_bit(2) )
113
- assert_equal( 8, 0.set_bit(3) )
114
- end
115
-
116
- def test_002
117
- assert_equal( 0, 1.clear_bit(0) )
118
- assert_equal( 0, 2.clear_bit(1) )
119
- assert_equal( 0, 4.clear_bit(2) )
120
- assert_equal( 0, 8.clear_bit(3) )
121
- end
87
+ module Kernel
122
88
 
123
- def test_003
124
- a = 1
125
- m = bitmask(4)
126
- a = a.set_bitmask(m)
127
- assert_equal( 17, a )
128
- assert( a.test_bitmask(m) )
129
- assert( a.test_bit(4) )
130
- assert( a.bit_set?(4) )
131
- assert( ! a.test_bit(12) )
132
- end
89
+ # Create a single bit bitmask.
90
+ #
91
+ # Bit(0) #=> 1
92
+ # Bit(1) #=> 2
93
+ # Bit(2) #=> 4
94
+ #
95
+ # This is equivalent to n-shift: "1 << n".
96
+ #
97
+ # CREDIT: Thomas Sawyer
98
+ # CREDIT: George Moschovitis
133
99
 
100
+ def Bit(n)
101
+ 1 << Integer(n)
134
102
  end
135
103
 
136
- =end
137
-
138
-
139
- # Author:: George Moschovitis
140
- # Copyright:: Copyright (c) 2005 George Moschovitis
141
- # License:: Ruby License
104
+ end
@@ -1,17 +1,3 @@
1
- # = FILE
2
- #
3
- # interger/factorial.rb
4
- #
5
- # = DESCRIPTION
6
- #
7
- # Factorial extension for Integer class.
8
- #
9
- # = AUTHORS
10
- #
11
- # CREDIT Malte Milatz
12
-
13
- #
14
-
15
1
  class Integer
16
2
 
17
3
  # Calculate the factorial of an integer.
@@ -20,6 +6,7 @@ class Integer
20
6
  # 3.factorial #=> 6
21
7
  # 3.factorial #=> 24
22
8
  #
9
+ # CREDIT: Malte Milatz
23
10
 
24
11
  def factorial
25
12
  return 1 if zero?
@@ -28,11 +15,7 @@ class Integer
28
15
  f
29
16
  end
30
17
 
31
- #--
32
- # TODO Pick one of these and deprecate the other. But which?
33
- #++
34
18
  alias_method( :fac, :factorial )
35
- alias_method( :fact, :factorial )
36
19
 
37
20
  #-- OLD CODE
38
21
  #def factorial
@@ -44,29 +27,3 @@ class Integer
44
27
  #++
45
28
 
46
29
  end
47
-
48
-
49
-
50
- # _____ _
51
- # |_ _|__ ___| |_
52
- # | |/ _ \/ __| __|
53
- # | | __/\__ \ |_
54
- # |_|\___||___/\__|
55
- #
56
- =begin test
57
-
58
- require 'test/unit'
59
-
60
- class TCInteger < Test::Unit::TestCase
61
-
62
- def test_factorial
63
- assert_equal( 1, 0.factorial )
64
- assert_equal( 1, 1.factorial )
65
- assert_equal( 2, 2.factorial )
66
- assert_equal( 6, 3.factorial )
67
- assert_equal( 24, 4.factorial )
68
- end
69
-
70
- end
71
-
72
- =end
@@ -1,28 +1,32 @@
1
1
  class Integer
2
2
 
3
- # Returns true if this integer is odd, false otherwise.
4
- #
5
- # 2.odd? #=> false
6
- # 3.odd? #=> true
7
- #
8
- # -99.odd? # -> true
9
- # -98.odd? # -> false
10
- #
11
- # CREDIT Gavin Sinclair
12
-
13
- def odd?
14
- self % 2 == 1
15
- end
16
-
17
- # Returns true if this integer is even, false otherwise.
18
- #
19
- # 2.even? #=> true
20
- # 3.even? #=> false
21
- #
22
- # CREDIT Gavin Sinclair
3
+ unless (RUBY_VERSION[0,3] == '1.9')
4
+
5
+ # Returns true if this integer is odd, false otherwise.
6
+ #
7
+ # 2.odd? #=> false
8
+ # 3.odd? #=> true
9
+ #
10
+ # -99.odd? # -> true
11
+ # -98.odd? # -> false
12
+ #
13
+ # CREDIT: Gavin Sinclair
14
+
15
+ def odd?
16
+ self % 2 == 1
17
+ end
18
+
19
+ # Returns true if this integer is even, false otherwise.
20
+ #
21
+ # 2.even? #=> true
22
+ # 3.even? #=> false
23
+ #
24
+ # CREDIT: Gavin Sinclair
25
+
26
+ def even?
27
+ self % 2 == 0
28
+ end
23
29
 
24
- def even?
25
- self % 2 == 0
26
30
  end
27
31
 
28
32
  # Is is a multiple of a given number?
@@ -30,6 +34,7 @@ class Integer
30
34
  # 7.multiple?(2) #=> false
31
35
  # 8.multiple?(2) #=> true
32
36
  #
37
+ # CREDIT: Trans
33
38
 
34
39
  def multiple?(number)
35
40
  self % number == 0
@@ -1,5 +1,3 @@
1
-
2
- #
3
1
  class Integer
4
2
 
5
3
  # Like #times but returns a collection of the yield results.
@@ -7,6 +5,7 @@ class Integer
7
5
  # a = 3.of { |i| "#{i+1}" }
8
6
  # a => [ "1", "2", "3" ]
9
7
  #
8
+
10
9
  def of(&block)
11
10
  Array.new(self, &block)
12
11
  end
@@ -21,34 +20,3 @@ class Integer
21
20
  alias_method :times_map, :of
22
21
 
23
22
  end
24
-
25
-
26
-
27
-
28
- # _____ _
29
- # |_ _|__ ___| |_
30
- # | |/ _ \/ __| __|
31
- # | | __/\__ \ |_
32
- # |_|\___||___/\__|
33
- #
34
- =begin test
35
-
36
- require 'test/unit'
37
-
38
- class TestIntegerEnumerate < Test::Unit::TestCase
39
-
40
- def test_of
41
- a = 4
42
- b = a.of{ |i| i*2 }
43
- assert_equal( [0,2,4,6], b )
44
- end
45
-
46
- def test_times_collect
47
- a = 4
48
- b = a.times_collect{ |i| i*2 }
49
- assert_equal( [0,2,4,6], b )
50
- end
51
-
52
- end
53
-
54
- =end
@@ -1,10 +1,8 @@
1
- require 'facets/kernel/require_esc.rb'
2
1
  require 'facets/kernel/callstack.rb'
3
2
  require 'facets/kernel/super.rb'
4
3
  require 'facets/kernel/val.rb'
5
4
  require 'facets/kernel/metaid.rb'
6
5
  require 'facets/kernel/instance.rb'
7
- require 'facets/kernel/tap.rb'
8
6
  require 'facets/kernel/ergo.rb'
9
7
  require 'facets/kernel/object.rb'
10
8
  require 'facets/kernel/withattr.rb'
@@ -18,4 +16,8 @@ require 'facets/kernel/ask.rb'
18
16
  require 'facets/kernel/respond.rb'
19
17
  require 'facets/kernel/silence.rb'
20
18
  require 'facets/kernel/report.rb'
19
+ require 'facets/kernel/returning.rb'
20
+
21
+ # remove for 1.9
22
+ require 'facets/kernel/tap.rb'
21
23
 
@@ -1,10 +1,22 @@
1
1
  module Kernel
2
2
 
3
- private
3
+ module_function
4
4
 
5
- # Convenience method to get simple console reply.
5
+ # Very simple convenience method to get a console reply.
6
+ #
7
+ # ask "Are you happy?", "Yn"
8
+ #
9
+ # On the command line one would see.
10
+ #
11
+ # $ Are you happy? [Yn]
12
+ #
13
+ # Responding:
14
+ #
15
+ # $ Are you happy? [Yn] Y <ENTER>
16
+ #
17
+ # The ask method would return "Y".
6
18
 
7
- def ask( question, answers=nil )
19
+ def ask(question, answers=nil)
8
20
  print "#{question}"
9
21
  print " [#{answers}] " if answers
10
22
  until inp = $stdin.gets ; sleep 1 ; end ; puts
@@ -1,22 +1,10 @@
1
- # TITLE:
2
- #
3
- # Callstack Methods
4
- #
5
- # FILE:
6
- #
7
- # kernel/callstack.rb
8
- #
9
- # DESCRIPTION:
10
- #
11
- # Kernel extensions related to cflow.
12
- #
13
- # AUTHORS:
14
- #
15
- # CREDIT Thomas Sawyer
16
-
17
- #
18
1
  module Kernel
19
2
 
3
+ unless (RUBY_VERSION[0,3] == '1.9')
4
+
5
+
6
+ end
7
+
20
8
  alias_method :pp_call_stack, :caller
21
9
 
22
10
  # Parse a caller string and break it into its components,
@@ -39,6 +27,8 @@ module Kernel
39
27
  # in a different format, _prior_ to requiring this, then the
40
28
  # results will be indeterminate.
41
29
  #
30
+ # CREDIT: Trans
31
+
42
32
  def call_stack( level = 1 )
43
33
  call_str_array = pp_call_stack(level)
44
34
  stack = []
@@ -54,66 +44,45 @@ module Kernel
54
44
 
55
45
  private
56
46
 
57
- # Retreive the current running method name.
58
- # There is a lot of debate on what to call this.
59
- # #called differs from #method_name only by the fact
60
- # that it returns a symbol, rather then a string.
61
- #
62
- # def tester; called; end
63
- # tester #=> :tester
64
- #
65
- def called
66
- /\`([^\']+)\'/.match(caller(1).first)[1].to_sym
67
- end
68
47
 
69
- # Retreive the current running method name.
70
- #
71
- # There is a lot of debate on what to call this.
72
- # #me returns a symbol, not a string.
73
- #
74
- # def tester; __method__; end
75
- # tester #=> :tester
76
- #
77
- def callee
78
- /\`([^\']+)\'/.match(caller(1).first)[1].to_sym
79
- end
48
+ if (RUBY_VERSION[0,3] == '1.9')
80
49
 
81
- # Technically __callee__ should provided alias names,
82
- # where __method__ should not. But we'll have to
83
- # leave that distinction to Ruby 1.9+.
50
+ alias_method :callee, :__callee__
51
+ alias_method :called, :__callee__
84
52
 
85
- alias_method :__callee__, :callee
86
- alias_method :__method__, :callee
53
+ else
87
54
 
88
- end
89
-
90
-
91
-
92
- # _____ _
93
- # |_ _|__ ___| |_
94
- # | |/ _ \/ __| __|
95
- # | | __/\__ \ |_
96
- # |_|\___||___/\__|
97
- #
98
- =begin test
99
-
100
- require 'test/unit'
101
-
102
- class TCKernel < Test::Unit::TestCase
103
-
104
- def test_call_stack
105
- assert_nothing_raised{ call_stack }
55
+ # Retreive the current running method name.
56
+ # There is a lot of debate on what to call this.
57
+ # #called differs from #method_name only by the fact
58
+ # that it returns a symbol, rather then a string.
59
+ #
60
+ # def tester; called; end
61
+ # tester #=> :tester
62
+ #
63
+ def called
64
+ /\`([^\']+)\'/.match(caller(1).first)[1].to_sym
106
65
  end
107
66
 
108
- def test_called
109
- assert_equal( :test_called, called )
67
+ # Retreive the current running method name.
68
+ #
69
+ # There is a lot of debate on what to call this.
70
+ # #me returns a symbol, not a string.
71
+ #
72
+ # def tester; __method__; end
73
+ # tester #=> :tester
74
+ #
75
+ def callee
76
+ /\`([^\']+)\'/.match(caller(1).first)[1].to_sym
110
77
  end
111
78
 
112
- def test_method_name
113
- assert_equal( "test_method_name", callee.to_s )
114
- end
79
+ # Technically __callee__ should provided alias names,
80
+ # where __method__ should not. But we'll have to
81
+ # leave that distinction to Ruby 1.9+.
115
82
 
116
- end
83
+ alias_method :__callee__, :called
84
+ alias_method :__method__, :called
117
85
 
118
- =end
86
+ end
119
87
 
88
+ end