for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
module Koine
module Attributes
module Adapter
class Base
attr_accessor :attribute_name
def initialize
@attribute_name = 'annonymous_attribute_name'
end
def coerce(value)
return coerce_nil if value.nil?
coerce_not_nil(value)
def default_value
@default_value.respond_to?(:call) &&
@default_value.call ||
@default_value
def with_nil_value(value = nil, &block)
@nil_value_set = true
@nil_value = value
@nil_value = block if block
self
def with_default_value(value = nil, &block)
@default_value = value
@default_value = block if block
private
def coerce_nil
if @nil_value_set
return @nil_value.respond_to?(:call) ? @nil_value.call : @nil_value
raise_error('Cannot be nil')
def coerce_not_nil(_value)
raise NotImplementedError
# duplicates if possible and freezes object
def secure
value = yield
unless value.is_a?(::Symbol)
value = value.dup if value.respond_to?(:dup)
value.freeze
def wrap_errors
yield
rescue StandardError => error
raise_error(error)
def raise_error(message)
raise Koine::Attributes::InvalidAttributeError.new(message, attribute_name)