module Kind::ATTRIBUTES

Public Instance Methods

name!(name) click to toggle source
# File lib/kind/__lib__/attributes.rb, line 10
def name!(name)
  STRICT.kind_of(::Symbol, name)
end
value(kind, default, visibility = :private) click to toggle source
# File lib/kind/__lib__/attributes.rb, line 14
def value(kind, default, visibility = :private)
  [kind, default, visibility]
end
value!(kind, default) click to toggle source
# File lib/kind/__lib__/attributes.rb, line 28
def value!(kind, default)
  return value(kind, default) unless kind.nil?

  raise Error.new("kind expected to not be nil")
end
value_to_assign(kind, default, hash, name) click to toggle source
# File lib/kind/__lib__/attributes.rb, line 18
def value_to_assign(kind, default, hash, name)
  raw_value = hash[name]

  return raw_value if kind.nil? && UNDEFINED == default

  value = resolve_value_to_assign(kind, default, raw_value)

  (kind.nil? || kind === value) ? value : nil
end
value_to_assign!(kind, default, hash, name) click to toggle source
# File lib/kind/__lib__/attributes.rb, line 34
def value_to_assign!(kind, default, hash, name)
  value = resolve_value_to_assign(kind, default, hash[name])

  Kind.of(kind, value, label: name)
end

Private Instance Methods

resolve_value_to_assign(kind, default, value) click to toggle source
# File lib/kind/__lib__/attributes.rb, line 42
def resolve_value_to_assign(kind, default, value)
  if kind == ::Proc
    UNDEFINED == default ? value : KIND.value(kind, value, default)
  else
    default_is_a_callable = default.respond_to?(:call)

    default_value =
      if default_is_a_callable
        default_fn = Proc === default ? default : default.method(:call)

        default_fn.arity != 0 ? default_fn.call(value) : default_fn.call
      else
        default
      end

    return value if UNDEFINED == default_value
    return default_value || value if kind.nil?

    default_is_a_callable ? KIND.value(kind, default_value, value) : KIND.value(kind, value, default_value)
  end
end