class 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