nuggets 0.9.9 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (222) hide show
  1. checksums.yaml +4 -4
  2. data/COPYING +663 -0
  3. data/ChangeLog +7 -0
  4. data/README +74 -0
  5. data/Rakefile +50 -0
  6. data/lib/nuggets.rb +73 -0
  7. data/lib/nuggets/all.rb +35 -0
  8. data/lib/nuggets/all_mixins.rb +33 -0
  9. data/lib/nuggets/ansicolor2css.rb +124 -0
  10. data/lib/nuggets/argv/option.rb +3 -0
  11. data/lib/nuggets/argv/option_mixin.rb +84 -0
  12. data/lib/nuggets/array/boost.rb +5 -0
  13. data/lib/nuggets/array/boost_mixin.rb +77 -0
  14. data/lib/nuggets/array/combination.rb +62 -0
  15. data/lib/nuggets/array/correlation.rb +5 -0
  16. data/lib/nuggets/array/correlation_mixin.rb +63 -0
  17. data/lib/nuggets/array/flatten_once.rb +56 -0
  18. data/lib/nuggets/array/flush.rb +5 -0
  19. data/lib/nuggets/array/flush_mixin.rb +46 -0
  20. data/lib/nuggets/array/format.rb +65 -0
  21. data/lib/nuggets/array/hashify.rb +5 -0
  22. data/lib/nuggets/array/hashify_mixin.rb +47 -0
  23. data/lib/nuggets/array/histogram.rb +5 -0
  24. data/lib/nuggets/array/histogram_mixin.rb +169 -0
  25. data/lib/nuggets/array/in_order.rb +50 -0
  26. data/lib/nuggets/array/limit.rb +5 -0
  27. data/lib/nuggets/array/limit_mixin.rb +56 -0
  28. data/lib/nuggets/array/mean.rb +5 -0
  29. data/lib/nuggets/array/mean_mixin.rb +202 -0
  30. data/lib/nuggets/array/median.rb +5 -0
  31. data/lib/nuggets/array/median_mixin.rb +73 -0
  32. data/lib/nuggets/array/mode.rb +5 -0
  33. data/lib/nuggets/array/mode_mixin.rb +69 -0
  34. data/lib/nuggets/array/monotone.rb +83 -0
  35. data/lib/nuggets/array/only.rb +41 -0
  36. data/lib/nuggets/array/rand.rb +44 -0
  37. data/lib/nuggets/array/regression.rb +5 -0
  38. data/lib/nuggets/array/regression_mixin.rb +149 -0
  39. data/lib/nuggets/array/runiq.rb +5 -0
  40. data/lib/nuggets/array/runiq_mixin.rb +52 -0
  41. data/lib/nuggets/array/shuffle.rb +132 -0
  42. data/lib/nuggets/array/standard_deviation.rb +5 -0
  43. data/lib/nuggets/array/standard_deviation_mixin.rb +50 -0
  44. data/lib/nuggets/array/to_hash.rb +64 -0
  45. data/lib/nuggets/array/variance.rb +5 -0
  46. data/lib/nuggets/array/variance_mixin.rb +81 -0
  47. data/lib/nuggets/content_type.rb +97 -0
  48. data/lib/nuggets/dotted_decimal.rb +59 -0
  49. data/lib/nuggets/enumerable/agrep.rb +79 -0
  50. data/lib/nuggets/enumerable/all_any_extended.rb +66 -0
  51. data/lib/nuggets/enumerable/minmax.rb +102 -0
  52. data/lib/nuggets/env/set.rb +3 -0
  53. data/lib/nuggets/env/set_mixin.rb +67 -0
  54. data/lib/nuggets/env/user_encoding.rb +3 -0
  55. data/lib/nuggets/env/user_encoding_mixin.rb +54 -0
  56. data/lib/nuggets/env/user_home.rb +3 -0
  57. data/lib/nuggets/env/user_home_mixin.rb +56 -0
  58. data/lib/nuggets/file/ext.rb +5 -0
  59. data/lib/nuggets/file/ext_mixin.rb +87 -0
  60. data/lib/nuggets/file/replace.rb +5 -0
  61. data/lib/nuggets/file/replace_mixin.rb +55 -0
  62. data/lib/nuggets/file/sub.rb +5 -0
  63. data/lib/nuggets/file/sub_mixin.rb +95 -0
  64. data/lib/nuggets/file/which.rb +5 -0
  65. data/lib/nuggets/file/which_mixin.rb +72 -0
  66. data/lib/nuggets/hash/at.rb +68 -0
  67. data/lib/nuggets/hash/deep_fetch.rb +5 -0
  68. data/lib/nuggets/hash/deep_fetch_mixin.rb +74 -0
  69. data/lib/nuggets/hash/deep_merge.rb +5 -0
  70. data/lib/nuggets/hash/deep_merge_mixin.rb +53 -0
  71. data/lib/nuggets/hash/idmap.rb +5 -0
  72. data/lib/nuggets/hash/idmap_mixin.rb +41 -0
  73. data/lib/nuggets/hash/in_order.rb +43 -0
  74. data/lib/nuggets/hash/insert.rb +53 -0
  75. data/lib/nuggets/hash/nest.rb +5 -0
  76. data/lib/nuggets/hash/nest_mixin.rb +78 -0
  77. data/lib/nuggets/hash/only.rb +52 -0
  78. data/lib/nuggets/hash/seen.rb +5 -0
  79. data/lib/nuggets/hash/seen_mixin.rb +58 -0
  80. data/lib/nuggets/hash/unroll.rb +5 -0
  81. data/lib/nuggets/hash/unroll_mixin.rb +88 -0
  82. data/lib/nuggets/hash/zip.rb +5 -0
  83. data/lib/nuggets/hash/zip_mixin.rb +159 -0
  84. data/lib/nuggets/i18n.rb +155 -0
  85. data/lib/nuggets/integer/factorial.rb +56 -0
  86. data/lib/nuggets/integer/length.rb +5 -0
  87. data/lib/nuggets/integer/length_mixin.rb +49 -0
  88. data/lib/nuggets/integer/map.rb +5 -0
  89. data/lib/nuggets/integer/map_mixin.rb +42 -0
  90. data/lib/nuggets/integer/to_binary_s.rb +38 -0
  91. data/lib/nuggets/io/agrep.rb +43 -0
  92. data/lib/nuggets/io/interact.rb +5 -0
  93. data/lib/nuggets/io/interact_mixin.rb +159 -0
  94. data/lib/nuggets/io/modes.rb +121 -0
  95. data/lib/nuggets/io/null.rb +5 -0
  96. data/lib/nuggets/io/null_mixin.rb +40 -0
  97. data/lib/nuggets/io/redirect.rb +5 -0
  98. data/lib/nuggets/io/redirect_mixin.rb +50 -0
  99. data/lib/nuggets/lazy_attr.rb +44 -0
  100. data/lib/nuggets/log_parser.rb +70 -0
  101. data/lib/nuggets/log_parser/apache.rb +101 -0
  102. data/lib/nuggets/log_parser/rails.rb +219 -0
  103. data/lib/nuggets/net/success.rb +59 -0
  104. data/lib/nuggets/numeric/between.rb +2 -0
  105. data/lib/nuggets/numeric/duration.rb +100 -0
  106. data/lib/nuggets/numeric/limit.rb +62 -0
  107. data/lib/nuggets/numeric/signum.rb +52 -0
  108. data/lib/nuggets/numeric/to_multiple.rb +61 -0
  109. data/lib/nuggets/object/blank.rb +20 -0
  110. data/lib/nuggets/object/blank_mixin.rb +99 -0
  111. data/lib/nuggets/object/boolean.rb +5 -0
  112. data/lib/nuggets/object/boolean_mixin.rb +61 -0
  113. data/lib/nuggets/object/eigenclass.rb +2 -0
  114. data/lib/nuggets/object/ghost_class.rb +2 -0
  115. data/lib/nuggets/object/metaclass.rb +2 -0
  116. data/lib/nuggets/object/msend.rb +5 -0
  117. data/lib/nuggets/object/msend_mixin.rb +43 -0
  118. data/lib/nuggets/object/silence.rb +5 -0
  119. data/lib/nuggets/object/silence_mixin.rb +44 -0
  120. data/lib/nuggets/object/singleton_class.rb +5 -0
  121. data/lib/nuggets/object/singleton_class_mixin.rb +95 -0
  122. data/lib/nuggets/object/uniclass.rb +2 -0
  123. data/lib/nuggets/object/virtual_class.rb +2 -0
  124. data/lib/nuggets/pluggable.rb +91 -0
  125. data/lib/nuggets/proc/bind.rb +5 -0
  126. data/lib/nuggets/proc/bind_mixin.rb +51 -0
  127. data/lib/nuggets/range/quantile.rb +5 -0
  128. data/lib/nuggets/range/quantile_mixin.rb +42 -0
  129. data/lib/nuggets/ruby.rb +235 -0
  130. data/lib/nuggets/statistics.rb +12 -0
  131. data/lib/nuggets/statistics_mixins.rb +12 -0
  132. data/lib/nuggets/string/camelscore.rb +5 -0
  133. data/lib/nuggets/string/camelscore_mixin.rb +116 -0
  134. data/lib/nuggets/string/capitalize_first.rb +46 -0
  135. data/lib/nuggets/string/case.rb +81 -0
  136. data/lib/nuggets/string/evaluate.rb +5 -0
  137. data/lib/nuggets/string/evaluate_mixin.rb +47 -0
  138. data/lib/nuggets/string/msub.rb +84 -0
  139. data/lib/nuggets/string/nsub.rb +65 -0
  140. data/lib/nuggets/string/sub_with_md.rb +111 -0
  141. data/lib/nuggets/string/wc.rb +5 -0
  142. data/lib/nuggets/string/wc_mixin.rb +95 -0
  143. data/lib/nuggets/string/word_wrap.rb +76 -0
  144. data/lib/nuggets/string/xor.rb +5 -0
  145. data/lib/nuggets/string/xor_mixin.rb +59 -0
  146. data/lib/nuggets/tempfile/open.rb +57 -0
  147. data/lib/nuggets/uri/content_type.rb +5 -0
  148. data/lib/nuggets/uri/content_type_mixin.rb +47 -0
  149. data/lib/nuggets/uri/exist.rb +5 -0
  150. data/lib/nuggets/uri/exist_mixin.rb +56 -0
  151. data/lib/nuggets/uri/redirect.rb +5 -0
  152. data/lib/nuggets/uri/redirect_mixin.rb +101 -0
  153. data/lib/nuggets/version.rb +27 -0
  154. data/spec/nuggets/array/boost_spec.rb +50 -0
  155. data/spec/nuggets/array/combination_spec.rb +25 -0
  156. data/spec/nuggets/array/correlation_spec.rb +81 -0
  157. data/spec/nuggets/array/flatten_once_spec.rb +16 -0
  158. data/spec/nuggets/array/flush_spec.rb +43 -0
  159. data/spec/nuggets/array/format_spec.rb +52 -0
  160. data/spec/nuggets/array/hashify_spec.rb +41 -0
  161. data/spec/nuggets/array/histogram_spec.rb +87 -0
  162. data/spec/nuggets/array/in_order_spec.rb +13 -0
  163. data/spec/nuggets/array/limit_spec.rb +62 -0
  164. data/spec/nuggets/array/mean_spec.rb +203 -0
  165. data/spec/nuggets/array/median_spec.rb +77 -0
  166. data/spec/nuggets/array/mode_spec.rb +57 -0
  167. data/spec/nuggets/array/monotone_spec.rb +30 -0
  168. data/spec/nuggets/array/only_spec.rb +26 -0
  169. data/spec/nuggets/array/regression_spec.rb +54 -0
  170. data/spec/nuggets/array/runiq_spec.rb +25 -0
  171. data/spec/nuggets/array/standard_deviation_spec.rb +33 -0
  172. data/spec/nuggets/array/to_hash_spec.rb +28 -0
  173. data/spec/nuggets/array/variance_spec.rb +106 -0
  174. data/spec/nuggets/dotted_decimal_spec.rb +27 -0
  175. data/spec/nuggets/enumerable/all_any_extended_spec.rb +31 -0
  176. data/spec/nuggets/enumerable/minmax_spec.rb +21 -0
  177. data/spec/nuggets/env/set_spec.rb +29 -0
  178. data/spec/nuggets/env/user_encoding_spec.rb +38 -0
  179. data/spec/nuggets/env/user_home_spec.rb +42 -0
  180. data/spec/nuggets/file/ext_spec.rb +38 -0
  181. data/spec/nuggets/file/replace_spec.rb +95 -0
  182. data/spec/nuggets/file/sub_spec.rb +149 -0
  183. data/spec/nuggets/file/which_spec.rb +22 -0
  184. data/spec/nuggets/hash/at_spec.rb +19 -0
  185. data/spec/nuggets/hash/deep_fetch_spec.rb +159 -0
  186. data/spec/nuggets/hash/deep_merge_spec.rb +78 -0
  187. data/spec/nuggets/hash/in_order_spec.rb +12 -0
  188. data/spec/nuggets/hash/insert_spec.rb +13 -0
  189. data/spec/nuggets/hash/nest_spec.rb +102 -0
  190. data/spec/nuggets/hash/only_spec.rb +29 -0
  191. data/spec/nuggets/hash/seen_spec.rb +36 -0
  192. data/spec/nuggets/hash/unroll_spec.rb +68 -0
  193. data/spec/nuggets/i18n_spec.rb +13 -0
  194. data/spec/nuggets/integer/factorial_spec.rb +10 -0
  195. data/spec/nuggets/integer/length_spec.rb +18 -0
  196. data/spec/nuggets/integer/map_spec.rb +19 -0
  197. data/spec/nuggets/integer/to_binary_s_spec.rb +19 -0
  198. data/spec/nuggets/numeric/duration_spec.rb +25 -0
  199. data/spec/nuggets/numeric/limit_spec.rb +16 -0
  200. data/spec/nuggets/numeric/signum_spec.rb +16 -0
  201. data/spec/nuggets/numeric/to_multiple_spec.rb +16 -0
  202. data/spec/nuggets/object/blank_spec.rb +34 -0
  203. data/spec/nuggets/object/boolean_spec.rb +23 -0
  204. data/spec/nuggets/object/msend_spec.rb +25 -0
  205. data/spec/nuggets/object/silence_spec.rb +36 -0
  206. data/spec/nuggets/object/singleton_class_spec.rb +51 -0
  207. data/spec/nuggets/proc/bind_spec.rb +28 -0
  208. data/spec/nuggets/range/quantile_spec.rb +33 -0
  209. data/spec/nuggets/string/camelscore_spec.rb +114 -0
  210. data/spec/nuggets/string/capitalize_first_spec.rb +13 -0
  211. data/spec/nuggets/string/case_spec.rb +31 -0
  212. data/spec/nuggets/string/evaluate_spec.rb +24 -0
  213. data/spec/nuggets/string/msub_spec.rb +20 -0
  214. data/spec/nuggets/string/nsub_spec.rb +13 -0
  215. data/spec/nuggets/string/sub_with_md_spec.rb +25 -0
  216. data/spec/nuggets/string/wc_spec.rb +73 -0
  217. data/spec/nuggets/string/word_wrap_spec.rb +81 -0
  218. data/spec/nuggets/string/xor_spec.rb +57 -0
  219. data/spec/nuggets/uri/content_type_spec.rb +42 -0
  220. data/spec/nuggets/uri/exist_spec.rb +49 -0
  221. data/spec/spec_helper.rb +36 -0
  222. metadata +309 -17
