class PassaporteWeb::Helpers

Public Class Methods

convert_to_ostruct_recursive(obj, options={}) click to toggle source

Converts a Hash recursevely to a OpenStruct object.

Example:

hash = {a: 1, b: {c: 3, d: 4, e: {f: 6, g: 7}}}
os = PassaporteWeb::Helpers.convert_to_ostruct_recursive(hash)
os.a # => 1
os.b # => {c: 3, d: 4, e: {f: 6, g: 7}}
os.b.c # => 3
os.b.d # => 4
os.b.e # => {f: 6, g: 7}
os.b.e.f # => 6
os.b.e.g # => 7
# File lib/passaporte_web/helpers.rb, line 51
def self.convert_to_ostruct_recursive(obj, options={})
  result = obj
  if result.is_a? Hash
    result = result.dup
    result.each do |key, val|
      result[key] = convert_to_ostruct_recursive(val, options) unless (!options[:exclude].nil? && options[:exclude].include?(key))
    end
    result = OpenStruct.new result
  elsif result.is_a? Array
    result = result.map { |r| convert_to_ostruct_recursive(r, options) }
  end
  return result
end