Module: ActiveParams::Parser

Extended by:
Parser
Included in:
Parser
Defined in:
lib/active_params/parser.rb

Instance Method Summary collapse

Instance Method Details

#combine_hashes(array_of_hashes) ⇒ Object

to obtain a hash of all possible keys



4
5
6
7
# File 'lib/active_params/parser.rb', line 4

def combine_hashes(array_of_hashes)
  array_of_hashes.select {|v| v.kind_of?(Hash) }.
    inject({}) {|sum, hash| hash.inject(sum) {|sum,(k,v)| sum.merge(k => v) } }
end

#strong_params_definition_for(params) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/active_params/parser.rb', line 9

def strong_params_definition_for(params)
  if params.kind_of?(Array)
    combined_hash = combine_hashes(params)
    if combined_hash.empty?
      []
    else
      strong_params_definition_for(combined_hash)
    end
  elsif params.respond_to?(:keys) # Hash, ActionController::Parameters
    values, arrays = [[], {}]
    params.each do |key, value|
      case value
      when Array
        arrays[key] = strong_params_definition_for(value)
      when Hash
        arrays[key] = strong_params_definition_for(combine_hashes(value.values))
      else
        values.push(key)
      end
    end
    if arrays.empty?
      values
    else
      [*values.sort, arrays]
    end
  else
    params
  end
end