for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
module Koine
module Attributes
class AttributesFactory
def initialize(initializer: {}, attributes: [])
@attributes = {}
attributes.each do |attribute|
arguments = Array(attribute)
add_attribute(*arguments)
end
set_initializer_options
if initializer && initializer.is_a?(Hash)
set_initializer_options(initializer)
def create(target_object)
Attributes.new(
target_object,
attributes: @attributes,
strict: @strict,
freeze: @freeze
)
def add_attribute(name, adapter, &block)
adapter = coerce_adapter(adapter)
block.call(adapter) if block
@attributes[name.to_sym] = adapter
def coerce_adapter(adapter)
return adapter unless adapter.instance_of?(::Symbol)
Object.const_get("Koine::Attributes::Adapter::#{adapter.to_s.capitalize}").new
private
def set_initializer_options(strict: true, freeze: false)
@strict = strict
@freeze = freeze