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