class DTOSchema::Schema

Public Class Methods

new(&block) click to toggle source
# File lib/dto_schema/schema.rb, line 18
def initialize(&block)
  @validators = {}
  @checks = {}
  @check_binder = CheckBinder.new self
  define(&block)
end

Public Instance Methods

bind_check() click to toggle source
# File lib/dto_schema/schema.rb, line 41
def bind_check
  @check_binder
end
define(&block) click to toggle source
# File lib/dto_schema/schema.rb, line 25
def define (&block)
  raise ArgumentError, "Block is expected" if block.nil?
  builder = Builder.new self
  builder.instance_eval &block
  resolve
end
define_check(name, check) click to toggle source
# File lib/dto_schema/schema.rb, line 37
def define_check(name, check)
  @checks[name] = check
end
define_validator(name, validator) click to toggle source
# File lib/dto_schema/schema.rb, line 32
def define_validator(name, validator)
  @validators[name] = validator
  generate_methods(name, validator)
end
resolve() click to toggle source
# File lib/dto_schema/schema.rb, line 45
def resolve
  @validators.each_value { |validator| validator.resolve }
  @checks.each_value { |check| check.resolve }
  self
end
resolve_check(name) click to toggle source
# File lib/dto_schema/schema.rb, line 56
def resolve_check (name)
  raise NameError, "Undefined check `#{name}'" unless @checks.include? name
  @checks[name]
end
resolve_validator(name) click to toggle source
# File lib/dto_schema/schema.rb, line 51
def resolve_validator (name)
  raise NameError, "Undefined validator `#{name}'" unless @validators.include? name
  @validators[name]
end

Private Instance Methods

generate_methods(name, validator) click to toggle source
# File lib/dto_schema/schema.rb, line 63
def generate_methods (name, validator)
  self.define_singleton_method(name) do
    validator
  end

  self.define_singleton_method("#{name}?".to_sym) do |data|
    validator.valid_structure? data
  end

  self.define_singleton_method("validate_#{name}".to_sym) do |data|
    validator.validate data
  end

  self.define_singleton_method("valid_#{name}?".to_sym) do |data|
    validator.valid? data
  end
end