module Nucleon::Gems

Public Class Methods

core() click to toggle source
   # File lib/core/gems.rb
20 def self.core
21   @@core
22 end
each_gem(&block) click to toggle source
    # File lib/core/gems.rb
 99 def self.each_gem(&block)
100   if defined?(Gem)
101     if ! defined?(Bundler) && Gem::Specification.respond_to?(:latest_specs)
102       logger.debug("Not using bundler")
103       Gem::Specification.latest_specs(true).each do |spec|
104         block.call(spec)
105       end
106     else
107       logger.debug("Using bundler or Gem specification without latest_specs")
108       Gem.loaded_specs.each do |name, spec|
109         block.call(spec)
110       end
111     end
112   end
113 end
exist?(*names) click to toggle source
    # File lib/core/gems.rb
117 def self.exist?(*names)
118   checks = Hash[names.map{|name| [ name.to_s, true ] }]
119   each_gem do |spec|
120     checks.delete(spec.name.to_s)
121   end
122   checks.empty? ? true : false
123 end
gateway(name) click to toggle source
   # File lib/core/gems.rb
26 def self.gateway(name)
27   unless @@gateways.include?(name.to_s)
28     @@gateways << name.to_s
29   end
30 end
logger() click to toggle source
   # File lib/core/gems.rb
14 def self.logger
15   Core.logger
16 end
register(reset = false, loaded = []) click to toggle source
   # File lib/core/gems.rb
40 def self.register(reset = false, loaded = [])
41   if reset || Util::Data.empty?(@@gems)
42     logger.info("Registering external gem defined Nucleon plugins at #{Time.now}")
43 
44     each_gem do |spec|
45       register_gem(spec, loaded)
46     end
47   end
48   @@gems
49 end
register_gem(spec, loaded = []) click to toggle source
   # File lib/core/gems.rb
53 def self.register_gem(spec, loaded = [])
54   name      = spec.name.to_sym
55   base_path = File.join(spec.full_gem_path, 'lib')
56   loaded    = loaded.collect {|item| item.to_sym }
57 
58   if name == :nucleon
59     logger.debug("Setting Nucleon core gemspec")
60     @@core       = spec
61     @@gems[name] = {
62       :spec       => spec,
63       :base_path  => base_path,
64       :namespaces => [ :nucleon ]
65     }
66   else
67     Manager.connection.register(base_path) do |data|
68       namespace   = data[:namespace]
69       plugin_path = data[:directory]
70 
71       unless @@gems.has_key?(name)
72         logger.info("Registering gem #{name} at #{plugin_path} at #{Time.now}")
73 
74         unless @@gateways.include?(name.to_s) || loaded.include?(name)
75           base_loader = File.join(base_path, "#{name}_base.rb")
76           loader      = File.join(base_path, "#{name}.rb")
77 
78           if File.exists?(base_loader)
79             require base_loader
80           elsif File.exists?(loader)
81             require loader
82           end
83         end
84       end
85 
86       @@gems[name] = {
87         :spec       => spec,
88         :base_path  => base_path,
89         :namespaces => []
90       }
91       @@gems[name][:namespaces] << namespace unless @@gems[name][:namespaces].include?(namespace)
92     end
93   end
94 end
registered() click to toggle source
   # File lib/core/gems.rb
34 def self.registered
35   @@gems
36 end
spec(name) click to toggle source
    # File lib/core/gems.rb
141 def self.spec(name)
142   results = specs(name)
143   return results[0] unless results.empty?
144   nil
145 end
specs(*names) click to toggle source
    # File lib/core/gems.rb
127 def self.specs(*names)
128   checks = Hash[names.map{|name| [ name.to_s, true ] }]
129   specs  = []
130 
131   each_gem do |spec|
132     if checks.has_key?(spec.name.to_s)
133       specs << spec
134     end
135   end
136   specs
137 end