hash-utils 2.0.2 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -31,18 +31,44 @@ class Hash
31
31
  ##
32
32
  # Creates hash by setting default settings in one call.
33
33
  #
34
- # @param [Hash] values initial values
35
34
  # @param [Object] default default value
35
+ # @param [Hash] hash initial values
36
36
  # @param [Proc] block default block
37
37
  # @return [Hash] new hash
38
38
  # @since 0.3.0
39
39
  #
40
40
 
41
41
  if not self.respond_to? :create
42
- def self.create(default = nil, hash = { }, &block)
43
- hash.default = default
44
- hash.default_proc = block if not block.nil?
45
- return hash
42
+ if Ruby::Version >= "1.9"
43
+ def self.create(default = nil, hash = nil, &block)
44
+ if not hash.nil?
45
+ hash = hash.dup
46
+ else
47
+ hash = { }
48
+ end
49
+
50
+ hash.default = default
51
+ hash.default_proc = block if not block.nil?
52
+ return hash
53
+ end
54
+ else
55
+ def self.create(default = nil, hash = nil, &block)
56
+ if not hash.nil?
57
+ hash = hash.dup
58
+ else
59
+ hash = { }
60
+ end
61
+
62
+ if not block.nil?
63
+ new = Hash::new(&block)
64
+ new.update(hash) if not hash.empty?
65
+ hash = new
66
+ else
67
+ hash.default = default
68
+ end
69
+
70
+ return hash
71
+ end
46
72
  end
47
73
  end
48
74
 
@@ -357,9 +383,11 @@ class Hash
357
383
 
358
384
  if not self.__hash_utils_instance_respond_to? :some?
359
385
  def some?(&block)
360
- self.one? do |pair|
361
- block.call(pair[1])
386
+ self.each_value do |v|
387
+ return true if block.call(v)
362
388
  end
389
+
390
+ return false
363
391
  end
364
392
  end
365
393
 
@@ -373,7 +401,13 @@ class Hash
373
401
  #
374
402
 
375
403
  if not self.__hash_utils_instance_respond_to? :some_pairs?
376
- alias :some_pairs? :one?
404
+ def some_pairs?(&block)
405
+ self.each_pair do |pair|
406
+ return true if block.call(pair)
407
+ end
408
+
409
+ return false
410
+ end
377
411
  end
378
412
 
379
413
  ##
@@ -383,7 +417,7 @@ class Hash
383
417
  # @since 0.4.0
384
418
  #
385
419
 
386
- if not self.__hash_utils_instance_respond_to? :to_h
420
+ if (not self.__hash_utils_instance_respond_to? :to_h) or (Ruby::Version >= "2.0")
387
421
  def to_h(mode = nil)
388
422
  self
389
423
  end
@@ -321,12 +321,16 @@ class Object
321
321
  #
322
322
  # @return [Symbol] symbol representation of the object
323
323
  # @since 1.1.0
324
+ # @since 2.1.0 is +#to_sym+ deprecated in favor to +#to_symbol+
324
325
  #
325
326
 
326
- if not __hash_utils_object_respond_to? :to_sym
327
- def to_sym
327
+ if not __hash_utils_object_respond_to? :to_symbol
328
+ def to_symbol
328
329
  self.to_s.to_sym
329
330
  end
330
331
  end
331
332
 
333
+ if not __hash_utils_object_respond_to? :to_sym
334
+ alias :to_sym :to_symbol
335
+ end
332
336
  end
@@ -215,13 +215,24 @@ class String
215
215
  #
216
216
 
217
217
  if not self.__hash_utils_instance_respond_to? :map
218
- def map(&block)
219
- buffer = " " * self.length
220
- self.length.times do |i|
221
- buffer[i] = block.call(self[i])
218
+ if Ruby::Version >= "1.9"
219
+ def map(&block)
220
+ buffer = " " * self.length
221
+ self.length.times do |i|
222
+ buffer[i] = block.call(self[i]).to_s
223
+ end
224
+
225
+ return buffer
226
+ end
227
+ else
228
+ def map(&block)
229
+ buffer = " " * self.length
230
+ self.length.times do |i|
231
+ buffer[i] = block.call(self[i]).to_i
232
+ end
233
+
234
+ return buffer
222
235
  end
