hashery 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.
- data/HISTORY +15 -0
- data/LICENSE +23 -0
- data/README.rdoc +47 -0
- data/ROADMAP.rdoc +13 -0
- data/lib/hashery.rb +13 -0
- data/lib/hashery/castinghash.rb +171 -0
- data/lib/hashery/dictionary.rb +430 -0
- data/lib/hashery/lruhash.rb +274 -0
- data/lib/hashery/memoizer.rb +64 -0
- data/lib/hashery/opencascade.rb +82 -0
- data/lib/hashery/openhash.rb +65 -0
- data/lib/hashery/openobject.rb +279 -0
- data/lib/hashery/orderedhash.rb +417 -0
- data/lib/hashery/ostructable.rb +209 -0
- data/lib/hashery/queryhash.rb +35 -0
- data/lib/hashery/stash.rb +181 -0
- data/lib/hashery/statichash.rb +48 -0
- data/meta/authors +3 -0
- data/meta/created +1 -0
- data/meta/description +5 -0
- data/meta/homepage +1 -0
- data/meta/license +1 -0
- data/meta/name +1 -0
- data/meta/release +1 -0
- data/meta/repository +1 -0
- data/meta/suite +1 -0
- data/meta/summary +1 -0
- data/meta/version +1 -0
- data/test/case_dictionary.rb +142 -0
- data/test/case_opencascade.rb +68 -0
- data/test/case_openhash.rb +18 -0
- data/test/case_openobject.rb +130 -0
- data/test/case_stash.rb +131 -0
- metadata +102 -0
data/meta/authors
ADDED
data/meta/created
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2010-04-21
|
data/meta/description
ADDED
@@ -0,0 +1,5 @@
|
|
1
|
+
The Facets Hashery is collection of Hash-like classes, spun-off
|
2
|
+
from the original Ruby Facets library. Included are the widely
|
3
|
+
used OrderedHash, the related but more featured Dictionary
|
4
|
+
class, a number of _open_ classes, similiar to the standard
|
5
|
+
OpenStruct and variations on the standard Hash.
|
data/meta/homepage
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
http://rubyworks.github.com/hashery
|
data/meta/license
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
MIT
|
data/meta/name
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
hashery
|
data/meta/release
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2009-06-26
|
data/meta/repository
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
git://github.com/rubyworks/hashery.git
|
data/meta/suite
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
rubyworks
|
data/meta/summary
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
Facets bread collection of Hash-like classes.
|
data/meta/version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
1.0.0
|
@@ -0,0 +1,142 @@
|
|
1
|
+
require 'hashery/dictionary.rb'
|
2
|
+
require 'ae/legacy'
|
3
|
+
|
4
|
+
TestCase Dictionary do
|
5
|
+
|
6
|
+
Unit :create do
|
7
|
+
d = Dictionary['z', 1, 'a', 2, 'c', 3]
|
8
|
+
assert_equal( ['z','a','c'], d.keys )
|
9
|
+
end
|
10
|
+
|
11
|
+
Unit :[]= do
|
12
|
+
d = Dictionary.new
|
13
|
+
d['z'] = 1
|
14
|
+
d['a'] = 2
|
15
|
+
d['c'] = 3
|
16
|
+
assert_equal( ['z','a','c'], d.keys )
|
17
|
+
end
|
18
|
+
|
19
|
+
Unit :push do
|
20
|
+
d = Dictionary['a', 1, 'c', 2, 'z', 3]
|
21
|
+
assert( d.push('end', 15) )
|
22
|
+
assert_equal( 15, d['end'] )
|
23
|
+
assert( ! d.push('end', 30) )
|
24
|
+
assert( d.unshift('begin', 50) )
|
25
|
+
assert_equal( 50, d['begin'] )
|
26
|
+
assert( ! d.unshift('begin', 60) )
|
27
|
+
assert_equal( ["begin", "a", "c", "z", "end"], d.keys )
|
28
|
+
assert_equal( ["end", 15], d.pop )
|
29
|
+
assert_equal( ["begin", "a", "c", "z"], d.keys )
|
30
|
+
assert_equal( ["begin", 50], d.shift )
|
31
|
+
end
|
32
|
+
|
33
|
+
Unit :insert do
|
34
|
+
# front
|
35
|
+
d = Dictionary['a', 1, 'b', 2, 'c', 3]
|
36
|
+
r = Dictionary['d', 4, 'a', 1, 'b', 2, 'c', 3]
|
37
|
+
assert_equal( 4, d.insert(0,'d',4) )
|
38
|
+
assert_equal( r, d )
|
39
|
+
# back
|
40
|
+
d = Dictionary['a', 1, 'b', 2, 'c', 3]
|
41
|
+
r = Dictionary['a', 1, 'b', 2, 'c', 3, 'd', 4]
|
42
|
+
assert_equal( 4, d.insert(-1,'d',4) )
|
43
|
+
assert_equal( r, d )
|
44
|
+
end
|
45
|
+
|
46
|
+
Unit :update do
|
47
|
+
# with other orderred hash
|
48
|
+
d = Dictionary['a', 1, 'b', 2, 'c', 3]
|
49
|
+
c = Dictionary['d', 4]
|
50
|
+
r = Dictionary['a', 1, 'b', 2, 'c', 3, 'd', 4]
|
51
|
+
assert_equal( r, d.update(c) )
|
52
|
+
assert_equal( r, d )
|
53
|
+
# with other hash
|
54
|
+
d = Dictionary['a', 1, 'b', 2, 'c', 3]
|
55
|
+
c = { 'd' => 4 }
|
56
|
+
r = Dictionary['a', 1, 'b', 2, 'c', 3, 'd', 4]
|
57
|
+
assert_equal( r, d.update(c) )
|
58
|
+
assert_equal( r, d )
|
59
|
+
end
|
60
|
+
|
61
|
+
Unit :merge do
|
62
|
+
# with other orderred hash
|
63
|
+
d = Dictionary['a', 1, 'b', 2, 'c', 3]
|
64
|
+
c = Dictionary['d', 4]
|
65
|
+
r = Dictionary['a', 1, 'b', 2, 'c', 3, 'd', 4]
|
66
|
+
assert_equal( r, d.merge(c) )
|
67
|
+
# with other hash
|
68
|
+
d = Dictionary['a', 1, 'b', 2, 'c', 3]
|
69
|
+
c = { 'd' => 4 }
|
70
|
+
r = Dictionary['a', 1, 'b', 2, 'c', 3, 'd', 4]
|
71
|
+
assert_equal( r, d.merge(c) )
|
72
|
+
end
|
73
|
+
|
74
|
+
Unit :order_by do
|
75
|
+
d = Dictionary['a', 3, 'b', 2, 'c', 1]
|
76
|
+
d.order_by{ |k,v| v }
|
77
|
+
assert_equal( [1,2,3], d.values )
|
78
|
+
assert_equal( ['c','b','a'], d.keys )
|
79
|
+
end
|
80
|
+
|
81
|
+
Unit :[]= do
|
82
|
+
d = Dictionary[]
|
83
|
+
d[:a] = 1
|
84
|
+
d[:c] = 3
|
85
|
+
assert_equal( [1,3], d.values )
|
86
|
+
d[:b,1] = 2
|
87
|
+
assert_equal( [1,2,3], d.values )
|
88
|
+
assert_equal( [:a,:b,:c], d.keys )
|
89
|
+
end
|
90
|
+
|
91
|
+
Unit :reverse! do
|
92
|
+
d = Dictionary['z', 1, 'a', 2, 'c', 3]
|
93
|
+
d.reverse!
|
94
|
+
assert_equal( ['c','a','z'], d.keys )
|
95
|
+
end
|
96
|
+
|
97
|
+
Unit :enumerable do
|
98
|
+
d = Dictionary[]
|
99
|
+
d[:a] = "a"
|
100
|
+
d[:c] = "b"
|
101
|
+
assert_equal( ["A","B"], d.collect{|k,v| v.capitalize} )
|
102
|
+
end
|
103
|
+
|
104
|
+
Unit :autohash do
|
105
|
+
d = Dictionary.new{ |hash,key| hash[key] = 0 }
|
106
|
+
d[:a] = 0
|
107
|
+
d[:b] += 1
|
108
|
+
assert_equal([0, 1], d.values)
|
109
|
+
assert_equal([:a,:b], d.keys)
|
110
|
+
end
|
111
|
+
|
112
|
+
Unit :dup => "with array values" do
|
113
|
+
d = Dictionary.new
|
114
|
+
d.dup
|
115
|
+
d[:a]=['t',5]
|
116
|
+
assert_equal(d, d.dup)
|
117
|
+
end
|
118
|
+
|
119
|
+
Unit :first do
|
120
|
+
d = Dictionary[]
|
121
|
+
d[:a] = "a"
|
122
|
+
d[:b] = "b"
|
123
|
+
d[:c] = "c"
|
124
|
+
assert_equal( "a" , d.first )
|
125
|
+
assert_equal( [] , d.first(0) )
|
126
|
+
assert_equal( ["a"] , d.first(1) )
|
127
|
+
assert_equal( ["a", "b"] , d.first(2) )
|
128
|
+
end
|
129
|
+
|
130
|
+
Unit :last do
|
131
|
+
d = Dictionary[]
|
132
|
+
d[:a] = "a"
|
133
|
+
d[:b] = "b"
|
134
|
+
d[:c] = "c"
|
135
|
+
assert_equal( "c" , d.last )
|
136
|
+
assert_equal( [] , d.last(0) )
|
137
|
+
assert_equal( ["c"] , d.last(1) )
|
138
|
+
assert_equal( ["b", "c"] , d.last(2) )
|
139
|
+
end
|
140
|
+
|
141
|
+
end
|
142
|
+
|
@@ -0,0 +1,68 @@
|
|
1
|
+
require 'hashery/opencascade'
|
2
|
+
require 'ae/legacy' # bacause imitation BasicObject sucks
|
3
|
+
|
4
|
+
TestCase OpenCascade do
|
5
|
+
|
6
|
+
Unit :new do
|
7
|
+
o = OpenCascade.new(:a=>1)
|
8
|
+
assert_equal(OpenCascade.new, o.assert)
|
9
|
+
end
|
10
|
+
|
11
|
+
Unit :[] => "initialization" do
|
12
|
+
o = OpenCascade[:a=>1,:b=>2]
|
13
|
+
assert_equal(1, o.a)
|
14
|
+
assert_equal(2, o.b)
|
15
|
+
end
|
16
|
+
|
17
|
+
Unit :[] => "mutlt-depth lookup" do
|
18
|
+
o = OpenCascade[:a=>1,:b=>2,:c=>{:x=>9}]
|
19
|
+
assert_equal(9, o.c.x)
|
20
|
+
end
|
21
|
+
|
22
|
+
Unit :[] => "basic assignment" do
|
23
|
+
o = OpenCascade.new
|
24
|
+
o[:a] = 1
|
25
|
+
assert_equal(1, o.a)
|
26
|
+
end
|
27
|
+
|
28
|
+
Unit :[] => "basic assignment with primed OpenCascade" do
|
29
|
+
o = OpenCascade[:a=>1]
|
30
|
+
o[:b] = 2
|
31
|
+
assert_equal({:a=>1,:b=>2}, o.to_h)
|
32
|
+
end
|
33
|
+
|
34
|
+
Unit :to_a do
|
35
|
+
o = OpenCascade[:a=>1,:b=>2]
|
36
|
+
assert_equal([[:a,1], [:b,2]], o.to_a)
|
37
|
+
end
|
38
|
+
|
39
|
+
Unit :to_h do
|
40
|
+
o = OpenCascade[:a=>1]
|
41
|
+
assert_equal({:a=>1}, o.to_h)
|
42
|
+
end
|
43
|
+
|
44
|
+
Unit :merge! do
|
45
|
+
o = OpenCascade[:f0=>"f0"]
|
46
|
+
h = { :h0=>"h0" }
|
47
|
+
r = OpenCascade[:f0=>"f0", :h0=>"h0"]
|
48
|
+
assert_equal(r, o.merge!(h))
|
49
|
+
assert_equal({:f0=>"f0", :h0=>"h0"}, h.merge(o))
|
50
|
+
end
|
51
|
+
|
52
|
+
Unit :update! do
|
53
|
+
o = OpenCascade[:f1=>"f1"]
|
54
|
+
h = { :h1=>"h1" }
|
55
|
+
o.update!(h)
|
56
|
+
h.update(o)
|
57
|
+
assert_equal(OpenCascade[:f1=>"f1", :h1=>"h1"], o)
|
58
|
+
assert_equal({:f1=>"f1", :h1=>"h1"}, h)
|
59
|
+
end
|
60
|
+
|
61
|
+
Unit :method_missing => "writer and reader" do
|
62
|
+
o = OpenCascade.new
|
63
|
+
10.times{ |i| o.__send__("n#{i}=", 1 ) }
|
64
|
+
10.times{ |i| assert_equal(1, o.__send__("n#{i}")) }
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
68
|
+
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'hashery/openhash'
|
2
|
+
|
3
|
+
TestCase OpenHash do
|
4
|
+
|
5
|
+
Unit :new do
|
6
|
+
o = OpenHash.new(:a=>1, :b=>2)
|
7
|
+
o.a.assert == 1
|
8
|
+
o.b.assert == 2
|
9
|
+
end
|
10
|
+
|
11
|
+
Unit :new do
|
12
|
+
o = OpenHash.new(:a=>1, :b=>2)
|
13
|
+
o.a.assert == 1
|
14
|
+
o.b.assert == 2
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
|
@@ -0,0 +1,130 @@
|
|
1
|
+
require 'hashery/openobject'
|
2
|
+
|
3
|
+
TestCase OpenObject do
|
4
|
+
|
5
|
+
Unit :respond_to? do
|
6
|
+
o = OpenObject.new
|
7
|
+
assert{ o.respond_to?(:key?) }
|
8
|
+
end
|
9
|
+
|
10
|
+
Unit :is_a? do
|
11
|
+
assert OpenObject[{}].is_a?(Hash)
|
12
|
+
assert OpenObject[{}].is_a?(OpenObject)
|
13
|
+
end
|
14
|
+
|
15
|
+
Unit :[] => "subhash access" do
|
16
|
+
o = OpenObject[:a=>1,:b=>{:x=>9}]
|
17
|
+
assert{ o[:b][:x] == 9 }
|
18
|
+
assert{ o.b[:x] == 9 }
|
19
|
+
end
|
20
|
+
|
21
|
+
Unit :[] => "indifferent key access" do
|
22
|
+
o = OpenObject["a"=>1,"b"=>{:x=>9}]
|
23
|
+
assert{ o["a"] == 1 }
|
24
|
+
assert{ o[:a] == 1 }
|
25
|
+
assert{ o["b"] == {:x=>9} }
|
26
|
+
assert{ o[:b] == {:x=>9} }
|
27
|
+
assert{ o["b"][:x] == 9 }
|
28
|
+
assert{ o[:b]["x"] == nil }
|
29
|
+
end
|
30
|
+
|
31
|
+
Unit :[]= => "setting first entry" do
|
32
|
+
f0 = OpenObject.new
|
33
|
+
f0[:a] = 1
|
34
|
+
assert{ f0.to_h == {:a=>1} }
|
35
|
+
end
|
36
|
+
|
37
|
+
Unit :[]= => "setting an additional entry" do
|
38
|
+
f0 = OpenObject[:a=>1]
|
39
|
+
f0[:b] = 2
|
40
|
+
assert{ f0.to_h == {:a=>1,:b=>2} }
|
41
|
+
end
|
42
|
+
|
43
|
+
Unit :method_missing => "reading entries" do
|
44
|
+
f0 = OpenObject[:class=>1]
|
45
|
+
assert{ f0.class == 1 }
|
46
|
+
end
|
47
|
+
|
48
|
+
Unit :method_missing => "setting entries" do
|
49
|
+
fo = OpenObject.new
|
50
|
+
9.times{ |i| fo.__send__("n#{i}=", 1) }
|
51
|
+
9.times{ |i|
|
52
|
+
assert( fo.__send__("n#{i}") == 1 )
|
53
|
+
}
|
54
|
+
end
|
55
|
+
|
56
|
+
Unit :method_missing => "using bang" do
|
57
|
+
o = OpenObject.new
|
58
|
+
o.a = 10
|
59
|
+
o.b = 20
|
60
|
+
h = {}
|
61
|
+
o.each!{ |k,v| h[k] = v + 10 }
|
62
|
+
assert( h == {:a=>20, :b=>30} )
|
63
|
+
end
|
64
|
+
|
65
|
+
#Unit :as_hash do
|
66
|
+
# f0 = OpenObject[:f0=>"f0"]
|
67
|
+
# h0 = { :h0=>"h0" }
|
68
|
+
# assert{ OpenObject[:f0=>"f0", :h0=>"h0"] == f0.as_hash.merge(h0) }
|
69
|
+
# assert{ {:f0=>"f0", :h0=>"h0"} == h0.merge(f0) }
|
70
|
+
#end
|
71
|
+
|
72
|
+
Unit :as_hash do
|
73
|
+
f1 = OpenObject[:f1=>"f1"]
|
74
|
+
h1 = { :h1=>"h1" }
|
75
|
+
f1.as_hash.update(h1)
|
76
|
+
h1.update(f1)
|
77
|
+
assert{ f1 == OpenObject[:f1=>"f1", :h1=>"h1"] }
|
78
|
+
assert{ h1 == {:f1=>"f1", :h1=>"h1"} }
|
79
|
+
end
|
80
|
+
|
81
|
+
Unit :<< => "passing a hash" do
|
82
|
+
fo = OpenObject.new
|
83
|
+
fo << {:a=>1,:b=>2}
|
84
|
+
assert{ fo.to_h == {:a=>1, :b=>2} }
|
85
|
+
end
|
86
|
+
|
87
|
+
Unit :<< => "passing a pair" do
|
88
|
+
fo = OpenObject.new
|
89
|
+
fo << [:a, 1]
|
90
|
+
fo << [:b, 2]
|
91
|
+
assert( fo.to_h == {:a=>1, :b=>2} )
|
92
|
+
end
|
93
|
+
|
94
|
+
Unit :to_h do
|
95
|
+
ho = {}
|
96
|
+
fo = OpenObject.new
|
97
|
+
5.times{ |i| ho["n#{i}".to_sym] = 1 }
|
98
|
+
5.times{ |i| fo.__send__("n#{i}=", 1) }
|
99
|
+
assert{ fo.to_h == ho }
|
100
|
+
end
|
101
|
+
|
102
|
+
Unit :to_h => "OpenObject within OpenObject" do
|
103
|
+
o = OpenObject.new
|
104
|
+
o.a = 10
|
105
|
+
o.b = 20
|
106
|
+
o.x = OpenObject.new
|
107
|
+
o.x.a = 100
|
108
|
+
o.x.b = 200
|
109
|
+
o.x.c = 300
|
110
|
+
assert{ o.to_h == {:a=>10, :b=>20, :x=>{:a=>100, :b=>200, :c=>300}} }
|
111
|
+
end
|
112
|
+
|
113
|
+
Unit :to_proc do
|
114
|
+
p = lambda { |x| x.word = "Hello" }
|
115
|
+
o = OpenObject[:a=>1,:b=>2]
|
116
|
+
assert{ Proc === o.to_proc }
|
117
|
+
end
|
118
|
+
|
119
|
+
end
|
120
|
+
|
121
|
+
TestCase Proc do
|
122
|
+
|
123
|
+
Unit :to_openobject do
|
124
|
+
p = lambda { |x| x.word = "Hello" }
|
125
|
+
o = p.to_openobject
|
126
|
+
assert{ o.word == "Hello" }
|
127
|
+
end
|
128
|
+
|
129
|
+
end
|
130
|
+
|
data/test/case_stash.rb
ADDED
@@ -0,0 +1,131 @@
|
|
1
|
+
require 'hashery/stash'
|
2
|
+
|
3
|
+
TestCase Stash do
|
4
|
+
|
5
|
+
Unit :[] => 'class level fetch' do
|
6
|
+
s = Stash[:a=>1, :b=>2]
|
7
|
+
assert(s)
|
8
|
+
end
|
9
|
+
|
10
|
+
Unit :[] => 'instance level fetch' do
|
11
|
+
s = Stash[:a=>1, :b=>2]
|
12
|
+
s[:a].assert == 1
|
13
|
+
s[:b].assert == 2
|
14
|
+
s['a'].assert == 1
|
15
|
+
s['b'].assert == 2
|
16
|
+
end
|
17
|
+
|
18
|
+
Unit :[]= => '' do
|
19
|
+
s = Stash.new
|
20
|
+
s[:a] = 1
|
21
|
+
s[:b] = 2
|
22
|
+
s[:a].assert == 1
|
23
|
+
s[:b].assert == 2
|
24
|
+
s['a'].assert == 1
|
25
|
+
s['b'].assert == 2
|
26
|
+
end
|
27
|
+
|
28
|
+
Unit :initialize do
|
29
|
+
s = Stash.new
|
30
|
+
assert(s)
|
31
|
+
end
|
32
|
+
|
33
|
+
Unit :to_hash do
|
34
|
+
s = Stash[:a=>1, :b=>2]
|
35
|
+
s.to_hash.assert == {'a'=>1, 'b'=>2}
|
36
|
+
end
|
37
|
+
|
38
|
+
Unit :to_h do
|
39
|
+
s = Stash[:a=>1, :b=>2]
|
40
|
+
s.to_h.assert == {'a'=>1, 'b'=>2}
|
41
|
+
end
|
42
|
+
|
43
|
+
Unit :replace do
|
44
|
+
s = Stash.new
|
45
|
+
s.replace(:a=>1, :b=>2)
|
46
|
+
s.to_h.assert == {'a'=>1, 'b'=>2}
|
47
|
+
end
|
48
|
+
|
49
|
+
Unit :delete do
|
50
|
+
s = Stash[:a=>1, :b=>2]
|
51
|
+
s.delete(:a)
|
52
|
+
s.to_h.assert == {'b'=>2}
|
53
|
+
end
|
54
|
+
|
55
|
+
Unit :each do
|
56
|
+
s = Stash[:a=>1, :b=>2]
|
57
|
+
s.each do |k,v|
|
58
|
+
String.assert === k
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
Unit :store => '' do
|
63
|
+
s = Stash.new
|
64
|
+
s.store(:a, 1)
|
65
|
+
s.to_h.assert == {'a'=>1}
|
66
|
+
end
|
67
|
+
|
68
|
+
Unit :update => '' do
|
69
|
+
s1 = Stash[:a=>1,:b=>2]
|
70
|
+
s2 = Stash[:c=>3,:d=>4]
|
71
|
+
s1.update(s2)
|
72
|
+
s1.to_h.assert == {'a'=>1,'b'=>2,'c'=>3,'d'=>4}
|
73
|
+
end
|
74
|
+
|
75
|
+
Unit :rekey => '' do
|
76
|
+
s = Stash[:a=>1,:b=>2,:c=>3]
|
77
|
+
x = s.rekey{ |k| k.upcase }
|
78
|
+
x.to_h.assert == {'A'=>1,'B'=>2,'C'=>3}
|
79
|
+
end
|
80
|
+
|
81
|
+
Unit :rekey! => '' do
|
82
|
+
s = Stash[:a=>1,:b=>2,:c=>3]
|
83
|
+
s.rekey!{ |k| k.upcase }
|
84
|
+
s.to_h.assert == {'A'=>1,'B'=>2,'C'=>3}
|
85
|
+
end
|
86
|
+
|
87
|
+
Unit :key? => '' do
|
88
|
+
s = Stash[:a=>1]
|
89
|
+
s.assert.key?(:a)
|
90
|
+
s.assert.key?('a')
|
91
|
+
end
|
92
|
+
|
93
|
+
Unit :has_key? => '' do
|
94
|
+
s = Stash[:a=>1]
|
95
|
+
s.assert.has_key?(:a)
|
96
|
+
s.assert.has_key?('a')
|
97
|
+
end
|
98
|
+
|
99
|
+
Unit :<< => '' do
|
100
|
+
s = Stash.new
|
101
|
+
s << [:a, 1]
|
102
|
+
s << [:b, 2]
|
103
|
+
s.to_h.assert == {'a'=>1, 'b'=>2}
|
104
|
+
end
|
105
|
+
|
106
|
+
Unit :merge! => '' do
|
107
|
+
s1 = Stash[:a=>1,:b=>2]
|
108
|
+
s2 = Stash[:c=>3,:d=>4]
|
109
|
+
s1.merge!(s2)
|
110
|
+
s1.to_h.assert == {'a'=>1,'b'=>2,'c'=>3,'d'=>4}
|
111
|
+
end
|
112
|
+
|
113
|
+
Unit :values_at => '' do
|
114
|
+
s = Stash[:a=>1,:b=>2,:c=>3]
|
115
|
+
s.values_at(:a, :b).assert == [1,2]
|
116
|
+
s.values_at('a','b').assert == [1,2]
|
117
|
+
end
|
118
|
+
|
119
|
+
Unit :fetch => '' do
|
120
|
+
s = Stash[:a=>1,:b=>2,:c=>3]
|
121
|
+
s.fetch(:a).assert == 1
|
122
|
+
s.fetch('a').assert == 1
|
123
|
+
end
|
124
|
+
|
125
|
+
Unit :convert_key => '' do
|
126
|
+
s = Stash.new
|
127
|
+
s.pry.convert_key(:a).assert == 'a'
|
128
|
+
end
|
129
|
+
|
130
|
+
end
|
131
|
+
|