Module: Nucleon::Gems

Defined in:
lib/core/gems.rb

Constant Summary collapse

@@core =

nil
@@gems =
{}
@@gateways =
[]

Class Method Summary collapse

Class Method Details

.coreObject




20
21
22
# File 'lib/core/gems.rb', line 20

def self.core
  @@core
end

.each_gem(&block) ⇒ Object


Utilities



99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
# File 'lib/core/gems.rb', line 99

def self.each_gem(&block)
  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|
        block.call(spec)
      end
    else
      logger.debug("Using bundler or Gem specification without latest_specs")
      Gem.loaded_specs.each do |name, spec|
        block.call(spec)
      end
    end
  end
end

.exist?(*names) ⇒ Boolean


Returns:

  • (Boolean)


117
118
119
120
121
122
123
# File 'lib/core/gems.rb', line 117

def self.exist?(*names)
  checks = Hash[names.map{|name| [ name.to_s, true ] }]
  each_gem do |spec|
    checks.delete(spec.name.to_s)
  end
  checks.empty? ? true : false
end

.gateway(name) ⇒ Object




26
27
28
29
30
# File 'lib/core/gems.rb', line 26

def self.gateway(name)
  unless @@gateways.include?(name.to_s)
    @@gateways << name.to_s
  end
end

.loggerObject


Gem interface



14
15
16
# File 'lib/core/gems.rb', line 14

def self.logger
  Core.logger
end

.register(reset = false, loaded = []) ⇒ Object




40
41
42
43
44
45
46
47
48
49
# File 'lib/core/gems.rb', line 40

def self.register(reset = false, loaded = [])
  if reset || Util::Data.empty?(@@gems)
    logger.info("Registering external gem defined Nucleon plugins at #{Time.now}")

    each_gem do |spec|
      register_gem(spec, loaded)
    end
  end
  @@gems
end

.register_gem(spec, loaded = []) ⇒ Object




53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# File 'lib/core/gems.rb', line 53

def self.register_gem(spec, loaded = [])
  name      = spec.name.to_sym
  base_path = File.join(spec.full_gem_path, 'lib')
  loaded    = loaded.collect {|item| item.to_sym }

  if name == :nucleon
    logger.debug("Setting Nucleon core gemspec")
    @@core       = spec
    @@gems[name] = {
      :spec       => spec,
      :base_path  => base_path,
      :namespaces => [ :nucleon ]
    }
  else
    Manager.connection.register(base_path) do |data|
      namespace   = data[:namespace]
      plugin_path = data[:directory]

      unless @@gems.has_key?(name)
        logger.info("Registering gem #{name} at #{plugin_path} at #{Time.now}")

        unless @@gateways.include?(name.to_s) || loaded.include?(name)
          base_loader = File.join(base_path, "#{name}_base.rb")
          loader      = File.join(base_path, "#{name}.rb")

          if File.exists?(base_loader)
            require base_loader
          elsif File.exists?(loader)
            require loader
          end
        end
      end

      @@gems[name] = {
        :spec       => spec,
        :base_path  => base_path,
        :namespaces => []
      }
      @@gems[name][:namespaces] << namespace unless @@gems[name][:namespaces].include?(namespace)
    end
  end
end

.registeredObject




34
35
36
# File 'lib/core/gems.rb', line 34

def self.registered
  @@gems
end

.spec(name) ⇒ Object




141
142
143
144
145
# File 'lib/core/gems.rb', line 141

def self.spec(name)
  results = specs(name)
  return results[0] unless results.empty?
  nil
end

.specs(*names) ⇒ Object




127
128
129
130
131
132
133
134
135
136
137
# File 'lib/core/gems.rb', line 127

def self.specs(*names)
  checks = Hash[names.map{|name| [ name.to_s, true ] }]
  specs  = []

  each_gem do |spec|
    if checks.has_key?(spec.name.to_s)
      specs << spec
    end
  end
  specs
end