parameters_schema 0.42 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/test/helpers.rb CHANGED
@@ -1,56 +1,56 @@
1
- module ActiveSupport
2
- class HashWithIndifferentAccess < Hash
3
- def must_equal_hash(other)
4
- self.must_equal(other.with_indifferent_access)
5
- end
6
- end
7
- end
8
-
9
- module ParametersSchema
10
- class Schema
11
- def must_allow(values)
12
- [values].flatten.each do |value|
13
- if value.kind_of?(Range)
14
- value.each do |v|
15
- execute_must_allow(v)
16
- end
17
- else
18
- execute_must_allow(value)
19
- end
20
- end
21
-
22
- self
23
- end
24
-
25
- def must_deny(values, error_code = ParametersSchema::ErrorCode::DISALLOWED)
26
- [values].flatten.each do |value|
27
- if value.kind_of?(Range)
28
- value.each do |v|
29
- execute_must_deny(v, error_code)
30
- end
31
- else
32
- execute_must_deny(value, error_code)
33
- end
34
- end
35
-
36
- self
37
- end
38
-
39
- private
40
-
41
- def execute_must_allow(value)
42
- self
43
- .validate!(potatoe: value)
44
- .must_equal_hash(potatoe: value)
45
- end
46
-
47
- def execute_must_deny(value, error_code)
48
- Proc.new do
49
- self
50
- .validate!(potatoe: value)
51
- end
52
- .must_raise(ParametersSchema::InvalidParameters)
53
- .errors.must_equal_hash(potatoe: error_code)
54
- end
55
- end
56
- end
1
+ module ActiveSupport
2
+ class HashWithIndifferentAccess < Hash
3
+ def must_equal_hash(other)
4
+ self.must_equal(other.with_indifferent_access)
5
+ end
6
+ end
7
+ end
8
+
9
+ module ParametersSchema
10
+ class Schema
11
+ def must_allow(values)
12
+ [values].flatten.each do |value|
13
+ if value.kind_of?(Range)
14
+ value.each do |v|
15
+ execute_must_allow(v)
16
+ end
17
+ else
18
+ execute_must_allow(value)
19
+ end
20
+ end
21
+
22
+ self
23
+ end
24
+
25
+ def must_deny(values, error_code = ParametersSchema::ErrorCode::DISALLOWED)
26
+ [values].flatten.each do |value|
27
+ if value.kind_of?(Range)
28
+ value.each do |v|
29
+ execute_must_deny(v, error_code)
30
+ end
31
+ else
32
+ execute_must_deny(value, error_code)
33
+ end
34
+ end
35
+
36
+ self
37
+ end
38
+
39
+ private
40
+
41
+ def execute_must_allow(value)
42
+ self
43
+ .validate!(potatoe: value)
44
+ .must_equal_hash(potatoe: value)
45
+ end
46
+
47
+ def execute_must_deny(value, error_code)
48
+ Proc.new do
49
+ self
50
+ .validate!(potatoe: value)
51
+ end
52
+ .must_raise(ParametersSchema::InvalidParameters)
53
+ .errors.must_equal_hash(potatoe: error_code)
54
+ end
55
+ end
56
+ end
data/test/test_options.rb CHANGED
@@ -1,74 +1,74 @@
1
- require 'minitest/autorun'
2
- require 'parameters_schema'
3
- require_relative 'helpers'
4
-
5
- describe 'Skipping parameters' do
6
- before do
7
- ParametersSchema::Options.reset_defaults
8
-
9
- @schema = ParametersSchema::Schema.new do
10
- param :potatoe
11
- end
12
- end
13
-
14
- it 'skip default parameters in a Rails context' do
15
- @schema
16
- .validate!(potatoe: 'Ac Belmont', controller: 'potatoes', action: 'create', format: 'json')
17
- .must_equal_hash(potatoe: 'Ac Belmont')
18
- end
19
-
20
- it 'redefines parameters to skip' do
21
- ParametersSchema::Options.skip_parameters = [:banana]
22
-
23
- @schema
24
- .validate!(potatoe: 'Ac Belmont', banana: 'Cavendish')
25
- .must_equal_hash(potatoe: 'Ac Belmont')
26
-
27
- Proc
28
- .new{ @schema.validate!(potatoe: 'Ac Belmont', controller: 'potatoes', action: 'create', format: 'json') }
29
- .must_raise(ParametersSchema::InvalidParameters)
30
- end
31
-
32
- it 'augments parameters to skip' do
33
- ParametersSchema::Options.skip_parameters = ParametersSchema::Options.skip_parameters + [:banana]
34
- @schema
35
- .validate!(potatoe: 'Ac Belmont', banana: 'Cavendish', controller: 'potatoes', action: 'create', format: 'json')
36
- .must_equal_hash(potatoe: 'Ac Belmont')
37
- end
38
- end
39
-
40
- describe 'Empty keyword' do
41
- before do
42
- ParametersSchema::Options.reset_defaults
43
-
44
- @schema = ParametersSchema::Schema.new do
45
- param :potatoe, allow: :empty
46
- end
47
- end
48
-
49
- it 'uses the default value' do
50
- ParametersSchema::Schema.new do
51
- param :potatoe, allow: :empty
52
- end
53
- .validate!(potatoe: '')
54
- .must_equal_hash(potatoe: '')
55
- end
56
-
57
- it 'redefines the value' do
58
- ParametersSchema::Options.empty_keyword = :allow_empty
59
-
60
- ParametersSchema::Schema.new do
61
- param :potatoe, allow: :allow_empty
62
- end
63
- .validate!(potatoe: '')
64
- .must_equal_hash(potatoe: '')
65
-
66
- Proc.new do
67
- ParametersSchema::Schema.new do
68
- param :potatoe, allow: :empty
69
- end.validate!(potatoe: '')
70
- end
71
- .must_raise(ParametersSchema::InvalidParameters)
72
- .errors.must_equal_hash(potatoe: ParametersSchema::ErrorCode::EMPTY)
73
- end
74
- end
1
+ require 'minitest/autorun'
2
+ require 'parameters_schema'
3
+ require_relative 'helpers'
4
+
5
+ describe 'Skipping parameters' do
6
+ before do
7
+ ParametersSchema::Options.reset_defaults
8
+
9
+ @schema = ParametersSchema::Schema.new do
10
+ param :potatoe
11
+ end
12
+ end
13
+
14
+ it 'skip default parameters in a Rails context' do
15
+ @schema
16
+ .validate!(potatoe: 'Ac Belmont', controller: 'potatoes', action: 'create', format: 'json')
17
+ .must_equal_hash(potatoe: 'Ac Belmont')
18
+ end
19
+
20
+ it 'redefines parameters to skip' do
21
+ ParametersSchema::Options.skip_parameters = [:banana]
22
+
23
+ @schema
24
+ .validate!(potatoe: 'Ac Belmont', banana: 'Cavendish')
25
+ .must_equal_hash(potatoe: 'Ac Belmont')
26
+
27
+ Proc
28
+ .new{ @schema.validate!(potatoe: 'Ac Belmont', controller: 'potatoes', action: 'create', format: 'json') }
29
+ .must_raise(ParametersSchema::InvalidParameters)
30
+ end
31
+
32
+ it 'augments parameters to skip' do
33
+ ParametersSchema::Options.skip_parameters = ParametersSchema::Options.skip_parameters + [:banana]
34
+ @schema
35
+ .validate!(potatoe: 'Ac Belmont', banana: 'Cavendish', controller: 'potatoes', action: 'create', format: 'json')
36
+ .must_equal_hash(potatoe: 'Ac Belmont')
37
+ end
38
+ end
39
+
40
+ describe 'Empty keyword' do
41
+ before do
42
+ ParametersSchema::Options.reset_defaults
43
+
44
+ @schema = ParametersSchema::Schema.new do
45
+ param :potatoe, allow: :empty
46
+ end
47
+ end
48
+
49
+ it 'uses the default value' do
50
+ ParametersSchema::Schema.new do
51
+ param :potatoe, allow: :empty
52
+ end
53
+ .validate!(potatoe: '')
54
+ .must_equal_hash(potatoe: '')
55
+ end
56
+
57
+ it 'redefines the value' do
58
+ ParametersSchema::Options.empty_keyword = :allow_empty
59
+
60
+ ParametersSchema::Schema.new do
61
+ param :potatoe, allow: :allow_empty
62
+ end
63
+ .validate!(potatoe: '')
64
+ .must_equal_hash(potatoe: '')
65
+
66
+ Proc.new do
67
+ ParametersSchema::Schema.new do
68
+ param :potatoe, allow: :empty
69
+ end.validate!(potatoe: '')
70
+ end
71
+ .must_raise(ParametersSchema::InvalidParameters)
72
+ .errors.must_equal_hash(potatoe: ParametersSchema::ErrorCode::EMPTY)
73
+ end
74
+ end
@@ -1,114 +1,114 @@
1
- require 'minitest/autorun'
2
- require 'parameters_schema'
3
- require_relative 'helpers'
4
-
5
- describe 'Allow and Deny' do
6
- before do
7
- ParametersSchema::Options.reset_defaults
8
- end
9
-
10
- it 'allows :any and denies :none by default' do
11
- [{}, { allow: :any }, { deny: :none }, { allow: :any, deny: :none }].each do |options|
12
- schema = ParametersSchema::Schema.new do
13
- param :potatoe, options.merge(type: Fixnum)
14
- end
15
- .must_allow((-10..10))
16
- end
17
- end
18
-
19
- it 'allows multiple :allow values' do
20
- schema = ParametersSchema::Schema.new do
21
- param :potatoe, type: Fixnum, allow: [(1..2), (4..5)]
22
- end
23
- .must_allow([1, 2, 4, 5])
24
- .must_deny(3)
25
- end
26
-
27
- it 'allows multiple :deny values' do
28
- schema = ParametersSchema::Schema.new do
29
- param :potatoe, type: Fixnum, deny: [(1..2), (4..5)]
30
- end
31
- .must_allow([-1, 0, 3, 6, 7])
32
- .must_deny([1, 2, 4, 5])
33
- end
34
-
35
- it 'gives priority to :any and :none in multiple :allow values' do
36
- schema = ParametersSchema::Schema.new do
37
- param :potatoe, type: Fixnum, allow: [(1..2), :any]
38
- end
39
- .must_allow((-10..10))
40
-
41
- schema = ParametersSchema::Schema.new do
42
- param :potatoe, type: Fixnum, allow: [(1..2), :none]
43
- end
44
- .must_deny((-10..10))
45
- end
46
-
47
- it 'gives priority to :any and :none in multiple :deny values' do
48
- schema = ParametersSchema::Schema.new do
49
- param :potatoe, type: Fixnum, deny: [(1..2), :none]
50
- end
51
- .must_allow((-10..10))
52
-
53
- schema = ParametersSchema::Schema.new do
54
- param :potatoe, type: Fixnum, deny: [(1..2), :any]
55
- end
56
- .must_deny((-10..10))
57
- end
58
-
59
- it 'when using an array, the :allow is applied on the array values' do
60
- schema = ParametersSchema::Schema.new do
61
- param :potatoe, type: Fixnum, array: true, allow: (1..3)
62
- end
63
-
64
- schema
65
- .validate!(potatoe: [1, 2, 3, 2, 1])
66
- .must_equal_hash(potatoe: [1, 2, 3, 2, 1])
67
-
68
- Proc.new do
69
- schema.validate!(potatoe: [1, 2, 3, 2, 1, 0])
70
- end
71
- .must_raise(ParametersSchema::InvalidParameters)
72
- .errors.must_equal_hash(potatoe: ParametersSchema::ErrorCode::DISALLOWED)
73
- end
74
-
75
- it 'when using an array, the :deny is applied on the array values' do
76
- schema = ParametersSchema::Schema.new do
77
- param :potatoe, type: Fixnum, array: true, deny: (1..3)
78
- end
79
-
80
- schema
81
- .validate!(potatoe: [-1, 0, 4, 5, 6])
82
- .must_equal_hash(potatoe: [-1, 0, 4, 5, 6])
83
-
84
- Proc.new do
85
- schema.validate!(potatoe: [-1, 0, 4, 5, 6, 1])
86
- end
87
- .must_raise(ParametersSchema::InvalidParameters)
88
- .errors.must_equal_hash(potatoe: ParametersSchema::ErrorCode::DISALLOWED)
89
- end
90
-
91
- it 'allows a subset of values defined by a range' do
92
- schema = ParametersSchema::Schema.new do
93
- param :potatoe, type: Fixnum, allow: (1..10)
94
- end
95
- .must_allow((1..10))
96
- .must_deny(((-10..0).to_a + (11..20).to_a))
97
- end
98
-
99
- it 'allows a subset of values by choices' do
100
- schema = ParametersSchema::Schema.new do
101
- param :potatoe, allow: ['a', 'b', 'c']
102
- end
103
- .must_allow(['a', 'b', 'c'])
104
- .must_deny('d')
105
- end
106
-
107
- it 'allows a subset of values by regex' do
108
- schema = ParametersSchema::Schema.new do
109
- param :potatoe, allow: /^[A-Z]+$/
110
- end
111
- .must_allow(['A', 'BB', 'CDE'])
112
- .must_deny(['a', 'Aa', 'F1'])
113
- end
114
- end
1
+ require 'minitest/autorun'
2
+ require 'parameters_schema'
3
+ require_relative 'helpers'
4
+
5
+ describe 'Allow and Deny' do
6
+ before do
7
+ ParametersSchema::Options.reset_defaults
8
+ end
9
+
10
+ it 'allows :any and denies :none by default' do
11
+ [{}, { allow: :any }, { deny: :none }, { allow: :any, deny: :none }].each do |options|
12
+ schema = ParametersSchema::Schema.new do
13
+ param :potatoe, options.merge(type: Fixnum)
14
+ end
15
+ .must_allow((-10..10))
16
+ end
17
+ end
18
+
19
+ it 'allows multiple :allow values' do
20
+ schema = ParametersSchema::Schema.new do
21
+ param :potatoe, type: Fixnum, allow: [(1..2), (4..5)]
22
+ end
23
+ .must_allow([1, 2, 4, 5])
24
+ .must_deny(3)
25
+ end
26
+
27
+ it 'allows multiple :deny values' do
28
+ schema = ParametersSchema::Schema.new do
29
+ param :potatoe, type: Fixnum, deny: [(1..2), (4..5)]
30
+ end
31
+ .must_allow([-1, 0, 3, 6, 7])
32
+ .must_deny([1, 2, 4, 5])
33
+ end
34
+
35
+ it 'gives priority to :any and :none in multiple :allow values' do
36
+ schema = ParametersSchema::Schema.new do
37
+ param :potatoe, type: Fixnum, allow: [(1..2), :any]
38
+ end
39
+ .must_allow((-10..10))
40
+
41
+ schema = ParametersSchema::Schema.new do
42
+ param :potatoe, type: Fixnum, allow: [(1..2), :none]
43
+ end
44
+ .must_deny((-10..10))
45
+ end
46
+
47
+ it 'gives priority to :any and :none in multiple :deny values' do
48
+ schema = ParametersSchema::Schema.new do
49
+ param :potatoe, type: Fixnum, deny: [(1..2), :none]
50
+ end
51
+ .must_allow((-10..10))
52
+
53
+ schema = ParametersSchema::Schema.new do
54
+ param :potatoe, type: Fixnum, deny: [(1..2), :any]
55
+ end
56
+ .must_deny((-10..10))
57
+ end
58
+
59
+ it 'when using an array, the :allow is applied on the array values' do
60
+ schema = ParametersSchema::Schema.new do
61
+ param :potatoe, type: Fixnum, array: true, allow: (1..3)
62
+ end
63
+
64
+ schema
65
+ .validate!(potatoe: [1, 2, 3, 2, 1])
66
+ .must_equal_hash(potatoe: [1, 2, 3, 2, 1])
67
+
68
+ Proc.new do
69
+ schema.validate!(potatoe: [1, 2, 3, 2, 1, 0])
70
+ end
71
+ .must_raise(ParametersSchema::InvalidParameters)
72
+ .errors.must_equal_hash(potatoe: ParametersSchema::ErrorCode::DISALLOWED)
73
+ end
74
+
75
+ it 'when using an array, the :deny is applied on the array values' do
76
+ schema = ParametersSchema::Schema.new do
77
+ param :potatoe, type: Fixnum, array: true, deny: (1..3)
78
+ end
79
+
80
+ schema
81
+ .validate!(potatoe: [-1, 0, 4, 5, 6])
82
+ .must_equal_hash(potatoe: [-1, 0, 4, 5, 6])
83
+
84
+ Proc.new do
85
+ schema.validate!(potatoe: [-1, 0, 4, 5, 6, 1])
86
+ end
87
+ .must_raise(ParametersSchema::InvalidParameters)
88
+ .errors.must_equal_hash(potatoe: ParametersSchema::ErrorCode::DISALLOWED)
89
+ end
90
+
91
+ it 'allows a subset of values defined by a range' do
92
+ schema = ParametersSchema::Schema.new do
93
+ param :potatoe, type: Fixnum, allow: (1..10)
94
+ end
95
+ .must_allow((1..10))
96
+ .must_deny(((-10..0).to_a + (11..20).to_a))
97
+ end
98
+
99
+ it 'allows a subset of values by choices' do
100
+ schema = ParametersSchema::Schema.new do
101
+ param :potatoe, allow: ['a', 'b', 'c']
102
+ end
103
+ .must_allow(['a', 'b', 'c'])
104
+ .must_deny('d')
105
+ end
106
+
107
+ it 'allows a subset of values by regex' do
108
+ schema = ParametersSchema::Schema.new do
109
+ param :potatoe, allow: /^[A-Z]+$/
110
+ end
111
+ .must_allow(['A', 'BB', 'CDE'])
112
+ .must_deny(['a', 'Aa', 'F1'])
113
+ end
114
+ end
@@ -1,30 +1,30 @@
1
- require 'minitest/autorun'
2
- require 'parameters_schema'
3
- require_relative 'helpers'
4
-
5
- describe 'Allow empty' do
6
- before do
7
- ParametersSchema::Options.reset_defaults
8
- end
9
-
10
- it 'requires a non-empty value by default' do
11
- ParametersSchema::Schema.new do
12
- param :potatoe
13
- end
14
- .must_deny('', ParametersSchema::ErrorCode::EMPTY)
15
- end
16
-
17
- it 'can be set to accept empty value' do
18
- ParametersSchema::Schema.new do
19
- param :potatoe, allow: :empty
20
- end
21
- .must_allow('')
22
- end
23
-
24
- it 'when set to accept empty, it still reject nil value' do
25
- ParametersSchema::Schema.new do
26
- param :potatoe, allow: :empty
27
- end
28
- .must_deny(nil, ParametersSchema::ErrorCode::NIL)
29
- end
1
+ require 'minitest/autorun'
2
+ require 'parameters_schema'
3
+ require_relative 'helpers'
4
+
5
+ describe 'Allow empty' do
6
+ before do
7
+ ParametersSchema::Options.reset_defaults
8
+ end
9
+
10
+ it 'requires a non-empty value by default' do
11
+ ParametersSchema::Schema.new do
12
+ param :potatoe
13
+ end
14
+ .must_deny('', ParametersSchema::ErrorCode::EMPTY)
15
+ end
16
+
17
+ it 'can be set to accept empty value' do
18
+ ParametersSchema::Schema.new do
19
+ param :potatoe, allow: :empty
20
+ end
21
+ .must_allow('')
22
+ end
23
+
24
+ it 'when set to accept empty, it still reject nil value' do
25
+ ParametersSchema::Schema.new do
26
+ param :potatoe, allow: :empty
27
+ end
28
+ .must_deny(nil, ParametersSchema::ErrorCode::NIL)
29
+ end
30
30
  end
