params_cleaner 0.4.2 → 0.4.3

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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 9fec59b6d039921eab9c77a26f36fa73227173fe
4
+ data.tar.gz: 7b8cb6e72c5d6b0fe9d9d63ea7c9b5d840e629fc
5
+ SHA512:
6
+ metadata.gz: 86796d222afe4f2b8abe94f9f15351ed14c4175af060f8040c679e68bce7e59de6a30409bea8b48c3df2a49dbd6c337a379d15e6b0b700ad48ac0173f3da5341
7
+ data.tar.gz: a93da4692d51e0d0358a642872f153d4152f7c6009e70526a9eabaf71c75d6d82ec48e093fcbb2533ab3a656d98fe2e026945b0d506d683ac89ca67dfaf3595b
@@ -1,3 +1,3 @@
1
1
  module ParamsCleaner
2
- VERSION = "0.4.2"
2
+ VERSION = "0.4.3"
3
3
  end
@@ -4,60 +4,37 @@ module ParamsCleaner
4
4
  @whitelist = whitelist
5
5
  end
6
6
 
7
- def sanitize(params, top_level = true)
8
- cleaned_params = params.map do |key, value|
9
- if value.kind_of?(Hash)
10
- _clean_hash(key, value)
11
- elsif value.kind_of?(Array)
12
- _clean_array(key, value)
13
- else
14
- _clean_value(key, value, top_level)
15
- end
7
+ def sanitize(item, parent = nil)
8
+ if item.kind_of?(Hash)
9
+ _sanitize_hash(item, parent)
10
+ elsif item.kind_of?(Array)
11
+ item.map { |item| sanitize(item, parent) }
12
+ else
13
+ item
16
14
  end
17
-
18
- cleaned_params_hash = Hash[cleaned_params]
19
- HashWithIndifferentAccess.new(cleaned_params_hash)
20
15
  end
21
16
 
22
- def _allowed_nested
23
- @whitelist.detect { |params_group| params_group.is_a?(Hash) } || {}
24
- end
17
+ def _sanitize_hash(hash, parent)
18
+ valid_keys = _valid_keys_for_parent(parent)
19
+ valid_pairs = hash.select { |key, value| valid_keys.include?(key.to_sym) }
20
+ sanitized_pairs = valid_pairs.map { |key, value| [key, sanitize(value, key.to_sym)] }
25
21
 
26
- def _allowed_top_level
27
- params_groups = []
28
- @whitelist.each do |params_group|
29
- unless params_group.is_a?(Hash)
30
- params_groups << params_group
31
- end
32
- end
33
- params_groups
22
+ HashWithIndifferentAccess.new(Hash[sanitized_pairs])
34
23
  end
35
24
 
36
- def _clean_array(key, value)
37
- cleaned_values = value.map do |sub_value|
38
- if sub_value.is_a?(Hash)
39
- _clean_hash(key, sub_value).last
40
- else
41
- sub_value
42
- end
43
- end
44
- [key, cleaned_values]
25
+ def _top_level_keys
26
+ @top_level_keys ||= @whitelist.reject { |item| item.kind_of?(Hash) }
45
27
  end
46
28
 
47
- def _clean_hash(key, value)
48
- allowed_keys = value.slice(*_allowed_nested[key.to_sym])
49
- clean_values = sanitize(allowed_keys, false)
50
- [key, clean_values]
29
+ def _valid_keys_for_parent(parent)
30
+ _whitelist_hash.keys.tap do |keys|
31
+ keys.concat(_top_level_keys) if parent.nil?
32
+ keys.concat(_whitelist_hash[parent]) if _whitelist_hash.has_key?(parent)
33
+ end
51
34
  end
52
35
 
53
- def _clean_value(key, value, top_level)
54
- return [key, value] unless top_level
55
-
56
- if _allowed_top_level.include?(key.to_sym)
57
- [key, value]
58
- else
59
- []
60
- end
36
+ def _whitelist_hash
37
+ @whitelist_hash ||= @whitelist.last.is_a?(Hash) ? @whitelist.last : {}
61
38
  end
62
39
  end
63
40
  end
metadata CHANGED
@@ -1,32 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: params_cleaner
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.2
5
- prerelease:
4
+ version: 0.4.3
6
5
  platform: ruby
7
6
  authors:
8
7
  - Drew Olson
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2012-09-11 00:00:00.000000000 Z
11
+ date: 2013-02-26 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: activesupport
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - ~>
20
18
  - !ruby/object:Gem::Version
21
- version: 3.0.0
19
+ version: '3.0'
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - ~>
28
25
  - !ruby/object:Gem::Version
29
- version: 3.0.0
26
+ version: '3.0'
30
27
  description: Rails mass assignment protection in the controller
31
28
  email:
32
29
  - drew@drewolson.org
@@ -39,32 +36,25 @@ files:
39
36
  - lib/params_cleaner.rb
40
37
  homepage: https://github.com/drewolson/params_cleaner
41
38
  licenses: []
39
+ metadata: {}
42
40
  post_install_message:
43
41
  rdoc_options: []
44
42
  require_paths:
45
43
  - lib
46
44
  required_ruby_version: !ruby/object:Gem::Requirement
47
- none: false
48
45
  requirements:
49
- - - ! '>='
46
+ - - '>='
50
47
  - !ruby/object:Gem::Version
51
48
  version: '0'
52
- segments:
53
- - 0
54
- hash: 2059744410745176612
55
49
  required_rubygems_version: !ruby/object:Gem::Requirement
56
- none: false
57
50
  requirements:
58
- - - ! '>='
51
+ - - '>='
59
52
  - !ruby/object:Gem::Version
60
53
  version: '0'
61
- segments:
62
- - 0
63
- hash: 2059744410745176612
64
54
  requirements: []
65
55
  rubyforge_project:
66
- rubygems_version: 1.8.24
56
+ rubygems_version: 2.0.0
67
57
  signing_key:
68
- specification_version: 3
58
+ specification_version: 4
69
59
  summary: Rails mass assignment protection in the controller
70
60
  test_files: []