module SmartKv::Core

Public Instance Methods

callable_as(klass) click to toggle source
# File lib/smart_kv/core.rb, line 69
def callable_as(klass)
  @callable_as = superclass == SmartKv ? klass : superclass.callable_class
end
callable_class() click to toggle source
# File lib/smart_kv/core.rb, line 73
def callable_class
  @callable_as
end
check(kv={}) click to toggle source
# File lib/smart_kv/core.rb, line 45
def check(kv={})
  prevent_direct_usage

  object_class = callable_class || kv.class
  kv = kv.dup

  unless SmartKv::Helper.production?
    hash = kv.to_h
    missing_keys = required_keys - hash.keys
    unless missing_keys.empty?
      raise SmartKv::KeyError, "missing required key(s): #{missing_keys.map{|k| k.to_sym.inspect }.join(', ')} in #{self.class}"
    end

    unrecognized_keys = hash.keys - keys.to_a
    unless unrecognized_keys.empty?
      key = unrecognized_keys.first
      raise SmartKv::KeyError.new("unrecognized key: #{key.inspect} in #{self}.", key: key, receiver: (keys - hash.keys).map {|k| [k, nil] }.to_h)
    end
  end

  return to_callable_object(object_class, kv)
end
Also aliased as: new
init_optional() click to toggle source
# File lib/smart_kv/core.rb, line 36
def init_optional
  @optional ||= superclass == SmartKv ? ::Set.new : superclass.optional.dup
end
init_required() click to toggle source
# File lib/smart_kv/core.rb, line 20
def init_required
  @required ||= superclass == SmartKv ? ::Set.new : superclass.required.dup
end
keys() click to toggle source
# File lib/smart_kv/core.rb, line 40
def keys
  init_required; init_optional
  @required + @optional
end
new(kv={})
Alias for: check
optional(*args) click to toggle source
# File lib/smart_kv/core.rb, line 24
def optional(*args)
  init_optional
  @optional += args
  @required -= @optional if @required
  @optional
end
optional_keys() click to toggle source
# File lib/smart_kv/core.rb, line 31
def optional_keys
  init_optional
  @optional.to_a
end
required(*args) click to toggle source
# File lib/smart_kv/core.rb, line 8
def required(*args)
  init_required
  @required += args
  @optional -= @required if @optional
  @required
end
required_keys() click to toggle source
# File lib/smart_kv/core.rb, line 15
def required_keys
  init_required
  @required.to_a
end

Private Instance Methods

prevent_direct_usage() click to toggle source
# File lib/smart_kv/core.rb, line 79
def prevent_direct_usage
  if self == SmartKv
    raise SmartKv::DirectUsageError, "only subclass of SmartKv is meant to be used".freeze
  end
end