hash_cleaner 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 0d5ff6f100ef0c8fa9ec8bf796793848a174b465
4
+ data.tar.gz: f2485bc7888187185edeada35ff4394111f089de
5
+ SHA512:
6
+ metadata.gz: 6ed4d38ac30e1002434b87945936d0b6f2f271b4bb0adbd90a65b95c7aeef7e28e7b58129e2e63e5c29ac8d509f91797cf7ff492436cef320ac63460207427f2
7
+ data.tar.gz: 467a1ee83254137d4dbbefc7795337b4ea16d35b1e6f887497b4e60985ad9cc77f7f6e011c7c03f7a3c62282a8ab3d915b4858d37c02290d7de4960fc5342632
@@ -0,0 +1,6 @@
1
+ require "hash_cleaner/whitelist"
2
+ require 'active_support/core_ext/hash/indifferent_access'
3
+
4
+ module HashCleaner
5
+
6
+ end
@@ -0,0 +1,42 @@
1
+ # extracted from https://github.com/drewolson/params_cleaner
2
+
3
+ module HashCleaner
4
+ class Whitelist
5
+ def initialize(whitelist)
6
+ @whitelist = whitelist
7
+ end
8
+
9
+ def sanitize(item, parent = nil)
10
+ if item.kind_of?(Hash)
11
+ _sanitize_hash(item, parent)
12
+ elsif item.kind_of?(Array)
13
+ item.map { |item| sanitize(item, parent) }
14
+ else
15
+ item
16
+ end
17
+ end
18
+
19
+ def _sanitize_hash(hash, parent)
20
+ valid_keys = _valid_keys_for_parent(parent)
21
+ valid_pairs = hash.select { |key, value| valid_keys.include?(key.to_sym) }
22
+ sanitized_pairs = valid_pairs.map { |key, value| [key, sanitize(value, key.to_sym)] }
23
+
24
+ HashWithIndifferentAccess.new(Hash[sanitized_pairs])
25
+ end
26
+
27
+ def _top_level_keys
28
+ @top_level_keys ||= @whitelist.reject { |item| item.kind_of?(Hash) }
29
+ end
30
+
31
+ def _valid_keys_for_parent(parent)
32
+ _whitelist_hash.keys.tap do |keys|
33
+ keys.concat(_top_level_keys) if parent.nil?
34
+ keys.concat(_whitelist_hash[parent]) if _whitelist_hash.has_key?(parent)
35
+ end
36
+ end
37
+
38
+ def _whitelist_hash
39
+ @whitelist_hash ||= @whitelist.last.is_a?(Hash) ? @whitelist.last : {}
40
+ end
41
+ end
42
+ end
metadata ADDED
@@ -0,0 +1,59 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: hash_cleaner
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Marcus Vinicius Loureiro Mansur
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-09-16 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activesupport
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ description: provides whitelist feature to ruby hashes
28
+ email:
29
+ - marcus.v.mansur@gmail.com
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - lib/hash_cleaner.rb
35
+ - lib/hash_cleaner/whitelist.rb
36
+ homepage: ''
37
+ licenses: []
38
+ metadata: {}
39
+ post_install_message:
40
+ rdoc_options: []
41
+ require_paths:
42
+ - lib
43
+ required_ruby_version: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ required_rubygems_version: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - '>='
51
+ - !ruby/object:Gem::Version
52
+ version: '0'
53
+ requirements: []
54
+ rubyforge_project:
55
+ rubygems_version: 2.1.11
56
+ signing_key:
57
+ specification_version: 4
58
+ summary: ruby hashes now can be whitelisted!
59
+ test_files: []