223
-
224
- return buffer
225
236
  end
226
237
  end
227
238
 
@@ -235,12 +246,22 @@ class String
235
246
  #
236
247
 
237
248
  if not self.__hash_utils_instance_respond_to? :map!
238
- def map!(&block)
239
- self.length.times do |i|
240
- self[i] = block.call(self[i])
249
+ if Ruby::Version >= "1.9"
250
+ def map!(&block)
251
+ self.length.times do |i|
252
+ self[i] = block.call(self[i]).to_s
253
+ end
254
+
255
+ return self
256
+ end
257
+ else
258
+ def map!(&block)
259
+ self.length.times do |i|
260
+ self[i] = block.call(self[i]).to_i
261
+ end
262
+
263
+ return self
241
264
  end
242
-
243
- return self
244
265
  end
245
266
  end
246
267
 
@@ -147,5 +147,20 @@ class Symbol
147
147
  self.to_s.strip!.to_sym
148
148
  end
149
149
  end
150
+
151
+ ##
152
+ # Compares symbols by three-value comparing. Implements the +<=>+
153
+ # operator in fact.
154
+ #
155
+ # @param [Symbol] symbol to compare
156
+ # @return [Integer]
157
+ # @since 2.1.0
158
+ #
159
+
160
+ if not self.__hash_utils_instance_respond_to? :<=>
161
+ def <=>(symbol)
162
+ self.to_s <=> symbol.to_s
163
+ end
164
+ end
150
165
 
151
166
  end
