hashmake 0.1.8 → 0.1.9
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog.rdoc +5 -1
- data/lib/hashmake/arg_spec.rb +4 -1
- data/lib/hashmake/hash_makeable.rb +18 -6
- data/lib/hashmake/version.rb +1 -1
- data/spec/hash_makeable_spec.rb +22 -0
- metadata +4 -4
data/ChangeLog.rdoc
CHANGED
@@ -35,4 +35,8 @@ Add #find_arg_specs and #make_hash methods to HashMakeable.
|
|
35
35
|
|
36
36
|
=== 0.1.7 / 2013-06-21
|
37
37
|
|
38
|
-
In HashMakeable.make_hash, only make objects into hashes if the object class matches the arg spec type (and, still, if it is hash makeable).
|
38
|
+
In HashMakeable.make_hash, only make objects into hashes if the object class matches the arg spec type (and, still, if it is hash makeable).
|
39
|
+
|
40
|
+
=== 0.1.7 / 2013-06-21
|
41
|
+
|
42
|
+
Add :allow_nil option to ArgSpec.new. If an arg spec allows nil, it mean that if a hashed arg is nil, no ArgumentError will be raised and the validator won't be called.
|
data/lib/hashmake/arg_spec.rb
CHANGED
@@ -20,9 +20,10 @@ class ArgSpec
|
|
20
20
|
:validator => ->(a){true},
|
21
21
|
:container => nil,
|
22
22
|
:type => Object,
|
23
|
+
:allow_nil => false
|
23
24
|
}
|
24
25
|
|
25
|
-
attr_reader :type, :validator, :reqd, :default, :container
|
26
|
+
attr_reader :type, :validator, :reqd, :default, :container, :allow_nil
|
26
27
|
|
27
28
|
# A new instance of ArgSpec.
|
28
29
|
#
|
@@ -56,6 +57,8 @@ class ArgSpec
|
|
56
57
|
@container = new_args[:container]
|
57
58
|
raise ArgumentError, "CONTAINERS does not include container #{@container}" unless CONTAINERS.include?(@container)
|
58
59
|
|
60
|
+
@allow_nil = new_args[:allow_nil]
|
61
|
+
|
59
62
|
unless @reqd
|
60
63
|
msg = "if hashed arg is not required, a default value or value generator (proc) must be defined via :default key"
|
61
64
|
raise ArgumentError, msg unless new_args.has_key?(:default)
|
@@ -86,18 +86,30 @@ module HashMakeable
|
|
86
86
|
if arg_spec.container == Array
|
87
87
|
raise ArgumentError, "val #{val} is not an array" unless val.is_a?(Array)
|
88
88
|
val.each do |item|
|
89
|
-
|
90
|
-
|
89
|
+
if item.nil?
|
90
|
+
raise ArgumentError, "nil was given" unless arg_spec.allow_nil
|
91
|
+
else
|
92
|
+
raise ArgumentError, "array item #{item} is not a #{arg_spec.type}" unless item.is_a?(arg_spec.type)
|
93
|
+
raise ArgumentError, "array item #{item} is not valid" unless arg_spec.validator.call(item)
|
94
|
+
end
|
91
95
|
end
|
92
96
|
elsif arg_spec.container == Hash
|
93
97
|
raise ArgumentError, "val #{val} is not a hash" unless val.is_a?(Hash)
|
94
98
|
val.values.each do |item|
|
95
|
-
|
96
|
-
|
99
|
+
if item.nil?
|
100
|
+
raise ArgumentError, "nil was given" unless arg_spec.allow_nil
|
101
|
+
else
|
102
|
+
raise ArgumentError, "hash item #{item} is not a #{arg_spec.type}" unless item.is_a?(arg_spec.type)
|
103
|
+
raise ArgumentError, "hash item #{item} is not valid" unless arg_spec.validator.call(item)
|
104
|
+
end
|
97
105
|
end
|
98
106
|
elsif arg_spec.container.nil?
|
99
|
-
|
100
|
-
|
107
|
+
if val.nil?
|
108
|
+
raise ArgumentError, "nil was given" unless arg_spec.allow_nil
|
109
|
+
else
|
110
|
+
raise ArgumentError, "val #{val} is not a #{arg_spec.type}" unless val.is_a?(arg_spec.type)
|
111
|
+
raise ArgumentError, "val #{val} is not valid" unless arg_spec.validator.call(val)
|
112
|
+
end
|
101
113
|
else
|
102
114
|
raise ArgumentError, "arg_spec.container #{arg_spec.container} is not valid"
|
103
115
|
end
|
data/lib/hashmake/version.rb
CHANGED
data/spec/hash_makeable_spec.rb
CHANGED
@@ -43,6 +43,20 @@ describe Hashmake::HashMakeable do
|
|
43
43
|
end
|
44
44
|
end
|
45
45
|
|
46
|
+
class TestAllowNil
|
47
|
+
include HashMakeable
|
48
|
+
|
49
|
+
ARG_SPECS = {
|
50
|
+
:allows_nil => arg_spec(:reqd => false, :default => ->(){ "123" }, :type => String, :allow_nil => true),
|
51
|
+
:disallows_nil => arg_spec(:reqd => false, :default => ->(){ "123" }, :type => String, :allow_nil => false)
|
52
|
+
}
|
53
|
+
|
54
|
+
attr_reader :allows_nil, :disallows_nil
|
55
|
+
def initialize args
|
56
|
+
hash_make ARG_SPECS, args
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
46
60
|
describe '#hash_make' do
|
47
61
|
context 'for a reqd arg' do
|
48
62
|
it 'should raise an ArgumentError if not given in the hash' do
|
@@ -136,6 +150,14 @@ describe Hashmake::HashMakeable do
|
|
136
150
|
a.also_hash_makeable.a_number.should eq(a_number)
|
137
151
|
end
|
138
152
|
end
|
153
|
+
|
154
|
+
it 'should not raise ArgumentError if nil is given when nil is allowed' do
|
155
|
+
lambda { TestAllowNil.new(:allows_nil => nil) }.should_not raise_error
|
156
|
+
end
|
157
|
+
|
158
|
+
it 'should raise ArgumentError if nil is given when nil is not allowed' do
|
159
|
+
lambda { TestAllowNil.new(:disallows_nil => nil) }.should raise_error(ArgumentError)
|
160
|
+
end
|
139
161
|
end
|
140
162
|
|
141
163
|
describe '#make_hash' do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hashmake
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.9
|
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-06-
|
12
|
+
date: 2013-06-23 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -133,7 +133,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
133
133
|
version: '0'
|
134
134
|
segments:
|
135
135
|
- 0
|
136
|
-
hash: -
|
136
|
+
hash: -1181723344412730535
|
137
137
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
138
138
|
none: false
|
139
139
|
requirements:
|
@@ -142,7 +142,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
142
142
|
version: '0'
|
143
143
|
segments:
|
144
144
|
- 0
|
145
|
-
hash: -
|
145
|
+
hash: -1181723344412730535
|
146
146
|
requirements: []
|
147
147
|
rubyforge_project:
|
148
148
|
rubygems_version: 1.8.23
|