map 4.7.1 → 5.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/a.rb +22 -16
- data/lib/map.rb +2 -2
- data/lib/map/options.rb +16 -24
- data/map.gemspec +1 -1
- data/test/map_test.rb +4 -0
- metadata +3 -3
data/a.rb
CHANGED
@@ -1,24 +1,30 @@
|
|
1
1
|
require 'map'
|
2
2
|
|
3
|
+
args = [0, 1, {:k => :v, :a => false}]
|
4
|
+
opts = Map.options_for!(args)
|
3
5
|
|
4
|
-
|
5
|
-
|
6
|
+
#p args.object_id
|
7
|
+
#p opts.arguments.object_id
|
8
|
+
#p !args.last.is_a?(Hash)
|
9
|
+
#puts
|
10
|
+
#puts
|
6
11
|
|
7
|
-
|
8
|
-
|
12
|
+
new_args = [0, 1, opts]
|
13
|
+
new_opts = Map.options_for!(new_args)
|
14
|
+
#p new_opts.popped?
|
15
|
+
p new_args
|
16
|
+
p args
|
17
|
+
#p !new_args.last.is_a?(Hash)
|
18
|
+
#p new_opts.arguments.object_id
|
19
|
+
#p new_args.object_id
|
9
20
|
|
10
|
-
|
11
|
-
|
12
|
-
|
21
|
+
puts
|
22
|
+
puts
|
23
|
+
__END__
|
13
24
|
|
14
|
-
|
15
|
-
|
16
|
-
|
25
|
+
puts '---'
|
26
|
+
|
27
|
+
p opts.arguments
|
28
|
+
p args
|
17
29
|
|
18
|
-
def serialize(object)
|
19
|
-
object.to_hash
|
20
|
-
end
|
21
|
-
end
|
22
30
|
|
23
|
-
m = Map.new
|
24
|
-
m[:key]
|
data/lib/map.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
class Map < Hash
|
2
|
-
Version = '
|
2
|
+
Version = '5.1.0' unless defined?(Version)
|
3
3
|
Load = Kernel.method(:load) unless defined?(Load)
|
4
4
|
|
5
5
|
class << Map
|
@@ -617,7 +617,7 @@ class Map < Hash
|
|
617
617
|
else
|
618
618
|
key = method
|
619
619
|
unless has_key?(key)
|
620
|
-
return(block ? fetch(
|
620
|
+
return(block ? fetch(key, &block) : super(*args))
|
621
621
|
end
|
622
622
|
self[key]
|
623
623
|
end
|
data/lib/map/options.rb
CHANGED
@@ -2,7 +2,7 @@ class Map
|
|
2
2
|
module Options
|
3
3
|
class << Options
|
4
4
|
def for(arg)
|
5
|
-
|
5
|
+
options =
|
6
6
|
case arg
|
7
7
|
when Hash
|
8
8
|
arg
|
@@ -14,18 +14,19 @@ class Map
|
|
14
14
|
raise(ArgumentError, arg.inspect) unless arg.respond_to?(:to_hash)
|
15
15
|
arg.to_hash
|
16
16
|
end
|
17
|
-
|
18
|
-
|
19
|
-
map.extend(Options) unless map.is_a?(Options)
|
17
|
+
options.extend(Options) unless options.is_a?(Options)
|
18
|
+
options
|
20
19
|
end
|
21
20
|
|
22
21
|
def parse(arg)
|
23
22
|
case arg
|
24
23
|
when Array
|
25
|
-
|
26
|
-
|
24
|
+
arguments = arg
|
25
|
+
arguments.extend(Arguments) unless arguments.is_a?(Arguments)
|
26
|
+
options = arguments.options
|
27
27
|
when Hash
|
28
|
-
|
28
|
+
options = arg
|
29
|
+
options = Options.for(options)
|
29
30
|
else
|
30
31
|
raise(ArgumentError, "`arg` should be an Array or Hash")
|
31
32
|
end
|
@@ -109,27 +110,21 @@ class Map
|
|
109
110
|
end
|
110
111
|
|
111
112
|
def popped?
|
112
|
-
|
113
|
-
end
|
114
|
-
|
115
|
-
def popped=(boolean)
|
116
|
-
@popped = !!boolean
|
113
|
+
arguments and arguments.last != self
|
117
114
|
end
|
118
115
|
|
119
116
|
def pop!
|
120
|
-
if
|
121
|
-
@popped = arguments.pop
|
122
|
-
else
|
123
|
-
@popped = true
|
124
|
-
end
|
117
|
+
arguments.pop if !popped?
|
125
118
|
end
|
126
119
|
end
|
127
120
|
|
128
121
|
module Arguments
|
129
122
|
def options
|
130
|
-
@options ||=
|
131
|
-
|
132
|
-
|
123
|
+
@options ||=(
|
124
|
+
options = Options.for(last.is_a?(Hash) ? last : {})
|
125
|
+
options.arguments = self
|
126
|
+
options
|
127
|
+
)
|
133
128
|
end
|
134
129
|
|
135
130
|
class << Arguments
|
@@ -155,11 +150,8 @@ def Map.options_for!(*args, &block)
|
|
155
150
|
end
|
156
151
|
|
157
152
|
def Map.update_options_for!(args, &block)
|
158
|
-
options = Map.options_for
|
153
|
+
options = Map.options_for(args)
|
159
154
|
block.call(options)
|
160
|
-
ensure
|
161
|
-
args.push(options)
|
162
|
-
options.popped = false
|
163
155
|
end
|
164
156
|
|
165
157
|
class << Map
|
data/map.gemspec
CHANGED
data/test/map_test.rb
CHANGED
@@ -282,6 +282,10 @@ Testing Map do
|
|
282
282
|
args = [0,1, {:k => :v, :a => false}]
|
283
283
|
opts = assert{ Map.send(method, args) }
|
284
284
|
assert{ !args.last.is_a?(Hash) }
|
285
|
+
|
286
|
+
new_args = [0,1, opts]
|
287
|
+
new_opts = assert{ Map.send(method, new_args) }
|
288
|
+
assert{ !new_args.last.is_a?(Hash) }
|
285
289
|
end
|
286
290
|
end
|
287
291
|
|
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:
|
4
|
+
version: 5.1.0
|
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: 2011-
|
12
|
+
date: 2011-12-01 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: ! 'description: map kicks the ass'
|
15
15
|
email: ara.t.howard@gmail.com
|
@@ -49,7 +49,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
49
49
|
version: '0'
|
50
50
|
requirements: []
|
51
51
|
rubyforge_project: codeforpeople
|
52
|
-
rubygems_version: 1.8.
|
52
|
+
rubygems_version: 1.8.11
|
53
53
|
signing_key:
|
54
54
|
specification_version: 3
|
55
55
|
summary: map
|