nuggets 0.9.9 → 1.0.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 (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,102 @@
1
+ require 'nuggets/hash/nest'
2
+
3
+ describe_extended Hash, Nuggets::Hash::NestMixin, true do
4
+
5
+ example do
6
+ hash = Hash.nest
7
+ hash.should be_an_instance_of(Hash)
8
+
9
+ hash[:a].should be_nil
10
+ hash.should have_key(:a)
11
+ end
12
+
13
+ example do
14
+ hash = Hash.nest(0, 1)
15
+ hash.should be_an_instance_of(Hash)
16
+
17
+ hash[:a].should == 1
18
+ hash.should have_key(:a)
19
+ end
20
+
21
+ example do
22
+ hash = Hash.nest(1)
23
+ hash.should be_an_instance_of(Hash)
24
+
25
+ hash[:a].should be_an_instance_of(Hash)
26
+ hash.should have_key(:a)
27
+
28
+ hash[:a][:b].should be_nil
29
+ hash[:a].should have_key(:b)
30
+ end
31
+
32
+ example do
33
+ hash = Hash.nest(1, 1)
34
+ hash.should be_an_instance_of(Hash)
35
+
36
+ hash[:a].should be_an_instance_of(Hash)
37
+ hash.should have_key(:a)
38
+
39
+ hash[:a][:b].should == 1
40
+ hash[:a].should have_key(:b)
41
+ end
42
+
43
+ example do
44
+ hash = Hash.nest(1, [])
45
+ hash.should be_an_instance_of(Hash)
46
+
47
+ hash[:a].should be_an_instance_of(Hash)
48
+ hash.should have_key(:a)
49
+
50
+ hash[:a][:b].should == []
51
+ hash[:a].should have_key(:b)
52
+
53
+ hash[:a][:b] << 1
54
+ hash[:a][:b].should == [1]
55
+
56
+ hash[:a][:c] << 2
57
+ hash[:a][:c].should == [1, 2]
58
+
59
+ hash[:a][:b].should == [1, 2]
60
+ end
61
+
62
+ example do
63
+ hash = Hash.nest(1) { [] }
64
+ hash.should be_an_instance_of(Hash)
65
+
66
+ hash[:a].should be_an_instance_of(Hash)
67
+ hash.should have_key(:a)
68
+
69
+ hash[:a][:b].should == []
70
+ hash[:a].should have_key(:b)
71
+
72
+ hash[:a][:b] << 1
73
+ hash[:a][:b].should == [1]
74
+
75
+ hash[:a][:c] << 2
76
+ hash[:a][:c].should == [2]
77
+
78
+ hash[:a][:b].should == [1]
79
+ end
80
+
81
+ example do
82
+ hash = Hash.nest(3)
83
+ hash.should be_an_instance_of(Hash)
84
+
85
+ hash[:a].should be_an_instance_of(Hash)
86
+ hash.should have_key(:a)
87
+
88
+ hash[:a][:b].should be_an_instance_of(Hash)
89
+ hash[:a].should have_key(:b)
90
+
91
+ hash[:a][:b][:c].should be_an_instance_of(Hash)
92
+ hash[:a][:b].should have_key(:c)
93
+
94
+ hash[:a][:b][:c][:d].should be_nil
95
+ hash[:a][:b][:c].should have_key(:d)
96
+
97
+ hash[:a][:b][:c][:e] = 1
98
+ hash[:a][:b][:c][:e].should == 1
99
+ hash[:a][:b][:c].should have_key(:e)
100
+ end
101
+
102
+ end
@@ -0,0 +1,29 @@
1
+ require 'nuggets/hash/only'
2
+
3
+ describe Hash, 'only' do
4
+
5
+ example {
6
+ h = { a: 5 }
7
+
8
+ h.only.should == { a: 5 }
9
+ h.only_pair.should == [:a, 5]
10
+ h.only(true).should == { a: 5 }
11
+ }
12
+
13
+ example {
14
+ h = { 1 => 2, 3 => 4 }
15
+
16
+ lambda { h.only }.should raise_error(IndexError, 'not a single-element hash')
17
+ lambda { h.only_pair }.should raise_error(IndexError, 'not a single-element hash')
18
+ h.only(true).should == { 1 => 2 }
19
+ }
20
+
21
+ example {
22
+ h = {}
23
+
24
+ lambda { h.only }.should raise_error(IndexError, 'not a single-element hash')
25
+ lambda { h.only_pair }.should raise_error(IndexError, 'not a single-element hash')
26
+ h.only(true).should == {}
27
+ }
28
+
29
+ end
@@ -0,0 +1,36 @@
1
+ require 'nuggets/hash/seen'
2
+
3
+ describe_extended Hash, Nuggets::Hash::SeenMixin, true do
4
+
5
+ example do
6
+ hash = Hash.seen
7
+ hash.should be_an_instance_of(Hash)
8
+
9
+ hash[:a].should == false
10
+ hash.should have_key(:a)
11
+
12
+ hash[:a].should == true
13
+ hash[:a].should == true
14
+ end
15
+
16
+ example do
17
+ hash = Hash.seen(0, 1)
18
+ hash.should be_an_instance_of(Hash)
19
+
20
+ hash[:a].should == 1
21
+ hash.should have_key(:a)
22
+
23
+ hash[:a].should == 0
24
+ hash[:a].should == 0
25
+ end
26
+
27
+ example do
28
+ hash = Hash.seen.update(:a => :b)
29
+ hash.should be_an_instance_of(Hash)
30
+
31
+ hash[:a].should == :b
32
+ hash[:a].should == :b
33
+ hash.should have_key(:a)
34
+ end
35
+
36
+ end
@@ -0,0 +1,68 @@
1
+ require 'nuggets/hash/unroll'
2
+
3
+ describe_extended Hash, Nuggets::Hash::UnrollMixin do
4
+
5
+ example do
6
+ hash = {}
7
+ hash.unroll.should == [[]]
8
+ end
9
+
10
+ example do
11
+ hash = { 'a' => 1 }
12
+ hash.unroll.should == [[1]]
13
+ end
14
+
15
+ example do
16
+ hash = { 'a' => { 'b' => 1 } }
17
+ hash.unroll.should == [['a', 1]]
18
+ end
19
+
20
+ example do
21
+ hash = { :a => { :b => 1 } }
22
+ hash.unroll.should == [[:a, 1]]
23
+ end
24
+
25
+ example do
26
+ hash = { :a => { :b => 1, :c => 2 } }
27
+
28
+ result = hash.unroll.first
29
+ result.size.should == 3
30
+
31
+ result.first.should == :a
32
+ result.should include(1)
33
+ result.should include(2)
34
+ end
35
+
36
+ if RUBY_VERSION < '1.9'
37
+ example do
38
+ hash = { :a => { :b => 1, :c => 2 } }
39
+ lambda { hash.unroll(:sort => true) }.should raise_error(NoMethodError, /<=>/)
40
+ end
41
+
42
+ example do
43
+ hash = { :a => { :b => 1, :c => 2 } }
44
+ lambda { hash.unroll(:sort_by => lambda { |h| h.to_s }) }.should_not raise_error(NoMethodError)
45
+ end
46
+ end
47
+
48
+ example do
49
+ hash = { 'a' => { 'b' => 1, 'c' => 2 } }
50
+ hash.unroll(:sort => true).should == [['a', 1, 2]]
51
+ end
52
+
53
+ example do
54
+ hash = { 'a' => { 'b' => 1, 'c' => 2 }, 'd' => { 'b' => 0, 'c' => 3 } }
55
+ hash.unroll('b', 'c', :sort => true).should == [['a', 1, 2], ['d', 0, 3]]
56
+ end
57
+
58
+ example do
59
+ hash = { 'z' => { 'a' => { 'b' => 1, 'c' => 2 }, 'd' => { 'b' => 0, 'c' => 3 } } }
60
+ hash.unroll('b', :sort_by => lambda { |h| h.to_s }).should == [['z', 'a', 1], ['z', 'd', 0]]
61
+ end
62
+
63
+ example do
64
+ hash = { 'z' => { 'a' => { 'b' => 1, 'c' => 2 }, 'd' => { 'b' => 0, 'c' => 3 } } }
65
+ hash.unroll(:sort => true) { |h| h['b'] = nil; h['c'] *= 2 }.should == [['z', 'a', nil, 4], ['z', 'd', nil, 6]]
66
+ end
67
+
68
+ end
@@ -0,0 +1,13 @@
1
+ # encoding: utf-8
2
+
3
+ require 'nuggets/i18n'
4
+
5
+ describe String, 'i18n' do
6
+
7
+ let(:s) { 'Äh, Rüby iß sö cüül, nö? SÖS!' }
8
+
9
+ example { s.replace_diacritics.should == 'Aeh, Rueby iss soe cueuel, noe? SOES!' }
10
+
11
+ example { s.replace_diacritics!; s.should == 'Aeh, Rueby iss soe cueuel, noe? SOES!' }
12
+
13
+ end
@@ -0,0 +1,10 @@
1
+ require 'nuggets/integer/factorial'
2
+
3
+ describe Integer, 'factorial' do
4
+
5
+ { 1 => 1, 2 => 2, 3 => 6, 4 => 24, 5 => 120, 6 => 720 }.each { |i, j|
6
+ example { i.factorial.should == j }
7
+ example { i.factorial_memoized.should == j }
8
+ }
9
+
10
+ end
@@ -0,0 +1,18 @@
1
+ require 'nuggets/integer/length'
2
+
3
+ describe_extended Integer, Nuggets::Integer::LengthMixin do
4
+
5
+ {
6
+ 0 => [1, 1],
7
+ 123 => [3, 3],
8
+ -123 => [4, 3],
9
+ 1_000_000 => [7, 7],
10
+ -1_000_000 => [8, 7],
11
+ 10 ** 48 => [49, 49],
12
+ -(10 ** 48) => [50, 49]
13
+ }.each { |int, (len, cnt)|
14
+ example { int.length.should == len }
15
+ example { int.digit_count.should == cnt }
16
+ }
17
+
18
+ end
@@ -0,0 +1,19 @@
1
+ require 'nuggets/integer/map'
2
+
3
+ describe_extended Integer, Nuggets::Integer::MapMixin do
4
+
5
+ {
6
+ 0 => 1,
7
+ 1 => 2,
8
+ -1 => 3,
9
+ 123 => 246,
10
+ -123 => 247,
11
+ 1_000_000 => 2_000_000,
12
+ -1_000_000 => 2_000_001,
13
+ 10 ** 48 => 2_000_000_000_000_000_000_000_000_000_000_000_000_000_000_000_000,
14
+ -(10 ** 48) => 2_000_000_000_000_000_000_000_000_000_000_000_000_000_000_000_001
15
+ }.each { |int, map|
16
+ example { int.map_positive.should == map }
17
+ }
18
+
19
+ end
@@ -0,0 +1,19 @@
1
+ require 'nuggets/integer/to_binary_s'
2
+
3
+ describe Integer, 'to_binary_s' do
4
+
5
+ {
6
+ 20000 => %w[00000000000000000100111000100000 100111000100000],
7
+ 800 => %w[00000000000000000000001100100000 1100100000],
8
+ 300 => %w[00000000000000000000000100101100 100101100],
9
+ 700 => %w[00000000000000000000001010111100 1010111100],
10
+ 130 => %w[00000000000000000000000010000010 10000010],
11
+ 480 => %w[00000000000000000000000111100000 111100000],
12
+ 9999 => %w[00000000000000000010011100001111 10011100001111],
13
+ 25000 => %w[00000000000000000110000110101000 110000110101000]
14
+ }.each { |i, (j, k)|
15
+ example { i.to_binary_s.should == k }
16
+ example { i.to_binary_s(32).should == j }
17
+ }
18
+
19
+ end
@@ -0,0 +1,25 @@
1
+ require 'nuggets/numeric/duration'
2
+
3
+ describe Numeric, 'duration' do
4
+
5
+ {
6
+ 123 => [[[ 0, 2, 3], '2m3s', '2m3.00s'], [[0, 0, 0.0014236111111111112], '0d', '0d 2m3s']],
7
+ 123456789 => [[[34293, 33, 9], '34293h33m9s', '34293h33m9.00s'], [[3, 11, 3.1480208333333333], '3y11m3d', '3y11m3d 3h33m9s']],
8
+ 0 => [[[ 0, 0, 0], '0s', '0.00s'], [[0, 0, 0.0], '0d', '0d 0s']],
9
+ 0.001 => [[[ 0, 0, 0.001], '0s', '0.00s'], [[0, 0, 1.1574074074074074e-08], '0d', '0d 0s']],
10
+ 1.23 => [[[ 0, 0, 1.23], '1s', '1.23s'], [[0, 0, 1.4236111111111111e-05], '0d', '0d 1s']],
11
+ 1234.56789 => [[[ 0, 20, 34.567890000000034], '20m35s', '20m34.57s'], [[0, 0, 0.014288980208333333], '0d', '0d 20m35s']]
12
+ }.each { |n, (h, y)|
13
+ example { [n.hms, n.to_hms, n.to_hms(2)].should == h }
14
+ example { [n.ymd, n.to_ymd, n.to_ymd(true)].should == y }
15
+ }
16
+
17
+ example {
18
+ lambda { -1.hms }.should raise_error(ArgumentError, 'negative duration -1')
19
+ }
20
+
21
+ example {
22
+ lambda { -1.ymd }.should raise_error(ArgumentError, 'negative duration -1')
23
+ }
24
+
25
+ end
@@ -0,0 +1,16 @@
1
+ require 'nuggets/numeric/limit'
2
+
3
+ describe Numeric, 'limit' do
4
+
5
+ {
6
+ 123 => 10,
7
+ -123 => 0,
8
+ 0 => 0,
9
+ 0.001 => 0.001,
10
+ 1.23 => 1.23,
11
+ -12.3 => 0
12
+ }.each { |n, m|
13
+ example { n.between(0, 10).should == m }
14
+ }
15
+
16
+ end
@@ -0,0 +1,16 @@
1
+ require 'nuggets/numeric/signum'
2
+
3
+ describe Numeric, 'signum' do
4
+
5
+ {
6
+ 123 => 1,
7
+ -123 => -1,
8
+ 0 => 0,
9
+ 0.001 => 1,
10
+ 1.23 => 1,
11
+ -12.3 => -1
12
+ }.each { |n, s|
13
+ example { n.sign.should == s }
14
+ }
15
+
16
+ end
@@ -0,0 +1,16 @@
1
+ require 'nuggets/numeric/to_multiple'
2
+
3
+ describe Numeric, 'to_multiple' do
4
+
5
+ {
6
+ 123 => [ 120, 120, 130],
7
+ -123 => [-120, -130, -120],
8
+ 0 => [ 0, 0, 0],
9
+ 0.001 => [ 0, 0, 10],
10
+ 5.67 => [ 10, 0, 10],
11
+ -12.3 => [ -10, -20, -10]
12
+ }.each { |n, m|
13
+ example { [n.round_to(10), n.floor_to(10), n.ceil_to(10)].should == m }
14
+ }
15
+
16
+ end
@@ -0,0 +1,34 @@
1
+ require 'nuggets/object/blank'
2
+
3
+ describe_extended Object, Nuggets::Object::BlankMixin do
4
+
5
+ it { Array.ancestors.should include(Nuggets::Array::BlankMixin) }
6
+ it { Hash.ancestors.should include(Nuggets::Hash::BlankMixin) }
7
+
8
+ ['s', ' ', 0, 1, true, [nil]].each { |o|
9
+ example { o.should_not be_blank }
10
+ }
11
+
12
+ ['', nil, false, [], {}].each { |o|
13
+ example { o.should be_blank }
14
+ }
15
+
16
+ ['s', 1, true].each { |o|
17
+ example { o.should_not be_void }
18
+ example { o.should_not be_vain }
19
+ }
20
+
21
+ ['', ' ', 0, nil, false, [], [nil], {}].each { |o|
22
+ example { o.should be_void }
23
+ example { o.should be_vain }
24
+ }
25
+
26
+ [['', [], [nil], {}], { :x => nil, :y => [], :z => { :zz => nil } }].each { |o|
27
+ example { o.should_not be_void }
28
+ }
29
+
30
+ [['', [], [nil], {}], { :x => nil, :y => [], :z => { :zz => nil } }].each { |o|
31
+ example { o.should be_vain }
32
+ }
33
+
34
+ end