module Dry

Public Instance Methods

find_schemas_for_attribute(key, schema, schemas = []) click to toggle source
# File lib/dry/schema.rb, line 127
def find_schemas_for_attribute(key, schema, schemas = [])
  case schema
    when Hash
      s = schema[:properties][key] rescue nil
      schemas << s if s
      [:allOf, :anyOf, :oneOf].each { |k| find_schemas_for_attribute(key, schema[k], schemas) }
    when Array
      schema.each { |s| find_schemas_for_attribute(key, s, schemas) }
    else
  end


  schemas
end
method_missing(method) click to toggle source
# File lib/dry/schema.rb, line 143
def method_missing(method)
  attributes[method.to_sym]
end
multi_rule(keys, parents, messages = {}, name = nil, &block) click to toggle source
# File lib/dry/schema.rb, line 109
def multi_rule(keys, parents, messages = {}, name = nil, &block)
  _keys = [keys].flatten.compact
  data  = parents.present? ? attributes.dig(*parents) : attributes

  data = _keys.inject({}) do |res, key|
    res[key.to_sym] = data[key.to_sym] rescue nil; res
  end

  factories = data.map do |key, value|
    _key = name || key
    _key = (parents + [_key]).join('.')
    Dry::RulesFactory.new(value, errors, key: _key, messages: messages)
  end

  block.call *factories
end
rule(attrs, parents, messages = {}, name = nil, &block) click to toggle source
# File lib/dry/schema.rb, line 91
def rule(attrs, parents, messages = {}, name = nil, &block)
  if block.arity == 0
    _attrs = [attrs].flatten.compact
    raise 'Invalid rule' if _attrs.size > 1
    single_rule(parents + _attrs, messages, &block)
  else
    multi_rule(attrs, parents, messages, name, &block)
  end
end
single_rule(keys, messages = {}, &block) click to toggle source
# File lib/dry/schema.rb, line 102
def single_rule(keys, messages = {}, &block)
  value   = attributes.dig(*keys) rescue nil
  factory = Dry::RulesFactory.new(value, errors, key: keys.join('.'), messages: messages)
  factory.instance_exec &block
end