params_sanitizer 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,36 @@
1
+ module ParamsSanitizer::Sanitizers
2
+ module ExistValue
3
+
4
+ private
5
+
6
+ # Sanitize a destructive params.
7
+ # @note destructive method for params.
8
+ #
9
+ # @param params [Hash] parameters. (will be destructed by this method.)
10
+ # @param rules [Hash] rules of exist_value.
11
+ def sanitize_exist_value!(params, rules)
12
+ rules.each do |key, rule|
13
+ params[key] = params[key] || rule[:default_value]
14
+ end
15
+ end
16
+
17
+ module SanitizerMethods
18
+ # Define rule of exist_value
19
+ #
20
+ # @example
21
+ # exist_value(:keyword, '')
22
+ #
23
+ # @param key [String] key of parameter.
24
+ # @param default_value [Object] default values when input not exist value or nil.
25
+ def exist_value(key, default_value, min = nil, max = nil)
26
+ check_duplicated_definition!(key)
27
+ definitions[:exist_value] ||= Hash.new
28
+ definitions[:exist_value][key.to_s] = { default_value: default_value }
29
+ end
30
+ end
31
+
32
+ def self.included(mixin)
33
+ mixin.extend SanitizerMethods
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,60 @@
1
+ module ParamsSanitizer::Sanitizers
2
+ module RejectRange
3
+
4
+ private
5
+
6
+ # Sanitize a destructive params.
7
+ # @note destructive method for params.
8
+ #
9
+ # @param params [Hash] parameters. (will be destructed by this method.)
10
+ # @param rules [Hash] rules of reject_range.
11
+ def sanitize_reject_range!(params, rules)
12
+ rules.each do |key, rule|
13
+ if params.has_key?(key)
14
+ params[key] = check_reject_range(params[key].to_i, rule[:default_value], rule[:min], rule[:max])
15
+ else
16
+ params[key] = rule[:default_value]
17
+ end
18
+ end
19
+ end
20
+
21
+ # Check whether a value is admitted range.
22
+ # @note return a default value when value is not admitted range.
23
+ #
24
+ # @param value [Object] value
25
+ # @param default_value [Object] default_value
26
+ # @param min [Integer] range of min.(when do not set a limit, nil)
27
+ # @param max [Integer] range of max.(when do not set a limit, nil)
28
+ # @return [Object] value or default_value.
29
+ def check_reject_range(value, default_value, min, max)
30
+ if min and value < min
31
+ value
32
+ elsif max and value > max
33
+ value
34
+ else
35
+ default_value
36
+ end
37
+ end
38
+
39
+ module SanitizerMethods
40
+ # Define rule of reject range.
41
+ #
42
+ # @example
43
+ # reject_range(:age, 100, 100, nil) # max 100.
44
+ #
45
+ # @param key [String] key of parameter.
46
+ # @param default_value [Object] default values when input not addmitted value.
47
+ # @param min [Integer] range of min.(when do not set a limit, nil)
48
+ # @param max [Integer] range of max.(when do not set a limit, nil)
49
+ def reject_range(key, default_value, min = nil, max = nil)
50
+ check_duplicated_definition!(key)
51
+ definitions[:reject_range] ||= Hash.new
52
+ definitions[:reject_range][key.to_s] = { default_value: default_value, min: min, max: max }
53
+ end
54
+ end
55
+
56
+ def self.included(mixin)
57
+ mixin.extend SanitizerMethods
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,56 @@
1
+ module ParamsSanitizer::Sanitizers
2
+ module RejectRegex
3
+
4
+ private
5
+
6
+ # Sanitize a destructive params.
7
+ # @note destructive method for params.
8
+ #
9
+ # @param params [Hash] parameters. (will be destructed by this method.)
10
+ # @param rules [Hash] rules of reject_regex.
11
+ def sanitize_reject_regex!(params, rules)
12
+ rules.each do |key, rule|
13
+ if params.has_key?(key)
14
+ params[key] = check_reject_regex(params[key], rule[:default_value], rule[:regex])
15
+ else
16
+ params[key] = rule[:default_value]
17
+ end
18
+ end
19
+ end
20
+
21
+ # Check whether a value is admitted regex.
22
+ # @note return a default value when value is not admitted regex.
23
+ #
24
+ # @param value [Object] value
25
+ # @param default_value [Object] default_value
26
+ # @param regex [Regexp] reject when regex match.
27
+ # @return [Object] value or default_value.
28
+ def check_reject_regex(value, default_value, regex)
29
+ if regex.match(value)
30
+ default_value
31
+ else
32
+ value
33
+ end
34
+ end
35
+
36
+ module SanitizerMethods
37
+ # Define rule of reject regex.
38
+ #
39
+ # @example
40
+ # reject_regex(:number, 0, /^\w$/)
41
+ #
42
+ # @param key [String] key of parameter.
43
+ # @param default_value [Object] default values when input not addmitted value.
44
+ # @param regex [Regexp] reject when regex match.
45
+ def reject_regex(key, default_value, regex)
46
+ check_duplicated_definition!(key)
47
+ definitions[:reject_regex] ||= Hash.new
48
+ definitions[:reject_regex][key.to_s] = { default_value: default_value, regex: regex }
49
+ end
50
+ end
51
+
52
+ def self.included(mixin)
53
+ mixin.extend SanitizerMethods
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,57 @@
1
+ module ParamsSanitizer::Sanitizers
2
+ module RejectValue
3
+
4
+ private
5
+
6
+ # Sanitize a destructive params.
7
+ # @note destructive method for params.
8
+ #
9
+ # @param params [Hash] parameters. (will be destructed by this method.)
10
+ # @param rules [Hash] rules of reject_value.
11
+ def sanitize_reject_value!(params, rules)
12
+ rules.each do |key, rule|
13
+ if params.has_key?(key)
14
+ params[key] = check_reject_value(params[key], rule[:default_value], rule[:reject_values])
15
+ else
16
+ params[key] = rule[:default_value]
17
+ end
18
+ end
19
+ end
20
+
21
+ # Check whether a value is admitted.
22
+ # @note return a default value when value is not admitted.
23
+ #
24
+ # @param value [Object] value
25
+ # @param default_value [Object] default_value
26
+ # @param reject_values [Array] admitted values.
27
+ # @return [Object] value or default_value.
28
+ def check_reject_value(value, default_value, reject_values)
29
+ if reject_values.include?(value)
30
+ default_value
31
+ else
32
+ value
33
+ end
34
+ end
35
+
36
+ module SanitizerMethods
37
+ # Define rule of reject value.
38
+ #
39
+ # @example
40
+ # reject_value(:user_name, nil, ['admin','root'])
41
+ #
42
+ # @param key [String] key of parameter.
43
+ # @param default_value [Object] default values when input not addmitted value.
44
+ # @param reject_values [Array<Object>] reject values.
45
+ def reject_value(key, default_value, reject_values)
46
+ check_duplicated_definition!(key)
47
+ definitions[:reject_value] ||= Hash.new
48
+ definitions[:reject_value][key.to_s] = { default_value: default_value, reject_values: reject_values }
49
+ end
50
+ end
51
+
52
+
53
+ def self.included(mixin)
54
+ mixin.extend SanitizerMethods
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,3 @@
1
+ module ParamsSanitizer
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,27 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'params_sanitizer/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "params_sanitizer"
8
+ spec.version = ParamsSanitizer::VERSION
9
+ spec.authors = ["alfa-jpn"]
10
+ spec.email = ["a.nkmr.ja@gmail.com"]
11
+ spec.description = "params_sanitizer sanitize parameter.It is really easy and useful."
12
+ spec.summary = "params_sanitizer sanitize parameter.It is really easy and useful."
13
+ spec.homepage = "https://github.com/alfa-jpn/params_sanitizer"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.3"
22
+ spec.add_development_dependency "rake"
23
+ spec.add_development_dependency "rspec"
24
+ spec.add_development_dependency "yard"
25
+
26
+ spec.add_dependency "actionpack", "~> 4.0"
27
+ end
@@ -0,0 +1,81 @@
1
+ require 'rspec'
2
+ require 'spec_helper'
3
+
4
+ describe ParamsSanitizer::Base do
5
+
6
+ it 'Definitions instance was defined each class.' do
7
+ sanitizer1 = Class.new(ParamsSanitizer::Base)
8
+ sanitizer2 = Class.new(ParamsSanitizer::Base)
9
+
10
+ expect(sanitizer1.definitions.equal?(sanitizer2.definitions)).to be_false
11
+ end
12
+
13
+ it 'included sanitizers methods.' do
14
+ expect(ParamsSanitizer::Base.methods.include?(:accept_value)).to be_true
15
+ expect(ParamsSanitizer::Base.methods.include?(:reject_value)).to be_true
16
+ expect(ParamsSanitizer::Base.methods.include?(:accept_range)).to be_true
17
+ expect(ParamsSanitizer::Base.methods.include?(:reject_range)).to be_true
18
+ expect(ParamsSanitizer::Base.methods.include?(:accept_regex)).to be_true
19
+ expect(ParamsSanitizer::Base.methods.include?(:reject_regex)).to be_true
20
+ expect(ParamsSanitizer::Base.methods.include?(:exist_value)).to be_true
21
+ end
22
+
23
+ it 'check_duplicated_definition! method can check duplicated.' do
24
+ ParamsSanitizer::Base.stub(:definitions).and_return(
25
+ {
26
+ accept_value:{
27
+ 'name' => nil,
28
+ 'email' => nil,
29
+ }
30
+ }
31
+ )
32
+
33
+ expect {
34
+ ParamsSanitizer::Base.check_duplicated_definition!('safe')
35
+ }.not_to raise_error
36
+
37
+ expect {
38
+ ParamsSanitizer::Base.check_duplicated_definition!('email')
39
+ }.to raise_error
40
+ end
41
+
42
+ it 'permit_filter called after call sanitize.' do
43
+ sanitizer = Class.new(ParamsSanitizer::Base)
44
+ params = ActionController::Parameters.new({nyaruko: 'kawaii', suiginto: 'kaminoryouiki'})
45
+
46
+ ParamsSanitizer::Base.should_receive(:permit_filter).and_return([:nyaruko])
47
+ params.should_receive(:permit).with([:nyaruko]).and_return(params)
48
+
49
+ sanitizer.sanitize(params)
50
+ end
51
+
52
+ it 'permit_filter enable.' do
53
+ ParamsSanitizer::Base.stub(:permit_filter).and_return([:nyaruko])
54
+ ParamsSanitizer::Base.stub(:definitions).and_return({})
55
+
56
+ sanitizer = Class.new(ParamsSanitizer::Base)
57
+ params = ActionController::Parameters.new({nyaruko: 'kawaii', suiginto: 'kaminoryouiki'})
58
+ sanitized = sanitizer.sanitize(params)
59
+
60
+ expect(sanitized.eql?({nyaruko: 'kawaii'})).to be_true
61
+ end
62
+
63
+ it 'sanitize_params call sanitizer.' do
64
+ params = {'nyarukosan' => 'w'}
65
+
66
+ ParamsSanitizer::Base.stub(:definitions).and_return(
67
+ {
68
+ anime_value: 'rules'
69
+ }
70
+ )
71
+
72
+ sanitizer_inst = ParamsSanitizer::Base.new
73
+ sanitizer_inst.should_receive(:sanitize_anime_value!).with(params, 'rules')
74
+
75
+ sanitized = sanitizer_inst.sanitize_params(params)
76
+
77
+ # return symbol key.
78
+ expect(sanitized.eql?({nyarukosan: 'w'})).to be_true
79
+ end
80
+
81
+ end
@@ -0,0 +1,116 @@
1
+ require 'rspec'
2
+
3
+ describe ParamsSanitizer::Sanitizers::AcceptRange do
4
+
5
+ context 'after include' do
6
+ before(:each) do
7
+ class Sanitizer
8
+ include ParamsSanitizer::Sanitizers::AcceptRange
9
+ end
10
+ Sanitizer.stub(:check_duplicated_definition!)
11
+ end
12
+
13
+ it 'have accept_range methods.' do
14
+ expect(Sanitizer.private_method_defined?(:sanitize_accept_range!)).to be_true
15
+ expect(Sanitizer.methods.include?(:accept_range)).to be_true
16
+ end
17
+
18
+ it 'accept_range method call check_duplicated_definition!' do
19
+ Sanitizer.stub(:definitions).and_return(Hash.new)
20
+ Sanitizer.should_receive(:check_duplicated_definition!).with(:anime)
21
+ Sanitizer.accept_range(:anime, 50, 0, 100)
22
+ end
23
+
24
+ it 'accept_range method add rule.' do
25
+ definition = Hash.new
26
+ Sanitizer.stub(:definitions).and_return(definition)
27
+
28
+ expect {
29
+ Sanitizer.accept_range(:anime, 50, 0, 100)
30
+ }.to change{definition.count}.by(1)
31
+
32
+ expect(definition.eql?(
33
+ {
34
+ accept_range: { 'anime' => { default_value: 50, min: 0, max: 100 } }
35
+ })).to be_true
36
+ end
37
+
38
+ context 'after define rule' do
39
+ before(:each) do
40
+ definitions = Hash.new
41
+ Sanitizer.stub(:definitions).and_return(definitions)
42
+
43
+ Sanitizer.accept_range(:anime, 50, 0, 100)
44
+ @rule = definitions[:accept_range]
45
+ end
46
+
47
+ it 'sanitize_accept_range! method sanitizes missing params.' do
48
+ params = {'anime' => '-50'}
49
+ Sanitizer.new.send(:sanitize_accept_range!, params, @rule)
50
+ expect(params.eql?({'anime' => 50})).to be_true
51
+
52
+ params = {'anime' => '-1'}
53
+ Sanitizer.new.send(:sanitize_accept_range!, params, @rule)
54
+ expect(params.eql?({'anime' => 50})).to be_true
55
+
56
+ params = {'anime' => '101'}
57
+ Sanitizer.new.send(:sanitize_accept_range!, params, @rule)
58
+ expect(params.eql?({'anime' => 50})).to be_true
59
+
60
+ params = {'anime' => '150'}
61
+ Sanitizer.new.send(:sanitize_accept_range!, params, @rule)
62
+ expect(params.eql?({'anime' => 50})).to be_true
63
+ end
64
+
65
+ it 'sanitize_accept_range! method does not sanitize params.' do
66
+ params = {'anime' => '0'}
67
+ Sanitizer.new.send(:sanitize_accept_range!, params, @rule)
68
+ expect(params.eql?({'anime' => 0})).to be_true
69
+
70
+ params = {'anime' => '40'}
71
+ Sanitizer.new.send(:sanitize_accept_range!, params, @rule)
72
+ expect(params.eql?({'anime' => 40})).to be_true
73
+
74
+ params = {'anime' => '80'}
75
+ Sanitizer.new.send(:sanitize_accept_range!, params, @rule)
76
+ expect(params.eql?({'anime' => 80})).to be_true
77
+
78
+ params = {'anime' => '100'}
79
+ Sanitizer.new.send(:sanitize_accept_range!, params, @rule)
80
+ expect(params.eql?({'anime' => 100})).to be_true
81
+ end
82
+ end
83
+
84
+ context 'after define rule of one limit free.' do
85
+ before(:each) do
86
+ definitions = Hash.new
87
+ Sanitizer.stub(:definitions).and_return(definitions)
88
+
89
+ Sanitizer.accept_range(:minnil, 50, nil, 100)
90
+ Sanitizer.accept_range(:maxnil, 50, 0, nil)
91
+ @rule = definitions[:accept_range]
92
+ end
93
+
94
+ it 'sanitize_accept_range! method sanitizes missing params.' do
95
+ params = {'minnil' => '150'}
96
+ Sanitizer.new.send(:sanitize_accept_range!, params, @rule)
97
+ expect(params.eql?({'minnil' => 50, 'maxnil' => 50})).to be_true
98
+
99
+ params = {'maxnil' => '-50'}
100
+ Sanitizer.new.send(:sanitize_accept_range!, params, @rule)
101
+ expect(params.eql?({'minnil' => 50, 'maxnil' => 50})).to be_true
102
+ end
103
+
104
+ it 'sanitize_accept_range! method does not sanitize params.' do
105
+ params = {'minnil' => '-999'}
106
+ Sanitizer.new.send(:sanitize_accept_range!, params, @rule)
107
+ expect(params.eql?({'minnil' => -999, 'maxnil' => 50})).to be_true
108
+
109
+ params = {'maxnil' => '999'}
110
+ Sanitizer.new.send(:sanitize_accept_range!, params, @rule)
111
+ expect(params.eql?({'minnil' => 50, 'maxnil' => 999})).to be_true
112
+ end
113
+ end
114
+
115
+ end
116
+ end