@@ -0,0 +1,177 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: utf-8
3
+ # (c) 2011-2012 Martin Kozák (martinkozak@martinkozak.net)
4
+
5
+ require "spec_helper"
6
+
7
+ describe "Array" do
8
+ specify("#second") do
9
+ [1, 2, 3, 4, 5, 6, 7, 8].second.should eq(2)
10
+ end
11
+ specify("#third") do
12
+ [1, 2, 3, 4, 5, 6, 7, 8].third.should eq(3)
13
+ end
14
+ specify("#fourth") do
15
+ [1, 2, 3, 4, 5, 6, 7, 8].fourth.should eq(4)
16
+ end
17
+ specify("#fifth") do
18
+ [1, 2, 3, 4, 5, 6, 7, 8].fifth.should eq(5)
19
+ end
20
+ specify("#sixth") do
21
+ [1, 2, 3, 4, 5, 6, 7, 8].sixth.should eq(6)
22
+ end
23
+ specify("#seventh") do
24
+ [1, 2, 3, 4, 5, 6, 7, 8].seventh.should eq(7)
25
+ end
26
+ specify("#eighth") do
27
+ [1, 2, 3, 4, 5, 6, 7, 8].eighth.should eq(8)
28
+ end
29
+ specify("#array?") do
30
+ [1, 2, 3].array?.should be_true
31
+ end
32
+ specify("#avg") do
33
+ [1, 2, 3].avg.should eq(2)
34
+ end
35
+ specify("#clean") do
36
+ t = [1, nil]
37
+ t = t.clean(1)
38
+ t.should eq([nil])
39
+ end
40
+ specify("#clean!") do
41
+ t = [1, nil]
42
+ t.clean!(1)
43
+ t.should eq([nil])
44
+ end
45
+ specify("#complete_to") do
46
+ [1, 2, 3].complete_to(5, :a).should eq([1, 2, 3, :a, :a])
47
+ [1, 2, 3, 4, 5].complete_to(3).should eq([1, 2, 3])
48
+ end
49
+ specify("#complete_to!") do
50
+ t = [1, 2, 3]
51
+ t.complete_to! 5, :a
52
+ t.should eq([1, 2, 3, :a, :a])
53
+
54
+ t = [1, 2, 3, 4, 5]
55
+ t.complete_to! 3
56
+ t.should eq([1, 2, 3 ])
57
+ end
58
+ specify("#cut") do
59
+ [1, 2, 3, 4].cut(2).should eq([1, 2])
60
+ [1, 2, 3, 4].cut(4).should eq([])
61
+ [1, 2, 3, 4].cut(6).should eq([])
62
+ end
63
+ specify("#cut!") do
64
+ t = [1, 2, 3, 4]
65
+ t.cut! 2
66
+ t.should eq([1, 2])
67
+
68
+ t = [1, 2, 3, 4]
69
+ t.cut! 4
70
+ t.should eq([])
71
+
72
+ t = [1, 2, 3, 4]
73
+ t.cut! 6
74
+ t.should eq([])
75
+ end
76
+ specify("#drop!") do
77
+ t = [1, 2, 3, 4, 5]
78
+ t.drop! 2
79
+ t.should eq([3, 4, 5])
80
+
81
+ t = [1, 2, 3, 4, 5]
82
+ t.drop! 0
83
+ t.should eq([1, 2, 3, 4, 5])
84
+
85
+ t = [1, 2, 3, 4, 5]
86
+ expect { t.drop! -2 }.to raise_error(ArgumentError, 'attempt to drop negative size')
87
+ end
88
+ specify("#expand_by") do
89
+ [1, 2, 3].expand_by(:a, :b).should eq([1, :a, :b, 2, :a, :b, 3, :a, :b])
90
+ [1, 2, 3].expand_by([:a, :b]).should eq([1, [:a, :b], 2, [:a, :b], 3, [:a, :b]])
91
+ [].expand_by([:a, :b]).should eq([ ])
92
+ end
93
+ specify("#expand_by!") do
94
+ t = [1, 2, 3]
95
+ t.expand_by! :a, :b
96
+ t.should eq([1, :a, :b, 2, :a, :b, 3, :a, :b])
97
+
98
+ t = [1, 2, 3]
99
+ t.expand_by! [:a, :b]
100
+ t.should eq([1, [:a, :b], 2, [:a, :b], 3, [:a, :b]])
101
+
102
+ t = []
103
+ t.expand_by! [:a, :b]
104
+ t.should eq([ ])
105
+ end
106
+ specify("#interlace") do
107
+ [1, 2, 3].interlace(:a, :b).should eq([1, :a, :b, 2, :a, :b, 3])
108
+ end
109
+ specify("#interlace!") do
110
+ t = [1, 2, 3]
111
+ t.interlace! :a, :b
112
+ t.should eq([1, :a, :b, 2, :a, :b, 3])
113
+ end
114
+ specify("#merge!") do
115
+ t = [1, 2, 3]
116
+ t.merge!([:a, :b])
117
+ t.should eq([1, 2, 3, :a, :b])
118
+ end
119
+ specify("#remove!") do
120
+ t = [1, 2, 3, 4]
121
+ t.remove! { |i| i >= 3 }
122
+ t.should eq([1, 2])
123
+
124
+ t = [1, 2, 3, 4]
125
+ t.remove! { false }
126
+ t.should eq([1, 2, 3, 4])
127
+
128
+ t = [1, 2, 3, 4]
129
+ t.remove! { true }
130
+ t.should eq([ ])
131
+ end
132
+ specify("#shrink_to") do
133
+ [1, 2, 3, 4, 5].shrink_to(3).should eq([1, 2, 3])
134
+ [1, 2, 3, 4, 5].shrink_to(6).should eq([1, 2, 3, 4, 5])
135
+ [1, 2, 3, 4, 5].shrink_to(0).should eq([])
136
+ expect { [1, 2, 3, 4, 5].shrink_to(-3) }.to raise_error(ArgumentError, "negative argument")
137
+ end
138
+ specify("#shrink_to!") do
139
+ t = [1, 2, 3, 4, 5]
140
+ t.shrink_to! 3
141
+ t.should eq([1, 2, 3])
142
+
143
+ t = [1, 2, 3, 4, 5]
144
+ t.shrink_to! 6
145
+ t.should eq([1, 2, 3, 4, 5])
146
+
147
+ t = [1, 2, 3, 4, 5]
148
+ expect { t.shrink_to! -3 }.to raise_error(ArgumentError, "negative argument")
149
+
150
+ t = [1, 2, 3, 4, 5]
151
+ t.shrink_to! 0
152
+ t.should eq([])
153
+ end
154
+ specify("#sum") do
155
+ [1, 2, 3].sum.should eq(6)
156
+ end
157
+ specify("#to_h") do
158
+ [[:a, :b], [:b, :a]].to_h.should eq({:a => :b, :b => :a})
159
+ [:a, :b, :b, :a].to_h(:flat).should eq({:a => :b, :b => :a})
160
+ end
161
+ specify("#to_set") do
162
+ [1, 2, 3].to_set.should eq(Set::new([1, 2, 3]))
163
+ end
164
+ specify("#zip!") do
165
+ t = [1, 2, 3]
166
+ t.zip!
167
+ t.should eq([1, 2, 3].zip)
168
+
169
+ t = [1, 2, 3]
170
+ t.zip!([:a, :b], [:c], [:d, :e, :f])
171
+ t.should eq([1, 2, 3].zip([:a, :b], [:c], [:d, :e, :f]))
172
+
173
+ t = [1, 2, 3]
174
+ t.zip!([:a, :b], [:d, :e, :f], [:c])
175
+ t.should eq([1, 2, 3].zip([:a, :b], [:d, :e, :f], [:c]))
176
+ end
177
+ end
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: utf-8
3
+ # (c) 2011-2012 Martin Kozák (martinkozak@martinkozak.net)
4
+
5
+ require "spec_helper"
6
+
7
+ describe "FalseClass" do
8
+ specify("#boolean?") do
9
+ false.boolean?.should be_true
10
+ end
11
+ specify("#convert") do
12
+ false.convert(:a, :b).should eq(:b)
13
+ end
14
+ specify("#false?") do
15
+ false.false?.should be_true
16
+ end
17
+ specify("#to_i") do
18
+ false.to_i.should eq(0)
19
+ end
20
+ specify("#true?") do
21
+ (not false.true?).should be_true
22
+ end
23
+ end
@@ -0,0 +1,22 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: utf-8
3
+ # (c) 2011-2012 Martin Kozák (martinkozak@martinkozak.net)
4
+
5
+ require "spec_helper"
6
+
7
+ describe "File" do
8
+ specify("#touch") do
9
+ File.touch("./~test1")
10
+ File.exists?("./~test1").should be_true
11
+ end
12
+ specify("#write") do
13
+ File.write("./~test2", "some string")
14
+ File.read("./~test2").should eq("some string")
15
+ end
16
+
17
+ after(:all) do
18
+ File.unlink("./~test1")
19
+ File.unlink("./~test2")
20
+ end
21
+ end
22
+
@@ -0,0 +1,223 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: utf-8
3
+ # (c) 2011-2012 Martin Kozák (martinkozak@martinkozak.net)
4
+
5
+ require "spec_helper"
6
+
7
+ describe "Hash" do
8
+ specify("#all_pairs?") do
9
+ t = { :a => 1, :b => 2, :c => 3, :d => 4 }
10
+ t.all_pairs? { |k, v| k.in? [:a, :b] or v > 2 }.should be_true
11
+ t.all_pairs? { |k, v| v > 2 }.should be_false
12
+ { }.all_pairs?.should be_true
13
+ end
14
+ specify("#asort") do
15
+ h = { 3 => :c, 1 => :a, 2 => :b }
16
+ h.asort.should eq({ 1 => :a, 2 => :b, 3 => :c })
17
+ end
18
+ specify("#asort!") do
19
+ h = { 3 => :c, 1 => :a, 2 => :b }
20
+ h.asort!
21
+ h.should eq({ 1 => :a, 2 => :b, 3 => :c })
22
+ end
23
+ specify("#avg") do
24
+ { :a => 1, :b => 2 }.avg.should eq(1.5)
25
+ end
26
+ specify("#clean") do
27
+ t = { :a => 1, :b => nil }
28
+ t = t.clean(1)
29
+ t.should eq({ :b => nil })
30
+ end
31
+ specify("#clean!") do
32
+ t = { :a => 1, :b => nil }
33
+ t.clean!(1)
34
+ t.should eq({ :b => nil })
35
+ end
36
+ specify("::combine") do
37
+ keys = [:a, :b, :c]
38
+ values = [1, 2, 3]
39
+
40
+ Hash::combine(keys, values).should eq({ :a => 1, :b => 2, :c => 3 })
41
+ Hash::combine([ ], [ ]).should eq({ })
42
+ Hash::combine([:a, :b], [ ]).should eq({ :a => nil, :b => nil })
43
+ Hash::combine([ ], [1, 2]).should eq({ })
44
+ end
45
+ specify("#compact") do
46
+ t = { :a => 1, :b => nil }
47
+ t = t.compact
48
+ t.should eq({ :a => 1 })
49
+ end
50
+ specify("#compact!") do
51
+ t = { :a => 1, :b => nil }
52
+ t.compact!
53
+ t.should eq({ :a => 1 })
54
+ end
55
+ specify("::create") do
56
+ proc = Proc::new { |dict, key| dict[key] = "" }
57
+ t1 = Hash::create(:default)
58
+ t2 = Hash::define(&proc)
59
+
60
+ t1.default.should eq(:default)
61
+ t2.default_proc.should eq(proc)
62
+ end
63
+ specify("::define") do
64
+ proc = Proc::new { |dict, key| dict[key] = "" }
65
+ t1 = Hash::define({:a => :b}, :default)
66
+ t2 = Hash::define({:a => :b}, &proc)
67
+
68
+ t1.should eq(:a => :b)
69
+ t1.default.should eq(:default)
70
+ t2.default_proc.should eq(proc)
71
+ end
72
+ specify("#flip") do
73
+ t = { :a => 1, :b => 2, :c => 2 }
74
+ result = t.flip
75
+ (result == { 1 => :a, 2 => :c } or result == { 1 => :a, 2 => :b }).should be_true
76
+ end
77
+ specify("#flip!") do
78
+ t = { :a => 1, :b => 2, :c => 2 }
79
+ t.flip!
80
+ (t == { 1 => :a, 2 => :c } or t == { 1 => :a, 2 => :b }).should be_true
81
+ end
82
+ specify("#get_pairs") do
83
+ h = { :a => 1, :b => 2, :c => 3 }
84
+ result = [ ]
85
+ h.get_pairs(:a, :c, :d) { |i| result << i }
86
+ result.should eq([[:a, 1], [:c, 3]])
87
+ end
88
+ specify("#get_items") do
89
+ h = { :a => 1, :b => 2, :c => 3 }
90
+ h.get_items(:a, :c, :d).should eq({ :a => 1, :c => 3 })
91
+ end
92
+ specify("#get_values") do
93
+ h = { :a => 1, :b => 2, :c => 3 }
94
+ h.get_values(:a, :c, :d).should eq([1, 3])
95
+ end
96
+ specify("#get_values") do
97
+ { :a => 1, :b => 2, :c => 3 }.hash?.should be_true
98
+ end
99
+ specify("#has_all?") do
100
+ { :a => 1, :b => 2, :c => 3 }.has_all?([:b, :c]).should be_true
101
+ { :a => 1, :b => 2, :c => 3 }.has_all?([:b, :d]).should be_false
102
+ end
103
+ specify("#has_some?") do
104
+ { :a => 1, :b => 2, :c => 3 }.has_some?([:b, :c]).should be_true
105
+ { :a => 1, :b => 2, :c => 3 }.has_some?([:b, :d]).should be_true
106
+ { :a => 1, :b => 2, :c => 3 }.has_some?([:d, :e]).should be_false
107
+ end
108
+ specify("#map_values") do
109
+ { :a => 1, :b => 2 }.map_values { |i| i + 1 }.should eq({ :a => 2, :b => 3 })
110
+ end
111
+ specify("#map_values!") do
112
+ t = { :a => 1, :b => 2 }
113
+ t.map_values! { |i| i + 1 }
114
+ t.should eq({ :a => 2, :b => 3 })
115
+ end
116
+ specify("#deep_merge") do
117
+ h1 = {:a => {:b => :c, :d => :e}}
118
+ h2 = {:a => {:d => :f, :h => :i}}
119
+ h = h1.deep_merge(h2)
120
+ h.should eq({:a => {:b => :c, :d => :f, :h => :i}})
121
+ h1.should eq({:a => {:b => :c, :d => :e}})
122
+ end
123
+ specify("#deep_merge!") do
124
+ h = {:a => {:b => :c, :d => :e}}
125
+ h.deep_merge!({:a => {:d => :f, :h => :i}})
126
+ h.should eq({:a => {:b => :c, :d => :f, :h => :i}})
127
+ end
128
+ specify("#keys_to_sym") do
129
+ h = {"a" => "b", 2 => "c", "d" => "e"}
130
+ h.keys_to_sym.should eq({:a => "b", 2 => "c", :d => "e"})
131
+ end
132
+ specify("#keys_to_sym!") do
133
+ h = {"a" => "b", 2 => "c", "d" => "e"}
134
+ h.keys_to_sym!
135
+ h.should eq({:a => "b", 2 => "c", :d => "e"})
136
+ end
137
+ specify("#ksort") do
138
+ h = { 3 => :b, 1 => :a, 2 => :c }
139
+ h.ksort.should eq({ 1 => :a, 2 => :c, 3 => :b })
140
+ end
141
+ specify("#ksort!") do
142
+ h = { 3 => :b, 1 => :a, 2 => :c }
143
+ h.ksort!
144
+ h.should eq({ 1 => :a, 2 => :c, 3 => :b })
145
+ end
146
+ specify("#map_keys!") do
147
+ h = {"a" => 1, "b" => 2}
148
+ h.map_keys! do |k|
149
+ k.to_sym
150
+ end
151
+
152
+ h.should eq({:a => 1, :b => 2})
153
+ end
154
+ specify("#recreate!") do
155
+ h = Hash::create(:default, {:a => 1, :b => 2})
156
+ h.recreate!
157
+ h.should eq({ })
158
+ h.default.should eq(:default)
159
+
160
+ proc = Proc::new { }
161
+ h = Hash::create(nil, {:a => 1, :b => 2}, &proc)
162
+ h.recreate!
163
+ h.default_proc.should eq(proc)
164
+ end
165
+ specify("#remove!") do
166
+ h = {:a => 1, :b => 2, :c => 3, :d => 4}
167
+ h.remove! { |k, v| k == :c or v > 2 }.should eq({:c => 3, :d => 4})
168
+ h.should eq({:a => 1, :b => 2})
169
+ end
170
+ specify("#reverse") do
171
+ h = {:a => 1, :b => 2, :c => 3}
172
+ h.reverse.should eq({:c => 3, :b => 2, :a => 1})
173
+ { }.reverse.should eq({ })
174
+ end
175
+ specify("#reverse!") do
176
+ h = {:a => 1, :b => 2, :c => 3}
177
+ h.reverse!
178
+ h.should eq({:c => 3, :b => 2, :a => 1})
179
+
180
+ h = { }
181
+ h.reverse!
182
+ h.should eq({ })
183
+ end
184
+ specify("#some?") do
185
+ h = {:a => 1, :b => 2, :c => 3}
186
+ h.some? { |v| v > 1 }.should be_true
187
+ h.some? { |v| v < 0 }.should be_false
188
+ { }.some? { |v| b < 0 }.should be_false
189
+ end
190
+ specify("#some_pairs?") do
191
+ h = {:a => 1, :b => 2, :c => 3}
192
+ h.some_pairs? { |k, v| v > 1 }.should be_true
193
+ h.some_pairs? { |k, v| k == :a }.should be_true
194
+ h.some_pairs? { |k, v| k == :d }.should be_false
195
+ h.some_pairs? { |k, v| v > 4 }.should be_false
196
+ { }.some_pairs? { |k, v| b < 0 }.should be_false
197
+ end
198
+ specify("#sort!") do
199
+ h = { 3 => :b, 1 => :a, 2 => :c }
200
+ h.sort!
201
+ h.should eq({ 1 => :a, 2 => :c, 3 => :b })
202
+ end
203
+ specify("#sum") do
204
+ { :a => 1, :b => 2 }.sum.should eq(3)
205
+ { :a => "a", :b => "b" }.sum.should eq("ab")
206
+ { }.sum.should be_nil
207
+ end
208
+ specify("#take_pairs") do
209
+ h = { :a => 1, :b => 2, :c => 3 }
210
+ result = [ ]
211
+ h.take_pairs(:a, :c, :d) { |i| result << i }
212
+ result.should eq([[:a, 1], [:c, 3], [:d, nil]])
213
+ end
214
+ specify("#take_items") do
215
+ h = { :a => 1, :b => 2, :c => 3 }
216
+ h.take_items(:a, :c, :d).should eq({ :a => 1, :c => 3, :d => nil })
217
+ end
218
+ specify("#take_values") do
219
+ h = { :a => 1, :b => 2, :c => 3 }
220
+ h.take_values(:a, :c, :d).should eq([1, 3, nil])
221
+ end
222
+
223
+ end