Sha256: c57b1da992bb0b43650cfdb3c80b156c579ec4b369d3fa618763912b7190a295

Contents?: true

Size: 1.42 KB

Versions: 4

Compression:

Stored size: 1.42 KB

Contents

module Kernel
  
  def boot_load(name, *dependencies, &block)
    Mack::BootLoader.instance.add(name, *dependencies, &block)
  end
  
end


module Mack
  class BootLoader
    include Singleton
    
    attr_accessor :sequences
    
    def initialize
      self.sequences = {}
    end
    
    def add(name, *dependencies, &block)
      self.sequences[name.to_sym] = Mack::BootLoader::Loader.new(name.to_sym, *dependencies, &block)
    end
    
    def self.run(*args)
      args.each do |a|
        begin
          Mack::BootLoader.instance.sequences[a.to_sym].run
        rescue Exception => e
          raise e
        end
      end
    end
    
    def self.run!(*args)
      args.each do |a|
        Mack::BootLoader.instance.sequences[a.to_sym].run!
      end
    end
    
    private
    class Loader
      
      attr_accessor :name
      attr_accessor :dependencies
      attr_accessor :sequence
      
      def initialize(name, *dependencies, &block)
        self.name = name.to_sym
        self.dependencies = dependencies
        self.sequence = block
        @run = false
      end
      
      def run
        return if @run
        self.dependencies.each do |dep|
          Mack::BootLoader.run(dep)
        end
        self.sequence.call
        @run = true
      end
      
      def run!
        self.dependencies.each do |dep|
          Mack::BootLoader.run!(dep)
        end
        self.sequence.call
      end
      
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
mack-0.8.0.100 lib/mack/initialization/boot_loader.rb
mack-0.8.0.101 lib/mack/initialization/boot_loader.rb
mack-0.8.0.2 lib/mack/initialization/boot_loader.rb
mack-0.8.0 lib/mack/initialization/boot_loader.rb