module Kangaru::Attributable

def attributes

def attributes
  instance_methods.grep(/\w=$/).map do |attribute|
    attribute.to_s.delete_suffix("=").to_sym
  end
end

def defaults

def defaults
  @defaults ||= {}
end

def initialize(**attributes)

def initialize(**attributes)
  attributes = self.class.defaults.merge(**attributes)
  merge!(**attributes)
end

def merge!(**attributes)

def merge!(**attributes)
  attributes.slice(*self.class.attributes).each do |attr, value|
    instance_variable_set(:"@#{attr}", value)
  end
end

def set_default(**attributes)

def set_default(**attributes)
  defaults.merge!(**attributes)
end