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,44 +1,14 @@
1
- # TITLE:
2
- #
3
- # Hash At
4
- #
5
- # SUMMARY:
6
- #
7
- # Alias #at and #/ to #[].
8
- #
9
- # CREDITS:
10
- #
11
- # - Thomas Sawyer
12
-
13
- #
14
1
  class Hash
15
2
 
16
- # Use division as a fetch notation.
3
+ # Use division operator as a fetch notation.
4
+ #
5
+ # h = {:a=>1}
6
+ # h / :a #=> 1
7
+
17
8
  alias_method :/, :[]
18
9
 
19
- # For greater polymorphism with Array.
10
+ # Alias for fetch for greater polymorphism with Array.
11
+ #
20
12
  alias_method :at, :[]
21
13
 
22
14
  end
23
-
24
-
25
- # _____ _
26
- # |_ _|__ ___| |_
27
- # | |/ _ \/ __| __|
28
- # | | __/\__ \ |_
29
- # |_|\___||___/\__|
30
- #
31
- =begin test
32
-
33
- require 'test/unit'
34
-
35
- class TestHashAt < Test::Unit::TestCase
36
-
37
- def test_at
38
- h = { :a=>1, :b=>2 }
39
- assert_equal( 1, h.at(:a) )
40
- assert_equal( 2, h.at(:b) )
41
- end
42
- end
43
-
44
- =end
@@ -1,42 +1,30 @@
1
- # TITLE:
2
- #
3
- # Hash Deletion Extensions
4
- #
5
- # SUMMARY:
6
- #
7
- # General manipulation extensions for Hash class.
8
- #
9
- # CREDITS:
10
- #
11
- # - Daniel Schierbeck
12
- # - Thomas Sawyer
13
-
14
- #
15
1
  class Hash
16
2
 
17
3
  alias_method :delete_at, :delete
18
4
 
19
- # CREDIT Daniel Schierbeck
5
+ # Inverse of #delete_if.
6
+ #
7
+ #
8
+ #
9
+ # CREDIT: Daniel Schierbeck
20
10
 
21
11
  def delete_unless #:yield:
22
12
  delete_if{ |key, value| ! yield(key, value) }
23
13
  end
24
14
 
25
- # CREDIT Daniel Schierbeck
26
-
27
15
  # Minor modification to Ruby's Hash#delete method
28
16
  # allowing it to take multiple keys.
29
17
  #
30
18
  # hsh = { :a => 1, :b => 2 }
31
19
  # hsh.delete_values(1)
32
20
  # hsh #=> { :b => 2 }
21
+ #
22
+ # CREDIT: Daniel Schierbeck
33
23
 
34
24
  def delete_values(*values)
35
25
  keys.map{ |key| delete(key) if values.include?(fetch(key)) }
36
26
  end
37
27
 
38
- # CREDIT Daniel Schierbeck
39
-
40
28
  # Minor modification to Ruby's Hash#delete method
41
29
  # allowing it to take multiple keys.
42
30
  #
@@ -48,48 +36,11 @@ class Hash
48
36
  #
49
37
  # [a, b, c] #=> [1, 2, 3]
50
38
  # hsh #=> {}
39
+ #
40
+ # CREDIT: Daniel Schierbeck
51
41
 
52
42
  def delete_values_at(*keys, &yld)
53
43
  keys.map{|key| delete(key, &yld) }
54
44
  end
55
45
 
56
46
  end
