class Pakyow::Support::State
Contains state for a definable class or instance.
@api private
Constants
- PRIORITIES
Attributes
instances[R]
name[R]
object[R]
priorities[R]
Public Class Methods
new(name, object)
click to toggle source
# File lib/pakyow/support/definable.rb, line 186 def initialize(name, object) @name = name.to_sym @object = object @instances = [] @priorities = {} end
Public Instance Methods
<<(instance)
click to toggle source
TODO: we handle both instances and classes, so reconsider the variable naming
# File lib/pakyow/support/definable.rb, line 199 def <<(instance) register(instance) end
enforce_registration!(instance)
click to toggle source
# File lib/pakyow/support/definable.rb, line 223 def enforce_registration!(instance) ancestors = if instance.respond_to?(:new) instance.ancestors else instance.class.ancestors end unless ancestors.include?(@object) raise ArgumentError, "expected instance of '#{@object}'" end end
initialize_copy(original)
click to toggle source
Calls superclass method
# File lib/pakyow/support/definable.rb, line 193 def initialize_copy(original) super @instances = original.instances.deep_dup end
register(instance, priority: :default)
click to toggle source
TODO: we handle both instances and classes, so reconsider the variable naming
# File lib/pakyow/support/definable.rb, line 204 def register(instance, priority: :default) unless priority.is_a?(Integer) priority = PRIORITIES.fetch(priority) { raise ArgumentError, "unknown priority `#{priority}'" } end unless instance.is_a?(Module) enforce_registration!(instance) end unless instances.include?(instance) instances << instance end priorities[instance] = priority reprioritize! end
reprioritize!()
click to toggle source
# File lib/pakyow/support/definable.rb, line 235 def reprioritize! @instances.sort! { |a, b| (@priorities[b] || 0) <=> (@priorities[a] || 0) } end