# frozen_string_literal: true require "core/define" require "core/extension" require "core/state" module Core # [public] # module Factory require_relative "factory/version" extend Core::Extension extends dependencies: [Core::State] extends :definition do # [public] # def makes(definable, object, suffix: nil, within: nil) unless object.ancestors.include?(Core::Define) object.include(Core::Define) end __makes__[definable.to_sym] = { object: object, suffix: suffix, within: Array(within) } end # [public] # def make(definable, *namespace, name, **kwargs, &block) definable = __makes__.fetch(definable.to_sym) if (suffix = definable[:suffix]) name = :"#{name}_#{suffix}" end definable[:object].define(*definable[:within], *namespace, name, **kwargs, &block) end # [public] # def makes?(definable) @__makes__.include?(definable.to_sym) end # [public] # def makeables @__makes__.keys end end applies do state :__makes__, :class, default: {} end end end