Sha256: b6e27dd3af956f33e91a7871a54838145e0e86eba76f563a710fb7facbae0a8a

Contents?: true

Size: 1.8 KB

Versions: 1

Compression:

Stored size: 1.8 KB

Contents

module Nucleon
module Gems
  
  #-----------------------------------------------------------------------------
  
  @@core = nil
  @@gems = {}
  
  #-----------------------------------------------------------------------------
  # Gem interface
  
  def self.logger
    Core.logger
  end
  
  #---
    
  def self.core
    @@core
  end
  
  #---
  
  def self.registered
    @@gems
  end
  
  #---
  
  def self.register(reset = false)
    if reset || Util::Data.empty?(@@gems)
      logger.info("Registering external gem defined Nucleon plugins at #{Time.now}")
      
      if defined?(Gem) 
        if ! defined?(Bundler) && Gem::Specification.respond_to?(:latest_specs)
          logger.debug("Not using bundler")
          Gem::Specification.latest_specs(true).each do |spec|
            register_gem(spec)
          end
        else
          logger.debug("Using bundler or Gem specification without latest_specs")
          Gem.loaded_specs.each do |name, spec|
            register_gem(spec)
          end     
        end
      end
    end
    @@gems
  end
  
  #---
  
  def self.register_gem(spec)
    name      = spec.name
    base_path = File.join(spec.full_gem_path, 'lib')
    
    Manager.connection.register(base_path) do |data|      
      namespace   = data[:namespace]
      plugin_path = data[:directory]
      
      logger.info("Registering gem #{name} at #{plugin_path} at #{Time.now}")
      
      unless @@gems.has_key?(name)
        @@gems[name] = { 
          :spec       => spec, 
          :base_path  => base_path, 
          :namespaces => [] 
        }
      end 
      @@gems[name][:namespaces] << namespace unless @@gems[name][:namespaces].include?(namespace)
      
      if name == 'nucleon'
        logger.debug("Setting Nucleon core gemspec")
        @@core = spec
      end  
    end
  end
end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
nucleon-0.1.1 lib/core/gems.rb