class Altair::Document

Attributes

fields[RW]

Public Class Methods

new(fields, data = IndifferentHash.new) click to toggle source
# File lib/altair/document.rb, line 7
def initialize(fields, data = IndifferentHash.new)
  @fields = fields
  
  fields.each do |key, field|
    case field
    when Hash
      define_singleton_method(:"#{key}") { get(key) }
      self[key] = self.class.new(field, data[key] || IndifferentHash.new)
    when Field
      define_singleton_method(:"#{key}") { get(key) }
      define_singleton_method(:"#{key}=") { |value| set(key, value) }
    end
  end

  apply(data)
end

Public Instance Methods

apply(data) click to toggle source
# File lib/altair/document.rb, line 24
def apply(data)
  data.each do |key, value|
    case fields[key]
    when Hash
      self[key].apply data[key]
    when Field
      set(key, value)
    end
  end
end
get(key) click to toggle source
# File lib/altair/document.rb, line 35
def get(key)
  self[key]
end
set(key, value) click to toggle source
# File lib/altair/document.rb, line 39
def set(key, value)
  self[key] = fields[key].parse! value
end
validate!(options = {}) click to toggle source
# File lib/altair/document.rb, line 43
def validate! (options = {})
  fields.each do |key, field|
    case field
    when Hash
      self[key].validate! options
    when Field
      field.validate! self[key], options
    end
  end
end