class BetterHelpers::HashHierarchyToClass

Public Class Methods

new(hash, parent_class) click to toggle source
# File lib/better_helpers/hash_hierarchy_to_class.rb, line 4
def initialize hash, parent_class
  @hash = hash
  @parent_class = parent_class
end

Public Instance Methods

apply() click to toggle source
# File lib/better_helpers/hash_hierarchy_to_class.rb, line 9
def apply
  value = apply_to_class @hash, @parent_class.new
  @hash.keys.first.nil? ? value : @parent_class.new
end

Private Instance Methods

apply_to_class(obj, parent_obj) click to toggle source
# File lib/better_helpers/hash_hierarchy_to_class.rb, line 15
def apply_to_class obj, parent_obj
  if obj.is_a? Hash
    key = obj.keys.first
    value = obj[key]

    return value if key.nil?

    if parent_obj.respond_to?(key)
      apply_to_class value, parent_obj.send(key)
    else

      klass = Class.new
      instance = klass.new
      return_obj = apply_to_class value, instance

      parent_obj.class.send(:define_method, key) { return_obj }
      return parent_obj
    end
  end

  obj
end