Class: Adhearsion::Components::ComponentManager::ComponentDefinitionContainer

Inherits:
Module
  • Object
show all
Defined in:
lib/adhearsion/component_manager.rb

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Module

#relationships

Constructor Details

#initialize(&block) ⇒ ComponentDefinitionContainer

Returns a new instance of ComponentDefinitionContainer.



176
177
178
179
180
181
182
183
184
185
186
187
188
189
# File 'lib/adhearsion/component_manager.rb', line 176

def initialize(&block)
  # Hide our instance variables in the singleton class
   = {}
  metaclass.send(:instance_variable_set, :@metadata, )

  [:scopes] = ComponentManager::SCOPE_NAMES.inject({}) do |scopes, name|
    scopes[name] = []
    scopes
  end

  super

  meta_def(:initialize) { raise "This object has already been instantiated. Are you sure you didn't mean initialization()?" }
end

Class Method Details

.get_gem_path_for(filename) ⇒ Object



219
220
221
222
223
224
225
226
227
# File 'lib/adhearsion/component_manager.rb', line 219

def get_gem_path_for(filename)
  # Look for component files provided by rubygems
  spec = Gem.searcher.find(filename)
  return nil if spec.nil?
  File.join(spec.full_gem_path, spec.require_path, filename)
rescue NameError
  # In case Rubygems are not available
  nil
end

.get_system_path_for(filename) ⇒ Object



229
230
231
232
233
234
235
236
237
# File 'lib/adhearsion/component_manager.rb', line 229

def get_system_path_for(filename)
  $:.each do |path|
    filepath = File.join(path, filename)
    return filepath if File.exists?(filepath)
  end

  # Not found? Return nil
  return nil
end

.load_code(code) ⇒ Object



142
143
144
145
146
# File 'lib/adhearsion/component_manager.rb', line 142

def load_code(code)
  new.tap do |instance|
    instance.module_eval code
  end
end

.load_file(filename) ⇒ Object



148
149
150
151
152
# File 'lib/adhearsion/component_manager.rb', line 148

def load_file(filename)
  new.tap do |instance|
    instance.module_eval File.read(filename), filename
  end
end

.method_added(method_name) ⇒ Object



214
215
216
217
# File 'lib/adhearsion/component_manager.rb', line 214

def self.method_added(method_name)
  @methods ||= []
  @methods << method_name
end

.require(filename) ⇒ Object



154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
# File 'lib/adhearsion/component_manager.rb', line 154

def require(filename)
  filename = filename + ".rb" if !(filename =~ /\.rb$/)
  begin
    # Try loading the exact filename first
    load_file(filename)
  rescue LoadError, Errno::ENOENT
  end

  # Next try Rubygems
  filepath = get_gem_path_for(filename)
  return load_file(filepath) if !filepath.nil?

  # Finally try the system search path
  filepath = get_system_path_for(filename)
  return load_file(filepath) if !filepath.nil?

  # Raise a LoadError exception if the file is still not found
  raise LoadError "File not found: #{filename}"
end

Instance Method Details

#initialization(&block) ⇒ Object Also known as: initialisation



200
201
202
203
204
205
206
207
208
# File 'lib/adhearsion/component_manager.rb', line 200

def initialization(&block)
  # Raise an exception if the initialization block has already been set
   = metaclass.send(:instance_variable_get, :@metadata)
  if [:initialization_block]
    raise "You should only have one initialization() block!"
  else
    [:initialization_block] = block
  end
end

#methods_for(*scopes, &block) ⇒ Object

Raises:

  • (ArgumentError)


191
192
193
194
195
196
197
198
# File 'lib/adhearsion/component_manager.rb', line 191

def methods_for(*scopes, &block)
  raise ArgumentError if scopes.empty?

  ComponentManager.scopes_valid? scopes

   = metaclass.send(:instance_variable_get, :@metadata)
  scopes.each { |scope| [:scopes][scope] << block }
end