simple_params 1.5.2 → 1.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/Gemfile.lock +1 -1
- data/lib/simple_params/concerns/has_attributes.rb +1 -0
- data/lib/simple_params/params.rb +2 -2
- data/lib/simple_params/validation_builder.rb +21 -19
- data/lib/simple_params/version.rb +1 -1
- data/spec/acceptance_spec.rb +18 -1
- data/spec/validation_builder_spec.rb +41 -19
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
NjA4YzU5ZjQ2NTRjMmYwNmViZWQ3N2ZhZTM3ZTE2Y2Q4ZGQyMWViNA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
M2FkYjI0NzcxZjgzODA0Y2JhZDcyODM4MzZkYzM1YWUyNjM4MjI5ZA==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
YmM2MmNiMDg5YmY5YzUxNGIwMjU1MzU4NGIyMDdjZjkxZjE0MDgxOTFmYzM1
|
10
|
+
YWM4NWE0MzkzNmFhOTFmNDk4ZDlkNjJlOTYwZTEwMmNjOGFiYjFjOThlZjY0
|
11
|
+
YjYzNGEyYTdhNzIyNmEwMzY0YmUyYWVhMzhlNjRhZmQ5ZmE1ZmQ=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
OTdlMjA1ZmM1MjliODZkYzEyYTdhNzYyNjdkZWRjMWZjZTY1NjVhYjllYTM2
|
14
|
+
NmQyMDI4ZjEwY2I0MWMxMThjNmJjMjUwYzQ2NzhiZjRjYjQxODdiMzMwMmRm
|
15
|
+
YzgzNDZjMTY5YWUyMmZmYjVhNWM4MWM1OGQ5ZTM3ZTY4ZmQzNGE=
|
data/Gemfile.lock
CHANGED
data/lib/simple_params/params.rb
CHANGED
@@ -30,8 +30,8 @@ module SimpleParams
|
|
30
30
|
end
|
31
31
|
|
32
32
|
def add_validations(name, opts = {})
|
33
|
-
|
34
|
-
|
33
|
+
validations = ValidationBuilder.new(opts).build
|
34
|
+
validates name, validations unless validations.empty?
|
35
35
|
end
|
36
36
|
|
37
37
|
def nested_classes
|
@@ -1,31 +1,33 @@
|
|
1
1
|
module SimpleParams
|
2
2
|
class ValidationBuilder
|
3
|
-
def initialize(
|
4
|
-
@name = name
|
3
|
+
def initialize(opts={})
|
5
4
|
@opts = opts
|
5
|
+
@validations = opts[:validations] || {}
|
6
6
|
end
|
7
7
|
|
8
|
-
def
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
if !validations.empty?
|
13
|
-
if optional || has_default
|
14
|
-
validations.merge!(allow_nil: true)
|
15
|
-
else
|
16
|
-
validations.merge!(presence: true)
|
8
|
+
def build
|
9
|
+
if allow_nil?
|
10
|
+
unless @validations.empty?
|
11
|
+
@validations.merge!(allow_nil: true)
|
17
12
|
end
|
18
13
|
else
|
19
|
-
|
20
|
-
validations.merge!(presence: true)
|
21
|
-
end
|
14
|
+
@validations.merge!(presence: true)
|
22
15
|
end
|
23
16
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
17
|
+
@validations
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
def has_default?
|
22
|
+
@opts.has_key?(:default)
|
23
|
+
end
|
24
|
+
|
25
|
+
def optional?
|
26
|
+
!!@opts[:optional]
|
27
|
+
end
|
28
|
+
|
29
|
+
def allow_nil?
|
30
|
+
optional? || has_default?
|
29
31
|
end
|
30
32
|
end
|
31
33
|
end
|
data/spec/acceptance_spec.rb
CHANGED
@@ -6,6 +6,13 @@ class AcceptanceParams < SimpleParams::Params
|
|
6
6
|
param :reference, type: :object, optional: true
|
7
7
|
param :name
|
8
8
|
param :date_of_birth, type: :date, optional: true
|
9
|
+
param :content, optional: true, validations: { length: {
|
10
|
+
minimum: 20,
|
11
|
+
maximum: 40,
|
12
|
+
tokenizer: lambda { |str| str.split(/\s+/) },
|
13
|
+
too_short: "must have at least %{count} words",
|
14
|
+
too_long: "must have at most %{count} words"
|
15
|
+
} }
|
9
16
|
param :current_time, type: :datetime, optional: true
|
10
17
|
param :age, type: :integer, optional: true, validations: { inclusion: { in: 18..100 } }
|
11
18
|
param :color, default: "red", validations: { inclusion: { in: ["red", "green"] }}
|
@@ -116,6 +123,7 @@ describe SimpleParams::Params do
|
|
116
123
|
reference: nil,
|
117
124
|
name: "Tom",
|
118
125
|
date_of_birth: nil,
|
126
|
+
content: nil,
|
119
127
|
current_time: nil,
|
120
128
|
age: nil,
|
121
129
|
color: "red",
|
@@ -179,6 +187,10 @@ describe SimpleParams::Params do
|
|
179
187
|
"0" => { name: "Paws" },
|
180
188
|
"1" => { name: "Turbo", _destroy: "1" },
|
181
189
|
"2" => { name: "Felix" }
|
190
|
+
},
|
191
|
+
birds: {
|
192
|
+
"0" => { name: "Birdy" },
|
193
|
+
"1" => { name: "Tweety", _destroy: "1" }
|
182
194
|
}
|
183
195
|
}
|
184
196
|
end
|
@@ -192,6 +204,10 @@ describe SimpleParams::Params do
|
|
192
204
|
it "builds correct number of cats" do
|
193
205
|
subject.cats.count.should eq(2)
|
194
206
|
end
|
207
|
+
|
208
|
+
it "builds correct number of birds" do
|
209
|
+
subject.birds.count.should eq(1)
|
210
|
+
end
|
195
211
|
end
|
196
212
|
end
|
197
213
|
|
@@ -263,7 +279,7 @@ describe SimpleParams::Params do
|
|
263
279
|
describe "attributes", attributes: true do
|
264
280
|
it "returns array of attribute symbols" do
|
265
281
|
params = AcceptanceParams.new
|
266
|
-
params.attributes.should eq([:reference, :name, :date_of_birth, :current_time, :age, :color, :sibling_names, :address, :phone, :dogs, :cats, :birds])
|
282
|
+
params.attributes.should eq([:reference, :name, :date_of_birth, :content, :current_time, :age, :color, :sibling_names, :address, :phone, :dogs, :cats, :birds])
|
267
283
|
end
|
268
284
|
|
269
285
|
it "returns array of attribute symbols for nested class" do
|
@@ -626,6 +642,7 @@ describe SimpleParams::Params do
|
|
626
642
|
param:reference, Object, desc:'', required: false
|
627
643
|
param :name, String, desc: '', required: true
|
628
644
|
param :date_of_birth, Date, desc: '', required: false
|
645
|
+
param:content,String,desc:'',required:false
|
629
646
|
param :current_time, desc: '', required: false
|
630
647
|
param :age, Integer, desc: '', required: false
|
631
648
|
param :color, String, desc: '', required: false
|
@@ -1,29 +1,28 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe SimpleParams::ValidationBuilder do
|
4
|
-
let(:name) { "my_attribute" }
|
5
|
-
|
6
4
|
context "with blank opts" do
|
7
|
-
let(:builder) { described_class.new
|
5
|
+
let(:builder) { described_class.new }
|
8
6
|
|
9
|
-
it "has correct
|
10
|
-
builder.
|
11
|
-
|
7
|
+
it "has correct validations" do
|
8
|
+
builder.build.should eq(
|
9
|
+
{ presence: true }
|
12
10
|
)
|
13
11
|
end
|
14
12
|
end
|
15
13
|
|
16
|
-
context "with optional" do
|
14
|
+
context "with only optional" do
|
17
15
|
let(:opts) do
|
18
16
|
{
|
19
|
-
optional: true
|
17
|
+
optional: true,
|
18
|
+
validations: nil
|
20
19
|
}
|
21
20
|
end
|
22
21
|
|
23
|
-
let(:builder) { described_class.new(
|
22
|
+
let(:builder) { described_class.new(opts) }
|
24
23
|
|
25
|
-
it "has correct
|
26
|
-
builder.
|
24
|
+
it "has correct validations" do
|
25
|
+
builder.build.should eq({})
|
27
26
|
end
|
28
27
|
end
|
29
28
|
|
@@ -34,25 +33,48 @@ describe SimpleParams::ValidationBuilder do
|
|
34
33
|
}
|
35
34
|
end
|
36
35
|
|
37
|
-
let(:builder) { described_class.new(
|
36
|
+
let(:builder) { described_class.new(opts) }
|
38
37
|
|
39
|
-
it "has correct
|
40
|
-
builder.
|
38
|
+
it "has correct validations" do
|
39
|
+
builder.build.should eq( {})
|
41
40
|
end
|
42
41
|
end
|
43
42
|
|
44
|
-
context "with other validations" do
|
43
|
+
context "with other validations (simple)" do
|
45
44
|
let(:opts) do
|
46
45
|
{
|
47
46
|
validations: { presence: true, length: { in: [0..20]} }
|
48
47
|
}
|
49
48
|
end
|
50
49
|
|
51
|
-
let(:builder) { described_class.new(
|
50
|
+
let(:builder) { described_class.new(opts) }
|
51
|
+
|
52
|
+
it "has correct validations" do
|
53
|
+
builder.build.should eq(
|
54
|
+
{ presence: true, length: { in: [0..20] } }
|
55
|
+
)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
context "with other validations (complex)" do
|
60
|
+
let(:stored_proc) do
|
61
|
+
lambda { |str| str.split(/\s+/) }
|
62
|
+
end
|
63
|
+
|
64
|
+
let(:opts) do
|
65
|
+
{
|
66
|
+
validations: { presence: true, length: {
|
67
|
+
minimum: 2, tokenizer: stored_proc
|
68
|
+
}
|
69
|
+
}
|
70
|
+
}
|
71
|
+
end
|
72
|
+
|
73
|
+
let(:builder) { described_class.new(opts) }
|
52
74
|
|
53
|
-
it "has correct
|
54
|
-
builder.
|
55
|
-
|
75
|
+
it "has correct validations" do
|
76
|
+
builder.build.should eq(
|
77
|
+
{ presence: true, length: { minimum: 2, tokenizer: stored_proc } }
|
56
78
|
)
|
57
79
|
end
|
58
80
|
end
|