57
-
58
-
59
-
60
- # _____ _
61
- # |_ _|__ ___| |_
62
- # | |/ _ \/ __| __|
63
- # | | __/\__ \ |_
64
- # |_|\___||___/\__|
65
- #
66
- =begin test
67
-
68
- require 'test/unit'
69
-
70
- class TestHashDelete < Test::Unit::TestCase
71
-
72
- def test_delete_unless
73
- a = { :a => 1, :b => 2, :c => 3 }
74
- e = { :a => 1 }
75
- r = a.delete_unless{|k,v| v == 1}
76
- assert_equal( e, a )
77
- end
78
-
79
- def test_delete_values
80
- a = { :a => 1, :b => 2, :c => 3 }
81
- e = { :b => 2, :c => 3 }
82
- r = a.delete_values(1)
83
- assert_equal( e, a )
84
- end
85
-
86
- def test_delete_values_at
87
- a = { :a => 1, :b => 2, :c => 3 }
88
- e = { :b => 2, :c => 3 }
89
- r = a.delete_values_at(:a)
90
- assert_equal( e, a )
91
- end
92
-
93
- end
94
-
95
- =end
@@ -1,16 +1,3 @@
1
- # TITLE:
2
- #
3
- # Hash Comparison Extensions
4
- #
5
- # SUMMARY:
6
- #
7
- # Hash comparison extensions.
8
- #
9
- # CREDITS:
10
- #
11
- # - Thomas Sawyer
12
- #
13
-
14
1
  class Hash
15
2
 
16
3
  # Returns true or false whether the hash
@@ -19,6 +6,8 @@ class Hash
19
6
  # h = { :a => 1, :b => 2 }
20
7
  # h.has_keys?( :a ) #=> true
21
8
  # h.has_keys?( :c ) #=> false
9
+ #
10
+ # CREDIT: Trans
22
11
 
23
12
  def has_keys?(*check_keys)
24
13
  unknown_keys = check_keys - self.keys
@@ -31,6 +20,8 @@ class Hash
31
20
  # h = { :a => 1, :b => 2 }
32
21
  # h.has_only_keys?( :a, :b ) #=> true
33
22
  # h.has_only_keys?( :a ) #=> false
23
+ #
24
+ # CREDIT: Trans
34
25
 
35
26
  def has_only_keys?(*check_keys)
36
27
  unknown_keys = self.keys - check_keys
@@ -38,33 +29,3 @@ class Hash
38
29
  end
39
30
 
40
31
  end
41
-
42
-
43
-
44
- # _____ _
45
- # |_ _|__ ___| |_
46
- # | |/ _ \/ __| __|
47
- # | | __/\__ \ |_
48
- # |_|\___||___/\__|
49
- #
50
- =begin test
51
-
52
- require 'test/unit'
53
-
54
- class TestHashHasKeys < Test::Unit::TestCase
55
-
56
- # TODO Write test for Hash#diff.
57
-
58
- def test_has_keys?
59
- assert( { :a=>1,:b=>2,:c=>3 }.has_keys?(:a,:b) )
60
- assert( ! { :a=>1,:b=>2,:c=>3 }.has_keys?(:a,:b,:d) )
61
- end
62
-
63
- def test_has_only_keys?
64
- assert( { :a=>1,:b=>2,:c=>3 }.has_only_keys?(:a,:b,:c) )
65
- assert( ! { :a=>1,:b=>2,:c=>3 }.has_only_keys?(:a,:b) )
66
- end
67
-
68
- end
69
-
70
- =end
@@ -1,23 +1,12 @@
1
- # TITLE:
2
- #
3
- # Hash Insert
4
- #
5
- # SUMMARY:
6
- #
7
- # As with #store but only if the key isn't already in the hash.
8
- #
9
- # CREDITS:
10
- #
11
- # - Thomas Sawyer
12
-
13
- #
14
1
  class Hash
15
2
 
16
3
  # As with #store but only if the key isn't
17
4
  # already in the hash.
18
- #--
19
- # ??? Would #store? be a better name?
20
- #++
5
+ #
6
+ # TODO: Would #store? be a better name?
7
+ #
8
+ # CREDIT: Trans
9
+
21
10
  def insert(name, value)
22
11
  if key?(name)
23
12
  false
@@ -28,25 +17,3 @@ class Hash
28
17
  end
29
18
 
30
19
  end
