class Yori::SchemaBase

Yori::SchemaBase

Attributes

id[RW]

Public Class Methods

eval_class!(klass, id, &block) click to toggle source
# File lib/yori/schema_base.rb, line 50
def eval_class!(klass, id, &block)
  klass.new.tap do |c|
    raise 'must inherit SchemaBase class' unless c.is_a?(SchemaBase)
    c.id = id
    c.instance_eval(&block)
    c.validate!
  end
end
eval_hash!(klass, id, value) click to toggle source
# File lib/yori/schema_base.rb, line 42
def eval_hash!(klass, id, value)
  klass[value].tap do |c|
    raise 'must inherit SchemaBase class' unless c.is_a?(SchemaBase)
    c.id = id
    c.validate!
  end
end
eval_input!(klass, id, value = nil, &block) click to toggle source
# File lib/yori/schema_base.rb, line 29
def eval_input!(klass, id, value = nil, &block)
  return eval_class!(klass, id, &block) unless value

  case value
  when String, FalseClass
    value # pass as a runtime expression
  when Hash
    eval_hash!(klass, id, value)
  else
    raise 'direct assignment value must be a Hash'
  end
end

Private Class Methods

array_field_block(name, item_name, schema_class) click to toggle source
# File lib/yori/schema_base.rb, line 74
def array_field_block(name, item_name, schema_class)
  define_method(item_name) do |value = nil, &block|
    c = self.class.eval_input!(schema_class, id, value, &block)
    self[name.to_s] ||= []
    self[name.to_s] << c
  end
  define_method(name) do |&block|
    self[name.to_s] = []
    instance_eval(&block)
  end
end
field_block(name, schema_class) click to toggle source
# File lib/yori/schema_base.rb, line 67
def field_block(name, schema_class)
  define_method(name) do |value = nil, &block|
    c = self.class.eval_input!(schema_class, id, value, &block)
    self[name.to_s] = c
  end
end
fields(*names) click to toggle source
# File lib/yori/schema_base.rb, line 61
def fields(*names)
  names.each do |name|
    define_method(name) { |value| self[name.to_s] = value }
  end
end
hash_field(name, key_name) click to toggle source
# File lib/yori/schema_base.rb, line 86
def hash_field(name, key_name)
  define_method(key_name) do |key, value|
    self[name.to_s] ||= {}
    self[name.to_s][key.to_s] = value
  end
  define_method(name) do |&block|
    self[name.to_s] = {}
    instance_eval(&block)
  end
end
hash_field_block(name, key_name, schema_class) click to toggle source
# File lib/yori/schema_base.rb, line 97
def hash_field_block(name, key_name, schema_class)
  define_method(key_name) do |key, value = nil, &block|
    c = self.class.eval_input!(schema_class, id, value, &block)
    self[name.to_s] ||= {}
    self[name.to_s][key.to_s] = c
  end
  define_method(name) do |&block|
    self[name.to_s] = {}
    instance_eval(&block)
  end
end

Public Instance Methods

ref(value) click to toggle source
# File lib/yori/schema_base.rb, line 24
def ref(value)
  self['$ref'] = value
end
validate!() click to toggle source
# File lib/yori/schema_base.rb, line 20
def validate!; end
validator() click to toggle source
# File lib/yori/schema_base.rb, line 16
def validator
  @validator ||= Yori::SchemaValidator.new(self)
end