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