31
-
32
-
33
- # _____ _
34
- # |_ _|__ ___| |_
35
- # | |/ _ \/ __| __|
36
- # | | __/\__ \ |_
37
- # |_|\___||___/\__|
38
- #
39
- =begin test
40
-
41
- require 'test/unit'
42
-
43
- class TestHashInsert < Test::Unit::TestCase
44
-
45
- def test_insert
46
- h = { :a=>1, :b=>2 }
47
- assert_equal( true , h.insert(:c,3) )
48
- assert_equal( false , h.insert(:a,0) )
49
- end
50
- end
51
-
52
- =end
@@ -1,21 +1,5 @@
1
- # TITLE:
2
- #
3
- # Hash Inverse
4
- #
5
- # SUMMARY:
6
- #
7
- # Create a "true" inverse hash by storing mutliple values
8
- # in Arrays.
9
- #
10
- # CREDITS:
11
- #
12
- # - Tilo Sloboda
13
-
14
- #
15
1
  class Hash
16
2
 
17
- # CREDIT Tilo Sloboda
18
-
19
3
  # Create a "true" inverse hash by storing mutliple values
20
4
  # in Arrays.
21
5
  #
@@ -25,6 +9,8 @@ class Hash
25
9
  # h.inverse #=> {2=>"d", 3=>["f", "c", "b", "a"], 9=>["g", "e"]}
26
10
  # h.inverse.inverse #=> {"a"=>3, "b"=>3, "c"=>3, "d"=>2, "e"=>9, "f"=>3, "g"=>9}
27
11
  # h.inverse.inverse == h #=> true
12
+ #
13
+ # CREDIT: Tilo Sloboda
28
14
 
29
15
  def inverse
30
16
  i = Hash.new
@@ -39,28 +25,3 @@ class Hash
39
25
  end
40
26
 
41
27
  end
42
-
43
-
44
- # _____ _
45
- # |_ _|__ ___| |_
46
- # | |/ _ \/ __| __|
47
- # | | __/\__ \ |_
48
- # |_|\___||___/\__|
49
- #
50
- =begin test
51
-
52
- require 'test/unit'
53
-
54
- class TestHashInverse < Test::Unit::TestCase
55
-
56
- def test_inverse
57
- h1 = { :a=>1, :b=>2, :c=>2 }
58
- h2 = h1.inverse
59
- assert_equal( :a, h2[1] )
60
- assert( h2[2].include?(:b) )
61
- assert( h2[2].include?(:c) )
62
- end
63
-
64
- end
65
-
66
- =end
@@ -1,20 +1,9 @@
1
- # TITLE:
2
- #
3
- # Hash Iteration Extensions
4
- #
5
- # SUMMARY:
6
- #
7
- # Iteration related extensions for Hash class.
8
- #
9
- # CREDIT:
10
- #
11
- # - Thomas Sawyer
12
-
13
- #
14
1
  class Hash
15
2
 
16
3
  # Each with key is like each_pair but reverses the order
17
4
  # the parameters to [value,key] instead of [key,value].
5
+ #
6
+ # CREDIT: Trans
18
7
 
19
8
  def each_with_key( &yld )
20
9
  each_pair{ |k,v| yld.call(v,k) }
@@ -29,41 +18,11 @@ class Hash
29
18
  # {:a=>1,:b=>2}.pairs_at(:a,:c) #=> {:a=>1, :c=>nil}
30
19
  #
31
20
  # The later form is equivalent to #pairs_at.
21
+ #
22
+ # CREDIT: Trans
32
23
 
33
24
  def pairs_at( *keys )
34
25
  keys.inject({}) {|h,k| h[k] = self[k]; h}
35
26
  end
36
27
 
37
28
  end
