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.
- checksums.yaml +4 -4
- data/COPYING +663 -0
- data/ChangeLog +7 -0
- data/README +74 -0
- data/Rakefile +50 -0
- data/lib/nuggets.rb +73 -0
- data/lib/nuggets/all.rb +35 -0
- data/lib/nuggets/all_mixins.rb +33 -0
- data/lib/nuggets/ansicolor2css.rb +124 -0
- data/lib/nuggets/argv/option.rb +3 -0
- data/lib/nuggets/argv/option_mixin.rb +84 -0
- data/lib/nuggets/array/boost.rb +5 -0
- data/lib/nuggets/array/boost_mixin.rb +77 -0
- data/lib/nuggets/array/combination.rb +62 -0
- data/lib/nuggets/array/correlation.rb +5 -0
- data/lib/nuggets/array/correlation_mixin.rb +63 -0
- data/lib/nuggets/array/flatten_once.rb +56 -0
- data/lib/nuggets/array/flush.rb +5 -0
- data/lib/nuggets/array/flush_mixin.rb +46 -0
- data/lib/nuggets/array/format.rb +65 -0
- data/lib/nuggets/array/hashify.rb +5 -0
- data/lib/nuggets/array/hashify_mixin.rb +47 -0
- data/lib/nuggets/array/histogram.rb +5 -0
- data/lib/nuggets/array/histogram_mixin.rb +169 -0
- data/lib/nuggets/array/in_order.rb +50 -0
- data/lib/nuggets/array/limit.rb +5 -0
- data/lib/nuggets/array/limit_mixin.rb +56 -0
- data/lib/nuggets/array/mean.rb +5 -0
- data/lib/nuggets/array/mean_mixin.rb +202 -0
- data/lib/nuggets/array/median.rb +5 -0
- data/lib/nuggets/array/median_mixin.rb +73 -0
- data/lib/nuggets/array/mode.rb +5 -0
- data/lib/nuggets/array/mode_mixin.rb +69 -0
- data/lib/nuggets/array/monotone.rb +83 -0
- data/lib/nuggets/array/only.rb +41 -0
- data/lib/nuggets/array/rand.rb +44 -0
- data/lib/nuggets/array/regression.rb +5 -0
- data/lib/nuggets/array/regression_mixin.rb +149 -0
- data/lib/nuggets/array/runiq.rb +5 -0
- data/lib/nuggets/array/runiq_mixin.rb +52 -0
- data/lib/nuggets/array/shuffle.rb +132 -0
- data/lib/nuggets/array/standard_deviation.rb +5 -0
- data/lib/nuggets/array/standard_deviation_mixin.rb +50 -0
- data/lib/nuggets/array/to_hash.rb +64 -0
- data/lib/nuggets/array/variance.rb +5 -0
- data/lib/nuggets/array/variance_mixin.rb +81 -0
- data/lib/nuggets/content_type.rb +97 -0
- data/lib/nuggets/dotted_decimal.rb +59 -0
- data/lib/nuggets/enumerable/agrep.rb +79 -0
- data/lib/nuggets/enumerable/all_any_extended.rb +66 -0
- data/lib/nuggets/enumerable/minmax.rb +102 -0
- data/lib/nuggets/env/set.rb +3 -0
- data/lib/nuggets/env/set_mixin.rb +67 -0
- data/lib/nuggets/env/user_encoding.rb +3 -0
- data/lib/nuggets/env/user_encoding_mixin.rb +54 -0
- data/lib/nuggets/env/user_home.rb +3 -0
- data/lib/nuggets/env/user_home_mixin.rb +56 -0
- data/lib/nuggets/file/ext.rb +5 -0
- data/lib/nuggets/file/ext_mixin.rb +87 -0
- data/lib/nuggets/file/replace.rb +5 -0
- data/lib/nuggets/file/replace_mixin.rb +55 -0
- data/lib/nuggets/file/sub.rb +5 -0
- data/lib/nuggets/file/sub_mixin.rb +95 -0
- data/lib/nuggets/file/which.rb +5 -0
- data/lib/nuggets/file/which_mixin.rb +72 -0
- data/lib/nuggets/hash/at.rb +68 -0
- data/lib/nuggets/hash/deep_fetch.rb +5 -0
- data/lib/nuggets/hash/deep_fetch_mixin.rb +74 -0
- data/lib/nuggets/hash/deep_merge.rb +5 -0
- data/lib/nuggets/hash/deep_merge_mixin.rb +53 -0
- data/lib/nuggets/hash/idmap.rb +5 -0
- data/lib/nuggets/hash/idmap_mixin.rb +41 -0
- data/lib/nuggets/hash/in_order.rb +43 -0
- data/lib/nuggets/hash/insert.rb +53 -0
- data/lib/nuggets/hash/nest.rb +5 -0
- data/lib/nuggets/hash/nest_mixin.rb +78 -0
- data/lib/nuggets/hash/only.rb +52 -0
- data/lib/nuggets/hash/seen.rb +5 -0
- data/lib/nuggets/hash/seen_mixin.rb +58 -0
- data/lib/nuggets/hash/unroll.rb +5 -0
- data/lib/nuggets/hash/unroll_mixin.rb +88 -0
- data/lib/nuggets/hash/zip.rb +5 -0
- data/lib/nuggets/hash/zip_mixin.rb +159 -0
- data/lib/nuggets/i18n.rb +155 -0
- data/lib/nuggets/integer/factorial.rb +56 -0
- data/lib/nuggets/integer/length.rb +5 -0
- data/lib/nuggets/integer/length_mixin.rb +49 -0
- data/lib/nuggets/integer/map.rb +5 -0
- data/lib/nuggets/integer/map_mixin.rb +42 -0
- data/lib/nuggets/integer/to_binary_s.rb +38 -0
- data/lib/nuggets/io/agrep.rb +43 -0
- data/lib/nuggets/io/interact.rb +5 -0
- data/lib/nuggets/io/interact_mixin.rb +159 -0
- data/lib/nuggets/io/modes.rb +121 -0
- data/lib/nuggets/io/null.rb +5 -0
- data/lib/nuggets/io/null_mixin.rb +40 -0
- data/lib/nuggets/io/redirect.rb +5 -0
- data/lib/nuggets/io/redirect_mixin.rb +50 -0
- data/lib/nuggets/lazy_attr.rb +44 -0
- data/lib/nuggets/log_parser.rb +70 -0
- data/lib/nuggets/log_parser/apache.rb +101 -0
- data/lib/nuggets/log_parser/rails.rb +219 -0
- data/lib/nuggets/net/success.rb +59 -0
- data/lib/nuggets/numeric/between.rb +2 -0
- data/lib/nuggets/numeric/duration.rb +100 -0
- data/lib/nuggets/numeric/limit.rb +62 -0
- data/lib/nuggets/numeric/signum.rb +52 -0
- data/lib/nuggets/numeric/to_multiple.rb +61 -0
- data/lib/nuggets/object/blank.rb +20 -0
- data/lib/nuggets/object/blank_mixin.rb +99 -0
- data/lib/nuggets/object/boolean.rb +5 -0
- data/lib/nuggets/object/boolean_mixin.rb +61 -0
- data/lib/nuggets/object/eigenclass.rb +2 -0
- data/lib/nuggets/object/ghost_class.rb +2 -0
- data/lib/nuggets/object/metaclass.rb +2 -0
- data/lib/nuggets/object/msend.rb +5 -0
- data/lib/nuggets/object/msend_mixin.rb +43 -0
- data/lib/nuggets/object/silence.rb +5 -0
- data/lib/nuggets/object/silence_mixin.rb +44 -0
- data/lib/nuggets/object/singleton_class.rb +5 -0
- data/lib/nuggets/object/singleton_class_mixin.rb +95 -0
- data/lib/nuggets/object/uniclass.rb +2 -0
- data/lib/nuggets/object/virtual_class.rb +2 -0
- data/lib/nuggets/pluggable.rb +91 -0
- data/lib/nuggets/proc/bind.rb +5 -0
- data/lib/nuggets/proc/bind_mixin.rb +51 -0
- data/lib/nuggets/range/quantile.rb +5 -0
- data/lib/nuggets/range/quantile_mixin.rb +42 -0
- data/lib/nuggets/ruby.rb +235 -0
- data/lib/nuggets/statistics.rb +12 -0
- data/lib/nuggets/statistics_mixins.rb +12 -0
- data/lib/nuggets/string/camelscore.rb +5 -0
- data/lib/nuggets/string/camelscore_mixin.rb +116 -0
- data/lib/nuggets/string/capitalize_first.rb +46 -0
- data/lib/nuggets/string/case.rb +81 -0
- data/lib/nuggets/string/evaluate.rb +5 -0
- data/lib/nuggets/string/evaluate_mixin.rb +47 -0
- data/lib/nuggets/string/msub.rb +84 -0
- data/lib/nuggets/string/nsub.rb +65 -0
- data/lib/nuggets/string/sub_with_md.rb +111 -0
- data/lib/nuggets/string/wc.rb +5 -0
- data/lib/nuggets/string/wc_mixin.rb +95 -0
- data/lib/nuggets/string/word_wrap.rb +76 -0
- data/lib/nuggets/string/xor.rb +5 -0
- data/lib/nuggets/string/xor_mixin.rb +59 -0
- data/lib/nuggets/tempfile/open.rb +57 -0
- data/lib/nuggets/uri/content_type.rb +5 -0
- data/lib/nuggets/uri/content_type_mixin.rb +47 -0
- data/lib/nuggets/uri/exist.rb +5 -0
- data/lib/nuggets/uri/exist_mixin.rb +56 -0
- data/lib/nuggets/uri/redirect.rb +5 -0
- data/lib/nuggets/uri/redirect_mixin.rb +101 -0
- data/lib/nuggets/version.rb +27 -0
- data/spec/nuggets/array/boost_spec.rb +50 -0
- data/spec/nuggets/array/combination_spec.rb +25 -0
- data/spec/nuggets/array/correlation_spec.rb +81 -0
- data/spec/nuggets/array/flatten_once_spec.rb +16 -0
- data/spec/nuggets/array/flush_spec.rb +43 -0
- data/spec/nuggets/array/format_spec.rb +52 -0
- data/spec/nuggets/array/hashify_spec.rb +41 -0
- data/spec/nuggets/array/histogram_spec.rb +87 -0
- data/spec/nuggets/array/in_order_spec.rb +13 -0
- data/spec/nuggets/array/limit_spec.rb +62 -0
- data/spec/nuggets/array/mean_spec.rb +203 -0
- data/spec/nuggets/array/median_spec.rb +77 -0
- data/spec/nuggets/array/mode_spec.rb +57 -0
- data/spec/nuggets/array/monotone_spec.rb +30 -0
- data/spec/nuggets/array/only_spec.rb +26 -0
- data/spec/nuggets/array/regression_spec.rb +54 -0
- data/spec/nuggets/array/runiq_spec.rb +25 -0
- data/spec/nuggets/array/standard_deviation_spec.rb +33 -0
- data/spec/nuggets/array/to_hash_spec.rb +28 -0
- data/spec/nuggets/array/variance_spec.rb +106 -0
- data/spec/nuggets/dotted_decimal_spec.rb +27 -0
- data/spec/nuggets/enumerable/all_any_extended_spec.rb +31 -0
- data/spec/nuggets/enumerable/minmax_spec.rb +21 -0
- data/spec/nuggets/env/set_spec.rb +29 -0
- data/spec/nuggets/env/user_encoding_spec.rb +38 -0
- data/spec/nuggets/env/user_home_spec.rb +42 -0
- data/spec/nuggets/file/ext_spec.rb +38 -0
- data/spec/nuggets/file/replace_spec.rb +95 -0
- data/spec/nuggets/file/sub_spec.rb +149 -0
- data/spec/nuggets/file/which_spec.rb +22 -0
- data/spec/nuggets/hash/at_spec.rb +19 -0
- data/spec/nuggets/hash/deep_fetch_spec.rb +159 -0
- data/spec/nuggets/hash/deep_merge_spec.rb +78 -0
- data/spec/nuggets/hash/in_order_spec.rb +12 -0
- data/spec/nuggets/hash/insert_spec.rb +13 -0
- data/spec/nuggets/hash/nest_spec.rb +102 -0
- data/spec/nuggets/hash/only_spec.rb +29 -0
- data/spec/nuggets/hash/seen_spec.rb +36 -0
- data/spec/nuggets/hash/unroll_spec.rb +68 -0
- data/spec/nuggets/i18n_spec.rb +13 -0
- data/spec/nuggets/integer/factorial_spec.rb +10 -0
- data/spec/nuggets/integer/length_spec.rb +18 -0
- data/spec/nuggets/integer/map_spec.rb +19 -0
- data/spec/nuggets/integer/to_binary_s_spec.rb +19 -0
- data/spec/nuggets/numeric/duration_spec.rb +25 -0
- data/spec/nuggets/numeric/limit_spec.rb +16 -0
- data/spec/nuggets/numeric/signum_spec.rb +16 -0
- data/spec/nuggets/numeric/to_multiple_spec.rb +16 -0
- data/spec/nuggets/object/blank_spec.rb +34 -0
- data/spec/nuggets/object/boolean_spec.rb +23 -0
- data/spec/nuggets/object/msend_spec.rb +25 -0
- data/spec/nuggets/object/silence_spec.rb +36 -0
- data/spec/nuggets/object/singleton_class_spec.rb +51 -0
- data/spec/nuggets/proc/bind_spec.rb +28 -0
- data/spec/nuggets/range/quantile_spec.rb +33 -0
- data/spec/nuggets/string/camelscore_spec.rb +114 -0
- data/spec/nuggets/string/capitalize_first_spec.rb +13 -0
- data/spec/nuggets/string/case_spec.rb +31 -0
- data/spec/nuggets/string/evaluate_spec.rb +24 -0
- data/spec/nuggets/string/msub_spec.rb +20 -0
- data/spec/nuggets/string/nsub_spec.rb +13 -0
- data/spec/nuggets/string/sub_with_md_spec.rb +25 -0
- data/spec/nuggets/string/wc_spec.rb +73 -0
- data/spec/nuggets/string/word_wrap_spec.rb +81 -0
- data/spec/nuggets/string/xor_spec.rb +57 -0
- data/spec/nuggets/uri/content_type_spec.rb +42 -0
- data/spec/nuggets/uri/exist_spec.rb +49 -0
- data/spec/spec_helper.rb +36 -0
- 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,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/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
|