map 6.4.0 → 6.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 +24 -3
- data/map.gemspec +1 -1
- data/test/map_test.rb +10 -0
- metadata +2 -2
data/lib/map.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# -*- encoding : utf-8 -*-
|
2
2
|
class Map < Hash
|
3
|
-
Version = '6.4.
|
3
|
+
Version = '6.4.1' unless defined?(Version)
|
4
4
|
Load = Kernel.method(:load) unless defined?(Load)
|
5
5
|
|
6
6
|
class << Map
|
@@ -169,6 +169,21 @@ class Map < Hash
|
|
169
169
|
def match(haystack, needle)
|
170
170
|
intersection(haystack, needle) == needle
|
171
171
|
end
|
172
|
+
|
173
|
+
def args_for_arity(args, arity)
|
174
|
+
arity = Integer(arity.respond_to?(:arity) ? arity.arity : arity)
|
175
|
+
arity < 0 ? args.dup : args.slice(0, arity)
|
176
|
+
end
|
177
|
+
|
178
|
+
def call(object, method, *args, &block)
|
179
|
+
args = Map.args_for_arity(args, object.method(method).arity)
|
180
|
+
object.send(method, *args, &block)
|
181
|
+
end
|
182
|
+
|
183
|
+
def bcall(*args, &block)
|
184
|
+
args = Map.args_for_arity(args, block.arity)
|
185
|
+
block.call(*args)
|
186
|
+
end
|
172
187
|
end
|
173
188
|
|
174
189
|
# instance constructor
|
@@ -414,10 +429,16 @@ class Map < Hash
|
|
414
429
|
super
|
415
430
|
end
|
416
431
|
|
417
|
-
def delete_if
|
432
|
+
def delete_if(&block)
|
418
433
|
to_delete = []
|
419
|
-
|
434
|
+
|
435
|
+
each do |key, val|
|
436
|
+
args = [key, val]
|
437
|
+
to_delete.push(key) if !!Map.bcall(*args, &block)
|
438
|
+
end
|
439
|
+
|
420
440
|
to_delete.each{|key| delete(key)}
|
441
|
+
|
421
442
|
self
|
422
443
|
end
|
423
444
|
|
data/map.gemspec
CHANGED
data/test/map_test.rb
CHANGED
@@ -750,6 +750,16 @@ Testing Map do
|
|
750
750
|
assert{ m.name_for(:A, :B, :C, :prefix => :foo) == 'foo[A][B][C]' }
|
751
751
|
end
|
752
752
|
|
753
|
+
testing 'delete_if' do
|
754
|
+
m = Map.for(:k => :v)
|
755
|
+
assert{ m.delete_if{|k| k.to_s == 'k'} }
|
756
|
+
assert{ m.empty?}
|
757
|
+
|
758
|
+
m = Map.for(:k => :v)
|
759
|
+
assert{ m.delete_if{|k,v| v.to_s == 'v'} }
|
760
|
+
assert{ m.empty?}
|
761
|
+
end
|
762
|
+
|
753
763
|
protected
|
754
764
|
def new_int_map(n = 1024)
|
755
765
|
map = assert{ Map.new }
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: map
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 6.4.
|
4
|
+
version: 6.4.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-04-
|
12
|
+
date: 2013-04-19 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: ! 'description: map kicks the ass'
|
15
15
|
email: ara.t.howard@gmail.com
|