38
-
39
-
40
-
41
- # _____ _
42
- # |_ _|__ ___| |_
43
- # | |/ _ \/ __| __|
44
- # | | __/\__ \ |_
45
- # |_|\___||___/\__|
46
- #
47
- =begin test
48
-
49
- require 'test/unit'
50
-
51
- class TestHashIterate < Test::Unit::TestCase
52
-
53
- def test_each_with_key
54
- h1 = { :a=>1, :b=>2 }
55
- h2 = {}
56
- h1.each_with_key { |v,k| h2[v] = k }
57
- assert_equal( {1=>:a, 2=>:b}, h2 )
58
- end
59
-
60
- def test_each_with_key
61
- h1 = { :a=>1, :b=>2 }
62
- h2 = {}
63
- h1.each_with_index { |v,k| h2[v] = k }
64
- assert_equal( {1=>:a, 2=>:b}, h2 )
65
- end
66
-
67
- end
68
-
69
- =end
@@ -1,25 +1,9 @@
1
- # TITLE:
2
- #
3
- # Hash Key-ize Extensions
4
- #
5
- # SUMMARY:
6
- #
7
- # Extensions of Hash for converting keys.
8
- #
9
- # CREDIT:
10
- #
11
- # - David H. H.
12
- # - Thomas Sawyer
13
- #
14
- # NOTES:
15
- #
16
- # - These methods are largely usurped by Hash#rekey.
17
- # They remain available for the time being for improved
18
- # intercompability with Rail's ActiveSupport library.
19
-
20
- #
21
1
  class Hash
22
2
 
3
+ # NOTE: These methods are largely usurped by Hash#rekey.
4
+ # They remain available for the time being for improved
5
+ # intercompability with Rail's ActiveSupport library.
6
+
23
7
  # Converts all keys in the Hash accroding to the given block.
24
8
  # If the block return +nil+ for given key, then that key will be
25
9
  # left intact.
@@ -28,9 +12,8 @@ class Hash
28
12
  # foo.normalize_keys{ |k| k.to_s } #=> { "name"=>"Gavin", "wife"=>:Lisa }
29
13
  # foo.inspect #=> { :name =>"Gavin", :wife=>:Lisa }
30
14
  #
31
- #--
32
- # Adapted from Gavin Sinclair's #convert_keys.
33
- #++
15
+ # CREDIT: Trans
16
+ # CREDIT: Gavin Sinclair
34
17
 
35
18
  def normalize_keys( &block )
36
19
  dup.send(:normalize_keys!, &block)
@@ -42,9 +25,8 @@ class Hash
42
25
  # foo.normalize_keys!{ |k| k.to_s } #=> { "name"=>"Gavin", "wife"=>:Lisa }
43
26
  # foo.inspect #=> { "name"=>"Gavin", "wife"=>:Lisa }
44
27
  #
45
- #--
46
- # Adapted from Gavin Sinclair's #convert_keys.
47
- #++
28
+ # CREDIT: Trans
29
+ # CREDIT: Gavin Sinclair
48
30
 
49
31
  def normalize_keys!( &block )
