module Praxis::Finalizable

Public Class Methods

extended(klass) click to toggle source
# File lib/praxis/finalizable.rb, line 5
def self.extended(klass)
  klass.module_eval do
    @finalizable = Set.new
  end
end

Public Instance Methods

_finalize!() click to toggle source
# File lib/praxis/finalizable.rb, line 25
def _finalize!
  @finalized = true
end
finalizable() click to toggle source
# File lib/praxis/finalizable.rb, line 17
def finalizable
  @finalizable
end
finalize!() click to toggle source
# File lib/praxis/finalizable.rb, line 29
def finalize!
  finalizable.reject(&:finalized?).each(&:_finalize!)

  finalize! unless finalizable.all?(&:finalized?)
end
finalized?() click to toggle source
# File lib/praxis/finalizable.rb, line 21
def finalized?
  @finalized
end
inherited(base) click to toggle source
# File lib/praxis/finalizable.rb, line 11
def inherited(base)
  @finalizable << base
  base.instance_variable_set(:@finalizable, @finalizable)
  base.instance_variable_set(:@finalized, false)
end