class Alki::Assembly::Instance

Public Class Methods

new(assembly_module,overrides) click to toggle source
# File lib/alki/assembly/instance.rb, line 10
def initialize(assembly_module,overrides)
  @assembly_module = assembly_module
  @overrides = overrides
  @version = 0
  @needs_load = true
  @lock = Concurrent::ReentrantReadWriteLock.new
  @obj = nil
  @executor = nil
end

Public Instance Methods

__executor__() click to toggle source
# File lib/alki/assembly/instance.rb, line 43
def __executor__
  @lock.with_read_lock do
    __load__ if @needs_load
    @executor
  end
end
__getobj__() click to toggle source
# File lib/alki/assembly/instance.rb, line 50
def __getobj__
  @lock.with_read_lock do
    __load__ if @needs_load
    @obj
  end
end
__reload__() click to toggle source
# File lib/alki/assembly/instance.rb, line 20
def __reload__
  @lock.with_read_lock do
    unless @needs_load
      @lock.with_write_lock do
        @version += 1
        @needs_load = true
      end
    end
  end
end
__reloading__() click to toggle source
# File lib/alki/assembly/instance.rb, line 31
def __reloading__
  @lock.with_read_lock do
    @needs_load
  end
end
__version__() click to toggle source
# File lib/alki/assembly/instance.rb, line 37
def __version__
  @lock.with_read_lock do
    @version
  end
end
inspect() click to toggle source
# File lib/alki/assembly/instance.rb, line 61
def inspect
  if @assembly_module.is_a?(Module)
    name = @assembly_module.name || 'AnonymousAssembly'
  else
    name = Alki::Support.classify(@assembly_module.to_s)
  end
  "#<#{name}:#{object_id}>"
end
pretty_print(q) click to toggle source
# File lib/alki/assembly/instance.rb, line 70
def pretty_print(q)
  q.text(inspect)
end
to_s() click to toggle source
# File lib/alki/assembly/instance.rb, line 57
def to_s
  inspect
end

Private Instance Methods

__load__() click to toggle source
# File lib/alki/assembly/instance.rb, line 75
def __load__
  @lock.with_write_lock do
    @needs_load = false
    begin
      @obj.__unload__ if @obj.respond_to?(:__unload__)
      @executor = Executor.new(self)
      InstanceBuilder.build @executor,@assembly_module, @overrides do |instance|
        @obj = instance
        self
      end
    rescue Exception
      @needs_load = true
      __raise__
    end
  end
end