50
32
  keys.each{ |k|
@@ -61,9 +43,8 @@ class Hash
61
43
  # foo.stringify_keys #=> { "name"=>"Gavin", "wife"=>:Lisa }
62
44
  # foo.inspect #=> { :name =>"Gavin", :wife=>:Lisa }
63
45
  #
64
- #--
65
- # Adapted from Gavin Sinclair's #convert_keys.
66
- #++
46
+ # CREDIT: Trans
47
+ # CREDIT: Gavin Sinclair
67
48
 
68
49
  def stringify_keys( &filter )
69
50
  if filter
@@ -82,9 +63,9 @@ class Hash
82
63
  # foo.stringify_keys! #=> { "name"=>"Gavin", "wife"=>:Lisa }
83
64
  # foo.inspect #=> { "name"=>"Gavin", "wife"=>:Lisa }
84
65
  #
85
- #--
86
- # Adapted from Gavin Sinclair's #convert_keys.
87
- #++
66
+ # CREDIT: Trans
67
+ # CREDIT: Gavin Sinclair
68
+
88
69
  def stringify_keys!( &filter )
89
70
  if filter
90
71
  normalize_keys!{ |k| filter[k] ? k.to_s : nil }
@@ -102,9 +83,8 @@ class Hash
102
83
  # foo.symbolize_keys #=> { :name=>"Gavin", :wife=>:Lisa }
103
84
  # foo.inspect #=> { "name" =>"Gavin", "wife"=>:Lisa }
104
85
  #
105
- #--
106
- # Adapted from Gavin Sinclair's graceous work #symbolify_keys.
107
- #++
86
+ # CREDIT: Trans
87
+ # CREDIT: Gavin Sinclair
108
88
 
109
89
  def symbolize_keys( &filter )
110
90
  if filter
@@ -129,9 +109,8 @@ class Hash
129
109
  # foo.symbolize_keys! #=> { :name=>"Gavin", :wife=>:Lisa }
130
110
  # foo.inspect #=> { :name=>"Gavin", :wife=>:Lisa }
131
111
  #
132
- #--
133
- # Adapted from Gavin Sinclair's graceous work #symbolify_keys!
134
- #++
112
+ # CREDIT: Trans
113
+ # CREDIT: Gavin Sinclair
135
114
 
136
115
  def symbolize_keys!( &filter )
137
116
  if filter
@@ -157,6 +136,10 @@ class Hash
157
136
  # foo = { :name=>'Gavin', :wife=>:Lisa }
158
137
  # foo.variablize_keys #=> { "@name"=>"Gavin", "@wife"=>:Lisa }
159
138
  # foo.inspect #=> { :name =>"Gavin", :wife=>:Lisa }
139
+ #
140
+ # CREDIT: Trans
141
+ # CREDIT: David Hansson
142
+
160
143
 
161
144
  def variablize_keys( of_class=nil )
162
145
  self.dup.variablize_keys!( of_class )
@@ -169,6 +152,9 @@ class Hash
169
152
  # foo = { :name=>'Gavin', :wife=>:Lisa }
170
153
  # foo.variablize_keys! #=> { "@name"=>"Gavin", "@wife"=>:Lisa }
171
154
  # foo.inspect #=> { "@name"=>"Gavin", "@wife"=>:Lisa }
155
+ #
156
+ # CREDIT: Trans
157
+ # CREDIT: David Hansson
172
158
 
173
159
  def variablize_keys!( of_class=nil )
174
160
  raise ArgumentError, "Parameter must be a class" unless of_class.kind_of?(Class) if of_class
@@ -193,57 +179,3 @@ class Hash
193
179
  end
194
180
 
195
181
  end
196
-
197
-
198
-
199
- # _____ _
200
- # |_ _|__ ___| |_
201
- # | |/ _ \/ __| __|
202
- # | | __/\__ \ |_
203
- # |_|\___||___/\__|
204
- #
205
- =begin test
206
-
207
- require 'test/unit'
208
-
209
- class TestHashKeyize < Test::Unit::TestCase
210
-
211
- def test_normalize_keys_01
212
- foo = { :a=>1, :b=>2 }
213
- assert_equal( { "a"=>1, "b"=>2 }, foo.normalize_keys{|k|k.to_s} )
214
- assert_equal( { :a =>1, :b=>2 }, foo )
215
- end
216
-
217
- def test_normalize_keys_02
218
- foo = { :a=>1, :b=>2 }
219
- assert_equal( { "a"=>1, "b"=>2 }, foo.normalize_keys!{|k|k.to_s} )
220
- assert_equal( { "a"=>1, "b"=>2 }, foo )
221
- end
222
-
223
- def test_keys_to_s
224
- foo = { :a=>1, :b=>2 }
225
- assert_equal( { "a"=>1, "b"=>2 }, foo.stringify_keys )
226
- assert_equal( { :a =>1, :b=>2 }, foo )
227
- end
228
-
229
- def test_keys_to_s!
230
- foo = { :a=>1, :b=>2 }
231
- assert_equal( { "a"=>1, "b"=>2 }, foo.stringify_keys! )
232
- assert_equal( { "a"=>1, "b"=>2 }, foo )
233
- end
234
-
235
- def test_keys_to_sym
236
- foo = { 'a'=>1, 'b'=>2 }
237
- assert_equal( { :a=>1, :b=>2 }, foo.symbolize_keys )
238
- assert_equal( { "a" =>1, "b"=>2 }, foo )
239
- end
240
-
241
- def test_keys_to_sym!
242
- foo = { 'a'=>1, 'b'=>2 }
243
- assert_equal( { :a=>1, :b=>2 }, foo.symbolize_keys! )
244
- assert_equal( { :a=>1, :b=>2 }, foo )
245
- end
246
-
247
- end
248
-
249
- =end