class Gaston::Builder

Public Class Methods

new(parent, hash={}) click to toggle source
# File lib/gaston/builder.rb, line 5
def new(parent, hash={})
  hash.each_with_object({}) do |(key, store), hsh|
    if store.is_a?(Hash)
      camelize = "Gaston" + Inflecto.camelize(Inflecto.underscore(key))
      klass = if parent.const_defined? camelize, false
        Inflecto.constantize("#{parent}::#{camelize}")
      else
        parent.const_set camelize, Class.new(Hash)
      end
      store = klass[Gaston::Builder.new(klass, store)]
    end
    if parent.instance_methods.include? key.to_sym
      warn "#{key} method already exists on #{parent}, value: #{store}"
    else
      hsh[key] = store
      parent.send(:define_method, key, -> { store })
    end
  end
end