@@ -0,0 +1,50 @@
1
+ require 'nuggets/array/boost'
2
+
3
+ describe_extended Array, Nuggets::Array::BoostMixin do
4
+
5
+ example {
6
+ lambda { [].boost_factor([]) }.should raise_error(NoMethodError)
7
+ }
8
+
9
+ example {
10
+ lambda { [1].boost_factor([]) }.should raise_error(NoMethodError)
11
+ }
12
+
13
+ example {
14
+ lambda { [].boost_factor([1]) }.should raise_error(TypeError)
15
+ }
16
+
17
+ example {
18
+ a, b = [0].boof([0]), Float::NAN
19
+
20
+ a.class.should == b.class
21
+ a.to_s.should == b.to_s
22
+ }
23
+
24
+ example {
25
+ 1.step(100, 10) { |i| [i].boof([0]).should == -1 }
26
+ }
27
+
28
+ example {
29
+ 1.step(100, 10) { |i| [0].boof([i]).should == Float::INFINITY }
30
+ }
31
+
32
+ example {
33
+ a, b = [1.5, 1.6, 1.4], [0.7, 0.8, 0.8]
34
+
35
+ a.boof(b).should equal_float(-0.48888888888888893)
36
+ a.boof(b, &:max).should equal_float(-0.5)
37
+ a.boof(b, &:geomean).should equal_float(-0.4891270450709646)
38
+ a.boof(b) { |x| x.inject(:-) }.should equal_float(-0.3999999999999999)
39
+ }
40
+
41
+ [
42
+ [[1], [1], :mean],
43
+ [[1], [1, 2, 3], :mean],
44
+ [[1.5, 1.6, 1.4], [0.7, 0.8, 0.8], :mean],
45
+ [[1.5, 1.6, 1.4], [0.7, 0.8, 0.8], :geomean]
46
+ ].each { |a, b, m|
47
+ example { a.boost(a.boof(b, &m)).send(m).should equal_float(b.send(m)) }
48
+ }
49
+
50
+ end
@@ -0,0 +1,25 @@
1
+ require 'nuggets/array/combination'
2
+
3
+ describe Array, 'combination' do
4
+
5
+ let(:a) { %w[a b c d] }
6
+
7
+ example {
8
+ r = [%w[a b c], %w[a b d], %w[a c d], %w[b c d]]
9
+
10
+ a.comb(3).should == r
11
+ lambda { |b| a.comb(3, &b) }.should yield_successive_args(*r)
12
+ }
13
+
14
+ example {
15
+ a.comb(4, 2, 4).should == [%w[a b c d], %w[a b], %w[a c], %w[a d], %w[b c], %w[b d], %w[c d], %w[a b c d]]
16
+ }
17
+
18
+ example {
19
+ r = [%w[a b c d], %w[a b c], %w[a b d], %w[a c d], %w[b c d], %w[a b], %w[a c], %w[a d], %w[b c], %w[b d], %w[c d], %w[a], %w[b], %w[c], %w[d], []]
20
+
21
+ a.comb.should == r
22
+ lambda { |b| a.comb(&b) }.should yield_successive_args(*r)
23
+ }
24
+
25
+ end
@@ -0,0 +1,81 @@
1
+ require 'nuggets/array/correlation'
2
+
3
+ describe_extended Array, Nuggets::Array::CorrelationMixin do
4
+
5
+ example do
6
+ [].correlation_coefficient.should == 0.0
7
+ end
8
+
9
+ example do
10
+ [1].correlation_coefficient.should == 1.0
11
+ end
12
+
13
+ example do
14
+ [1, 1, 1].correlation_coefficient.should == 1.0
15
+ end
16
+
17
+ example do
18
+ [1, 2, 3].correlation_coefficient.should == 1.0
19
+ end
20
+
21
+ example do
22
+ [-1, -2, -3].correlation_coefficient.should == -1.0
23
+ end
24
+
25
+ example do
26
+ [1, 1.5, 2].correlation_coefficient.should == 1.0
27
+ end
28
+
29
+ example do
30
+ [3, 2, 1].correlation_coefficient.should == -1.0
31
+ end
32
+
33
+ example do
34
+ [-3, -2, -1].correlation_coefficient.should == -[3, 2, 1].correlation_coefficient
35
+ end
36
+
37
+ example do
38
+ [1, -2, 1, 2, 3, -4, 0, 3, 1, 2, 1, 0, 24].correlation_coefficient.should equal_float(0.478471417102228)
39
+ end
40
+
41
+ example do
42
+ [[1, 1]].correlation_coefficient.should == 1.0
43
+ end
44
+
45
+ example do
46
+ [[1, 1], [1, 1], [1, 1]].correlation_coefficient.should == 1.0
47
+ end
48
+
49
+ example do
50
+ [[-1, 1], [-1, 1], [-1, 1]].correlation_coefficient.should == 1.0
51
+ end
52
+
53
+ example do
54
+ [[1, -1], [1, -1], [1, -1]].correlation_coefficient.should == 1.0
55
+ end
56
+
57
+ example do
58
+ [[1, 1], [1, 2], [1, 3]].correlation_coefficient.should == 1.0
59
+ end
60
+
61
+ example do
62
+ [[1, 1], [2, 1], [3, 1]].correlation_coefficient.should == 1.0
63
+ end
64
+
65
+ example do
66
+ [[-1, 1], [-2, 1], [-3, 1]].correlation_coefficient.should == 1.0
67
+ end
68
+
69
+ example do
70
+ [[1, -1], [2, -1], [3, -1]].correlation_coefficient.should == 1.0
71
+ end
72
+
73
+ example do
74
+ [[3, 1], [2, 2], [1, 3]].correlation_coefficient.should == -1.0
75
+ end
76
+
77
+ example do
78
+ [[-3, 3], [-2, 2], [-1, 1]].correlation_coefficient.should == -[[3, 3], [2, 2], [1, 1]].correlation_coefficient
79
+ end
80
+
81
+ end
@@ -0,0 +1,16 @@
1
+ require 'nuggets/array/flatten_once'
2
+
3
+ describe Array, 'flatten_once' do
4
+
5
+ let(:a) { [1, 2, [3, 4, 5], 6, [7, [8, 9]]] }
6
+
7
+ example {
8
+ a.flatten_once.should == [1, 2, 3, 4, 5, 6, 7, [8, 9]]
9
+ }
10
+
11
+ example {
12
+ a.flatten_once!
13
+ a.should == [1, 2, 3, 4, 5, 6, 7, [8, 9]]
14
+ }
15
+
16
+ end
@@ -0,0 +1,43 @@
1
+ require 'nuggets/array/flush'
2
+
3
+ describe_extended Array, Nuggets::Array::FlushMixin do
4
+
5
+ example do
6
+ a = [1, 2, 3, 4]
7
+ a.flush.should == [1, 2, 3, 4]
8
+ a.should be_empty
9
+ end
10
+
11
+ example do
12
+ a = [1, 2, 3, 4]
13
+ a.flush.push(42).should == [1, 2, 3, 4, 42]
14
+ a.should be_empty
15
+ end
16
+
17
+ example do
18
+ a = [1, 2, 3, 4]
19
+ a.flush { |b| b.should == [1, 2, 3, 4]; 42 }.should == 42
20
+ a.should be_empty
21
+ end
22
+
23
+ example do
24
+ a = [1, 2, 3, 4]
25
+ a.flush { |b| b }.should be_empty
26
+ a.should be_empty
27
+ end
28
+
29
+ example do
30
+ a, c = [1, 2, 3, 4], nil
31
+ a.flush { |b| c = b; c.should == [1, 2, 3, 4] }
32
+ a.should be_empty
33
+ c.should be_empty
34
+ end
35
+
36
+ example do
37
+ a, c = [1, 2, 3, 4], nil
38
+ a.flush { |b| c = b.dup; c.should == [1, 2, 3, 4] }
39
+ a.should be_empty
40
+ c.should == [1, 2, 3, 4]
41
+ end
42
+
43
+ end
@@ -0,0 +1,52 @@
1
+ require 'nuggets/array/format'
2
+
3
+ describe Array, 'format' do
4
+
5
+ def self.test_format(*f)
6
+ f.pop.each { |x, y| example { (f.dup % x).should == y } }
7
+ end
8
+
9
+ test_format('"%s"',
10
+ [] => '',
11
+ 'string' => '"string"',
12
+ '' => ''
13
+ )
14
+
15
+ test_format('%s, (%s)', '%s', '(%s)',
16
+ ['place', 'country'] => 'place, (country)',
17
+ ['place', '' ] => 'place',
18
+ ['', 'country'] => '(country)',
19
+ ['', '' ] => ''
20
+ )
21
+
22
+ test_format('%s: %s (%s)', '%s: %s', '%s (%s)', '%s (%s)',
23
+ ['author', 'title', 'year'] => 'author: title (year)',
24
+ ['author', 'title', '' ] => 'author: title',
25
+ ['author', '', 'year'] => 'author (year)',
26
+ ['', 'title', 'year'] => 'title (year)',
27
+ ['author', '' , '' ] => 'author',
28
+ ['', 'title', '' ] => 'title',
29
+ ['', '', 'year'] => 'year',
30
+ ['', '', '' ] => ''
31
+ )
32
+
33
+ test_format({ :sep => ':' },
34
+ ['1', '2', '3', '4'] => '1:2:3:4',
35
+ ['1', '2', '3', '' ] => '1:2:3',
36
+ ['1', '2', '', '4'] => '1:2:4',
37
+ ['1', '', '3', '4'] => '1:3:4',
38
+ ['', '2', '3', '4'] => '2:3:4',
39
+ ['1', '2', '', '' ] => '1:2',
40
+ ['1', '', '3', '' ] => '1:3',
41
+ ['1', '', '', '4'] => '1:4',
42
+ ['', '2', '3', '' ] => '2:3',
43
+ ['', '2', '', '4'] => '2:4',
44
+ ['', '', '3', '4'] => '3:4',
45
+ ['1', '', '', '' ] => '1',
46
+ ['', '2', '', '' ] => '2',
47
+ ['', '', '3', '' ] => '3',
48
+ ['', '', '', '4'] => '4',
49
+ ['', '', '', '' ] => ''
50
+ )
51
+
52
+ end
@@ -0,0 +1,41 @@
1
+ require 'nuggets/array/hashify'
2
+
3
+ describe_extended Array, Nuggets::Array::HashifyMixin do
4
+
5
+ example do
6
+ hash = [1, 2, 3, 4].hashify
7
+ hash.should == { 1 => 1, 2 => 2, 3 => 3, 4 => 4 }
8
+ hash[42].should be_nil
9
+ end
10
+
11
+ example do
12
+ [1, 2, 3, 4].hashify { |i| [i, i ** 2] }.should == { 1 => 1, 2 => 4, 3 => 9, 4 => 16 }
13
+ end
14
+
15
+ example do
16
+ [1, 2, 3, 4].hashify { |i| [i ** 2, i] }.should == { 1 => 1, 4 => 2, 9 => 3, 16 => 4 }
17
+ end
18
+
19
+ example do
20
+ lambda { [1, 2, 3, 4].hashify { |i| i } }.should raise_error(ArgumentError)
21
+ end
22
+
23
+ example do
24
+ hash = [1, 2, 3, 4].hashify(0)
25
+ hash.should == { 1 => 1, 2 => 2, 3 => 3, 4 => 4 }
26
+ hash[42].should == 0
27
+ end
28
+
29
+ example do
30
+ hash = [1, 2, 3, 4].hashify(lambda { |h, k| h[k] = [] })
31
+ hash.should == { 1 => 1, 2 => 2, 3 => 3, 4 => 4 }
32
+ hash[42].should == []
33
+ end
34
+
35
+ example do
36
+ hash = [1, 2, 3, 4].hashify(4 => -1, 23 => 42)
37
+ hash.should == { 1 => 1, 2 => 2, 3 => 3, 4 => 4, 23 => 42 }
38
+ hash[42].should be_nil
39
+ end
40
+
41
+ end
@@ -0,0 +1,87 @@
1
+ require 'nuggets/array/histogram'
2
+
3
+ describe_extended Array, Nuggets::Array::HistogramMixin do
4
+
5
+ example do
6
+ [].histogram.should == {}
7
+ end
8
+
9
+ example do
10
+ [1].histogram.should == { 1 => 1 }
11
+ end
12
+
13
+ example do
14
+ [1, 1, 1].histogram.should == { 1 => 3 }
15
+ end
16
+
17
+ example do
18
+ [1, 2, 2, 3].histogram.should == { 1 => 1, 2 => 2, 3 => 1 }
19
+ end
20
+
21
+ example do
22
+ [3, 2, 2, 1].histogram.should == [1, 2, 2, 3].histogram
23
+ end
24
+
25
+ example do
26
+ [1, -2, 1, 2, 3, -4, 0, 3, 1, 2, 1, 0, 24].histogram.should == {
27
+ -4 => 1, -2 => 1, 0 => 2, 1 => 4, 2 => 2, 3 => 2, 24 => 1
28
+ }
29
+ end
30
+
31
+ example do
32
+ %w[one two three three].histogram.should == { 'one' => 1, 'two' => 1, 'three' => 2 }
33
+ end
34
+
35
+ example do
36
+ %w[three two one three].histogram.should == %w[one two three three].histogram
37
+ end
38
+
39
+ example do
40
+ [1, 2, 2, 3, 4].histogram { |x| x * 2 }.should == { 2 => 1, 4 => 2, 6 => 1, 8 => 1 }
41
+ end
42
+
43
+ example do
44
+ [1, 2, 3, 4].histogram { |x| x / 2 }.should == { 0 => 1, 1 => 2, 2 => 1 }
45
+ end
46
+
47
+ example do
48
+ [].probability_mass_function.should == {}
49
+ end
50
+
51
+ example do
52
+ [1].probability_mass_function.should == { 1 => 1 }
53
+ end
54
+
55
+ example do
56
+ [1, 1, 1].probability_mass_function.should == { 1 => 1 }
57
+ end
58
+
59
+ example do
60
+ [1, 2, 2, 3].probability_mass_function.should == { 1 => 0.25, 2 => 0.5, 3 => 0.25 }
61
+ end
62
+
63
+ example do
64
+ [3, 2, 2, 1].probability_mass_function.should == [1, 2, 2, 3].probability_mass_function
65
+ end
66
+
67
+ example do
68
+ [1, -2, 1, 2, 3, -4, 0, 3, 1, 2, 1, 0, 24].probability_mass_function.values.inject(:+).should equal_float(1.0)
69
+ end
70
+
71
+ example do
72
+ %w[one two three three].probability_mass_function.should == { 'one' => 0.25, 'two' => 0.25, 'three' => 0.5 }
73
+ end
74
+
75
+ example do
76
+ %w[three two one three].probability_mass_function.should == %w[one two three three].probability_mass_function
77
+ end
78
+
79
+ example do
80
+ [1, 2, 2, 3, 4].probability_mass_function { |x| x * 2 }.should == { 2 => 0.2, 4 => 0.4, 6 => 0.2, 8 => 0.2 }
81
+ end
82
+
83
+ example do
84
+ [1, 2, 3, 4].probability_mass_function { |x| x / 2 }.should == { 0 => 0.25, 1 => 0.5, 2 => 0.25 }
85
+ end
86
+
87
+ end
@@ -0,0 +1,13 @@
1
+ require 'nuggets/array/in_order'
2
+
3
+ describe Array, 'in_order' do
4
+
5
+ let(:a) { [:created_at, :email, :login, :updated_at] }
6
+
7
+ example { a.in_order(:login, :email).should == [:login, :email, :created_at, :updated_at] }
8
+
9
+ example { a.in_order(:email, :address).should == [:email, :created_at, :login, :updated_at] }
10
+
11
+ example { a.in_order!(:login, :email); a.should == [:login, :email, :created_at, :updated_at] }
12
+
13
+ end
@@ -0,0 +1,62 @@
1
+ require 'nuggets/array/limit'
2
+ require 'nuggets/numeric/limit'
3
+
4
+ describe_extended Array, Nuggets::Array::LimitMixin do
5
+
6
+ describe '#limit' do
7
+
8
+ example do
9
+ [].limit(0, 1).should == []
10
+ end
11
+
12
+ example do
13
+ [1].limit(0, 1).should == [1]
14
+ end
15
+
16
+ example do
17
+ [1, 1, 1].limit(0, 1).should == [1]
18
+ end
19
+
20
+ example do
21
+ [1, 2, 3].limit(0, 1).should == [1]
22
+ end
23
+
24
+ example do
25
+ [1, 2, 3].limit(0, 2).should == [1, 2]
26
+ end
27
+
28
+ example do
29
+ [-3, -2, -1].limit(0, 1).should == [0]
30
+ end
31
+
32
+ example do
33
+ [1, -2, 1, 2, 3, -4, 0, 3, 1, 2, 1, 0, 24].limit(-2, 2).should == [1, -2, 2, 0]
34
+ end
35
+
36
+ end
37
+
38
+ describe '#cap' do
39
+
40
+ example do
41
+ [1, 1, 1].cap(1).should == [1, 1, 1]
42
+ end
43
+
44
+ example do
45
+ [1, 2, 3].cap(1).should == [1, 1, 1]
46
+ end
47
+
48
+ example do
49
+ [1, 2, 3].cap(2).should == [1, 2, 2]
50
+ end
51
+
52
+ example do
53
+ [-3, -2, -1].cap(0).should == [-3, -2, -1]
54
+ end
55
+
56
+ example do
57
+ [1, -2, 1, 2, 3, -4, 0, 3, 1, 2, 1, 0, 24].cap(-2..2).should == [1, -2, 1, 2, 2, -2, 0, 2, 1, 2, 1, 0, 2]
58
+ end
59
+
60
+ end
61
+
62
+ end