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