weak_parameters 0.1.5 → 0.1.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +3 -0
- data/README.md +1 -0
- data/lib/weak_parameters/base_validator.rb +16 -3
- data/lib/weak_parameters/list_validator.rb +23 -0
- data/lib/weak_parameters/object_validator.rb +39 -0
- data/lib/weak_parameters/string_validator.rb +4 -0
- data/lib/weak_parameters/validator.rb +22 -0
- data/lib/weak_parameters/version.rb +1 -1
- data/lib/weak_parameters.rb +2 -0
- data/spec/dummy/app/controllers/recipes_controller.rb +12 -0
- data/spec/requests/recipes_spec.rb +41 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7e14888d6ca91c30183114b9da6414fd06813b14
|
4
|
+
data.tar.gz: ddf56dcd3f9802d6fc82bbc4a0b26d3efb537a39
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2c4e91827ef9bc297a92475c07539dd46f7cf6bc8f3e47006fa090c04f877fca8563b1654640e117ea2ebb67a2775f379f80a92c8531e81c578e92492e5cc9c8
|
7
|
+
data.tar.gz: adb68ddf8264e3a4020eef3bac59673d5f79b1c7215ff73ab638e0223b032d96e6a78dff97b55a1ac3f2bdf5c64fbd9a74795e714a522b87dc9948dffc2d7a44
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
module WeakParameters
|
2
2
|
class BaseValidator
|
3
|
-
attr_reader :controller, :
|
3
|
+
attr_reader :controller, :options, :block
|
4
4
|
|
5
5
|
def initialize(controller, key, options = {}, &block)
|
6
6
|
@controller = controller
|
@@ -9,7 +9,8 @@ module WeakParameters
|
|
9
9
|
@block = block
|
10
10
|
end
|
11
11
|
|
12
|
-
def validate
|
12
|
+
def validate(*path)
|
13
|
+
@path = path
|
13
14
|
handle_failure unless valid?
|
14
15
|
end
|
15
16
|
|
@@ -21,6 +22,10 @@ module WeakParameters
|
|
21
22
|
self.class.name.split("::").last.sub(/Validator$/, "").underscore.to_sym
|
22
23
|
end
|
23
24
|
|
25
|
+
def key
|
26
|
+
path[-1]
|
27
|
+
end
|
28
|
+
|
24
29
|
private
|
25
30
|
|
26
31
|
def valid?
|
@@ -57,8 +62,16 @@ module WeakParameters
|
|
57
62
|
end
|
58
63
|
end
|
59
64
|
|
65
|
+
# key array to validation target
|
66
|
+
def path
|
67
|
+
# Because @key becomes nil at ListValidator, I remove it from path.
|
68
|
+
(@path + [ @key ]).compact
|
69
|
+
end
|
70
|
+
|
60
71
|
def params
|
61
|
-
controller.params
|
72
|
+
path[0...-1].inject(controller.params) { |params, key|
|
73
|
+
params[key]
|
74
|
+
}
|
62
75
|
end
|
63
76
|
|
64
77
|
def value
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module WeakParameters
|
2
|
+
class ListValidator < WeakParameters::ArrayValidator
|
3
|
+
attr_reader :validator
|
4
|
+
def initialize(controller, key, validator)
|
5
|
+
super controller, key, {}
|
6
|
+
@validator = validator
|
7
|
+
end
|
8
|
+
|
9
|
+
def validate(*args)
|
10
|
+
super
|
11
|
+
|
12
|
+
if valid? && exist?
|
13
|
+
value.each.with_index do |_, i|
|
14
|
+
validator.validate(*path, i)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def validators
|
20
|
+
[ validator ]
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module WeakParameters
|
2
|
+
class ObjectValidator < WeakParameters::HashValidator
|
3
|
+
attr_reader :validators
|
4
|
+
def initialize(controller, key, validators, options = {})
|
5
|
+
super controller, key, options
|
6
|
+
@validators = validators
|
7
|
+
end
|
8
|
+
|
9
|
+
def validate(*args)
|
10
|
+
super
|
11
|
+
|
12
|
+
if valid? && exist?
|
13
|
+
validators.each do |validator|
|
14
|
+
validator.validate(*path)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def valid?
|
22
|
+
case
|
23
|
+
when required? && nil?
|
24
|
+
false
|
25
|
+
when exist? && invalid_type?
|
26
|
+
false
|
27
|
+
when exist? && exceptional?
|
28
|
+
false
|
29
|
+
else
|
30
|
+
true
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def error_message
|
35
|
+
keys = path.map { |k| "[#{k.inspect}]" }.join ''
|
36
|
+
"params#{keys} must be a valid Hash"
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -17,6 +17,18 @@ module WeakParameters
|
|
17
17
|
|
18
18
|
private
|
19
19
|
|
20
|
+
def with_validators(&block)
|
21
|
+
old_validators = @validators
|
22
|
+
|
23
|
+
begin
|
24
|
+
@validators = []
|
25
|
+
block.call
|
26
|
+
@validators
|
27
|
+
ensure
|
28
|
+
@validators = old_validators
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
20
32
|
def params
|
21
33
|
controller.params
|
22
34
|
end
|
@@ -52,5 +64,15 @@ module WeakParameters
|
|
52
64
|
def file(key, options = {}, &block)
|
53
65
|
validators << WeakParameters::FileValidator.new(controller, key, options, &block)
|
54
66
|
end
|
67
|
+
|
68
|
+
def object(key, options = {}, &block)
|
69
|
+
children = with_validators { instance_eval(&block) }
|
70
|
+
validators << WeakParameters::ObjectValidator.new(controller, key, children, options)
|
71
|
+
end
|
72
|
+
|
73
|
+
def list(key, type, options = {}, &block)
|
74
|
+
children = with_validators { send type, nil, options, &block }
|
75
|
+
validators << WeakParameters::ListValidator.new(controller, key, children.first)
|
76
|
+
end
|
55
77
|
end
|
56
78
|
end
|
data/lib/weak_parameters.rb
CHANGED
@@ -10,6 +10,8 @@ require "weak_parameters/float_validator"
|
|
10
10
|
require "weak_parameters/hash_validator"
|
11
11
|
require "weak_parameters/integer_validator"
|
12
12
|
require "weak_parameters/string_validator"
|
13
|
+
require "weak_parameters/object_validator"
|
14
|
+
require "weak_parameters/list_validator"
|
13
15
|
require "weak_parameters/controller"
|
14
16
|
require "weak_parameters/validation_error"
|
15
17
|
require "weak_parameters/validator"
|
@@ -13,6 +13,18 @@ class RecipesController < ApplicationController
|
|
13
13
|
string :zip_code do |value|
|
14
14
|
value =~ /\A\d{3}-\d{4}\z/
|
15
15
|
end
|
16
|
+
object :nested, required: true do
|
17
|
+
integer :number, only: [0, 1]
|
18
|
+
end
|
19
|
+
|
20
|
+
list :numbers, :integer, description: 'some numbers'
|
21
|
+
|
22
|
+
object :body do
|
23
|
+
list :items, :object, description: 'some items' do
|
24
|
+
string :name
|
25
|
+
integer :price
|
26
|
+
end
|
27
|
+
end
|
16
28
|
end
|
17
29
|
|
18
30
|
def create
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
|
-
describe "Recipes" do
|
3
|
+
describe "Recipes", type: :request do
|
4
4
|
let(:params) do
|
5
5
|
{
|
6
6
|
object: [],
|
@@ -13,6 +13,16 @@ describe "Recipes" do
|
|
13
13
|
attachment: Rack::Test::UploadedFile.new(__FILE__),
|
14
14
|
zip_code: "123-4567",
|
15
15
|
custom: 0,
|
16
|
+
nested: {
|
17
|
+
number: 0
|
18
|
+
},
|
19
|
+
numbers: [1, 2, 3],
|
20
|
+
body: {
|
21
|
+
items: [
|
22
|
+
{ name: "foo", price: 100 },
|
23
|
+
{ name: "bar", price: 100 }
|
24
|
+
]
|
25
|
+
}
|
16
26
|
}
|
17
27
|
end
|
18
28
|
|
@@ -135,5 +145,35 @@ describe "Recipes" do
|
|
135
145
|
response.status.should == 403
|
136
146
|
end
|
137
147
|
end
|
148
|
+
|
149
|
+
context "with wrong nested params" do
|
150
|
+
before do
|
151
|
+
params[:nested][:number] = true
|
152
|
+
end
|
153
|
+
include_examples "400"
|
154
|
+
end
|
155
|
+
|
156
|
+
context "with wrong repeated params" do
|
157
|
+
describe 'scalar' do
|
158
|
+
before do
|
159
|
+
params[:numbers] = 1
|
160
|
+
end
|
161
|
+
include_examples "400"
|
162
|
+
end
|
163
|
+
|
164
|
+
describe 'wrong type' do
|
165
|
+
before do
|
166
|
+
params[:numbers] = ["foo"]
|
167
|
+
end
|
168
|
+
include_examples "400"
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
172
|
+
context "with complex params" do
|
173
|
+
before do
|
174
|
+
params[:body][:items] << { price: "xxx" }
|
175
|
+
end
|
176
|
+
include_examples "400"
|
177
|
+
end
|
138
178
|
end
|
139
179
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: weak_parameters
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryo Nakamura
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-02-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -89,6 +89,8 @@ files:
|
|
89
89
|
- lib/weak_parameters/float_validator.rb
|
90
90
|
- lib/weak_parameters/hash_validator.rb
|
91
91
|
- lib/weak_parameters/integer_validator.rb
|
92
|
+
- lib/weak_parameters/list_validator.rb
|
93
|
+
- lib/weak_parameters/object_validator.rb
|
92
94
|
- lib/weak_parameters/string_validator.rb
|
93
95
|
- lib/weak_parameters/validation_error.rb
|
94
96
|
- lib/weak_parameters/validator.rb
|