map 2.4.0 → 2.4.1
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/lib/map.rb +25 -20
- data/map.gemspec +1 -1
- data/test/map_test.rb +12 -26
- metadata +4 -4
data/lib/map.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
class Map < Hash
|
2
|
-
Version = '2.4.
|
2
|
+
Version = '2.4.1' unless defined?(Version)
|
3
3
|
Load = Kernel.method(:load) unless defined?(Load)
|
4
4
|
|
5
5
|
class << Map
|
@@ -97,31 +97,28 @@ class Map < Hash
|
|
97
97
|
result = args
|
98
98
|
end
|
99
99
|
|
100
|
-
return
|
100
|
+
return args if size == 0
|
101
101
|
|
102
102
|
if size == 1
|
103
|
+
conversion_methods.each do |method|
|
104
|
+
if first.respond_to?(method)
|
105
|
+
first = first.send(method)
|
106
|
+
break
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
103
110
|
if first.respond_to?(:each_pair)
|
104
111
|
first.each_pair do |key, val|
|
105
112
|
block.call(key, val)
|
106
113
|
end
|
107
|
-
return
|
114
|
+
return args
|
108
115
|
end
|
109
116
|
|
110
117
|
if first.respond_to?(:each_slice)
|
111
118
|
first.each_slice(2) do |key, val|
|
112
119
|
block.call(key, val)
|
113
120
|
end
|
114
|
-
return
|
115
|
-
end
|
116
|
-
|
117
|
-
conversion_methods.each do |method|
|
118
|
-
if first.respond_to?(method)
|
119
|
-
first = first.send(method)
|
120
|
-
first.each_pair do |key, val|
|
121
|
-
block.call(key, val)
|
122
|
-
end
|
123
|
-
return result
|
124
|
-
end
|
121
|
+
return args
|
125
122
|
end
|
126
123
|
|
127
124
|
raise(ArgumentError, 'odd number of arguments for Map')
|
@@ -210,14 +207,18 @@ class Map < Hash
|
|
210
207
|
klass.map_for(hash)
|
211
208
|
end
|
212
209
|
|
213
|
-
def
|
210
|
+
def self.convert_key(key)
|
214
211
|
key.kind_of?(Symbol) ? key.to_s : key
|
215
212
|
end
|
216
213
|
def convert_key(key)
|
217
|
-
klass.convert_key
|
214
|
+
if klass.respond_to?(:convert_key)
|
215
|
+
klass.convert_key(key)
|
216
|
+
else
|
217
|
+
Map.convert_key(key)
|
218
|
+
end
|
218
219
|
end
|
219
220
|
|
220
|
-
def
|
221
|
+
def self.convert_value(value)
|
221
222
|
conversion_methods.each do |method|
|
222
223
|
return value.send(method) if value.respond_to?(method)
|
223
224
|
end
|
@@ -232,7 +233,11 @@ class Map < Hash
|
|
232
233
|
end
|
233
234
|
end
|
234
235
|
def convert_value(value)
|
235
|
-
klass.convert_value
|
236
|
+
if klass.respond_to?(:convert_value)
|
237
|
+
klass.convert_value(value)
|
238
|
+
else
|
239
|
+
Map.convert_value(value)
|
240
|
+
end
|
236
241
|
end
|
237
242
|
alias_method('convert_val', 'convert_value')
|
238
243
|
|
@@ -375,9 +380,9 @@ class Map < Hash
|
|
375
380
|
self
|
376
381
|
end
|
377
382
|
|
378
|
-
def replace(
|
383
|
+
def replace(*args)
|
379
384
|
clear
|
380
|
-
update(
|
385
|
+
update(*args)
|
381
386
|
end
|
382
387
|
|
383
388
|
# ordered container specific methods
|
data/map.gemspec
CHANGED
data/test/map_test.rb
CHANGED
@@ -331,35 +331,21 @@ Testing Map do
|
|
331
331
|
end
|
332
332
|
|
333
333
|
testing 'that Map.each_pair works on arrays' do
|
334
|
+
each = []
|
334
335
|
array = %w( a b c )
|
335
|
-
|
336
|
-
assert{ each_pair
|
336
|
+
Map.each_pair(array){|k,v| each.push(k,v)}
|
337
|
+
assert{ each_pair = ['a', 'b', 'c', nil] }
|
337
338
|
end
|
338
339
|
|
339
|
-
testing 'that
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
{'a' => 'b', 'c' => nil}
|
349
|
-
end
|
350
|
-
each_pair = Map.each_pair(object)
|
351
|
-
assert{ each_pair == [['a', 'b'], ['c', nil]] }
|
352
|
-
end
|
353
|
-
|
354
|
-
testing 'that Map.each_pair blows up on non-hash, non-array, non-convertable objects' do
|
355
|
-
object = Object.new
|
356
|
-
result =
|
357
|
-
begin
|
358
|
-
Map.each_pair(object)
|
359
|
-
rescue => e
|
360
|
-
e
|
361
|
-
end
|
362
|
-
assert{ result.is_a?(Exception) }
|
340
|
+
testing 'that #update and #replace accept map-ish objects' do
|
341
|
+
o = Object.new
|
342
|
+
def o.to_map() {:k => :v} end
|
343
|
+
m = Map.new
|
344
|
+
assert{ m.update(o) }
|
345
|
+
assert{ m =~ {:k => :v} }
|
346
|
+
m[:a] = :b
|
347
|
+
assert{ m.replace(o) }
|
348
|
+
assert{ m =~ {:k => :v} }
|
363
349
|
end
|
364
350
|
|
365
351
|
protected
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: map
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 29
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 2
|
8
8
|
- 4
|
9
|
-
-
|
10
|
-
version: 2.4.
|
9
|
+
- 1
|
10
|
+
version: 2.4.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Ara T. Howard
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-02-
|
18
|
+
date: 2011-02-10 00:00:00 -07:00
|
19
19
|
default_executable:
|
20
20
|
dependencies: []
|
21
21
|
|