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