@@ -1,34 +1,34 @@
1
- require 'minitest/autorun'
2
- require 'parameters_schema'
3
- require_relative 'helpers'
4
-
5
- describe 'Allow nil' do
6
- before do
7
- ParametersSchema::Options.reset_defaults
8
-
9
- @schema = ParametersSchema::Schema.new do
10
- param :potatoe
11
- end
12
- end
13
-
14
- it 'requires a non-nil value by default' do
15
- ParametersSchema::Schema.new do
16
- param :potatoe
17
- end
18
- .must_deny(nil, ParametersSchema::ErrorCode::NIL)
19
- end
20
-
21
- it 'can be set to accept nil' do
22
- ParametersSchema::Schema.new do
23
- param :potatoe, allow: :nil
24
- end
25
- .must_allow(nil)
26
- end
27
-
28
- it 'when set to accept nil, it still reject empty value' do
29
- ParametersSchema::Schema.new do
30
- param :potatoe, allow: :nil
31
- end
32
- .must_deny('', ParametersSchema::ErrorCode::EMPTY)
33
- end
1
+ require 'minitest/autorun'
2
+ require 'parameters_schema'
3
+ require_relative 'helpers'
4
+
5
+ describe 'Allow nil' do
6
+ before do
7
+ ParametersSchema::Options.reset_defaults
8
+
9
+ @schema = ParametersSchema::Schema.new do
10
+ param :potatoe
11
+ end
12
+ end
13
+
14
+ it 'requires a non-nil value by default' do
15
+ ParametersSchema::Schema.new do
16
+ param :potatoe
17
+ end
18
+ .must_deny(nil, ParametersSchema::ErrorCode::NIL)
19
+ end
20
+
21
+ it 'can be set to accept nil' do
22
+ ParametersSchema::Schema.new do
23
+ param :potatoe, allow: :nil
24
+ end
25
+ .must_allow(nil)
26
+ end
27
+
28
+ it 'when set to accept nil, it still reject empty value' do
29
+ ParametersSchema::Schema.new do
30
+ param :potatoe, allow: :nil
31
+ end
32
+ .must_deny('', ParametersSchema::ErrorCode::EMPTY)
33
+ end
34
34
  end