@@ -6,20 +6,34 @@ class Processor::SanitizeData < Processor
6
6
VALUES_RE = /^\d {16}$/
7
7
8
8
def process ( value )
9
- value . merge ( value ) do |k , v |
10
- if v . is_a? ( Hash )
9
+ value . inject ( value ) do |value , ( k , v ) |
10
+ v = k if v . nil?
11
+ if v . is_a? ( Hash ) || v . is_a? ( Array )
11
12
process ( v )
12
- elsif v . is_a? ( String ) && ( json_hash = parse_json_or_nil ( v ) )
13
+ elsif v . is_a? ( String ) && ( json = parse_json_or_nil ( v ) )
13
14
#if this string is actually a json obj, convert and sanitize
14
- process ( json_hash ) . to_json
15
- elsif v . is_a? ( Integer ) && ( VALUES_RE . match ( v . to_s ) || FIELDS_RE . match ( k ) )
16
- INT_MASK
17
- elsif VALUES_RE . match ( v . to_s ) || FIELDS_RE . match ( k )
18
- STRING_MASK
15
+ value = modify_in_place ( value , [ k , v ] , process ( json ) . to_json )
16
+ elsif v . is_a? ( Integer ) && ( VALUES_RE . match ( v . to_s ) || FIELDS_RE . match ( k . to_s ) )
17
+ value = modify_in_place ( value , [ k , v ] , INT_MASK )
18
+ elsif VALUES_RE . match ( v . to_s ) || FIELDS_RE . match ( k . to_s )
19
+ value = modify_in_place ( value , [ k , v ] , STRING_MASK )
19
20
else
20
- v
21
+ value
21
22
end
22
23
end
24
+ value
25
+ end
26
+
27
+ private
28
+
29
+ def modify_in_place ( original_parent , original_child , new_child )
30
+ if original_parent . is_a? ( Array )
31
+ index = original_parent . index ( original_child [ 0 ] )
32
+ original_parent [ index ] = new_child
33
+ elsif original_parent . is_a? ( Hash )
34
+ original_parent [ original_child [ 0 ] ] = new_child
35
+ end
36
+ original_parent
23
37
end
24
38
end
25
39
end
0 commit comments