class MetaCommit::Container
Constants
- BUILTIN_EXTENSION
Public Class Methods
new()
click to toggle source
Calls superclass method
# File lib/meta_commit/container.rb, line 8 def initialize super register :parser_classes, [] register :diff_classes, [] end
Public Instance Methods
boot(config_store)
click to toggle source
@param [MetaCommit::ConfigStore] config_store @return [MetaCommit::Container]
# File lib/meta_commit/container.rb, line 16 def boot(config_store) load_packages(config_store.get(:extensions)) register :diff_factory, MetaCommit::Factories::DiffFactory.new(self[:diff_classes]) register :parser_factory, MetaCommit::Factories::ParserFactory.new(self[:parser_classes]) register :parse_command, MetaCommit::Services::Parse.new(self[:parser_factory]) register :contextual_ast_node_factory, MetaCommit::Factories::ContextualAstNodeFactory.new self end
Protected Instance Methods
camelize(extension_name)
click to toggle source
@param [String] extension_name @return [String]
# File lib/meta_commit/container.rb, line 79 def camelize(extension_name) return extension_name.slice(0, 1).capitalize + extension_name.slice(1..-1) unless extension_name.include?('_') # capitalize only first letter if name is not in snake case extension_name.split('_').collect(&:capitalize).join end
extension_class(extension)
click to toggle source
@param [String] extension name @return [Class] extension class
# File lib/meta_commit/container.rb, line 71 def extension_class(extension) "MetaCommit::Extension::#{extension}::Locator".split('::').inject(Object) {|o, c| o.const_get(c)} end
load_builtin_extension()
click to toggle source
# File lib/meta_commit/container.rb, line 47 def load_builtin_extension require 'meta_commit/extensions/builtin' extension = extension_class(camelize(without_extension_prefix('builtin'))).new self[:parser_classes].concat(extension.parsers) self[:diff_classes].concat(extension.diffs) end
load_packages(extensions_to_load)
click to toggle source
@param [Array<String>] extensions_to_load
# File lib/meta_commit/container.rb, line 28 def load_packages(extensions_to_load) # @TODO refactor so it search in GEM_HOME dir (?) required_extensions(extensions_to_load).each do |gem| gem.require_paths.each do |path| gem_source_path = File.join(gem.full_gem_path, path) $LOAD_PATH.unshift gem_source_path require gem.name end extension = extension_class(camelize(without_extension_prefix(gem.name))).new self[:parser_classes].concat(extension.parsers) self[:diff_classes].concat(extension.diffs) end load_builtin_extension if extensions_to_load.include?(BUILTIN_EXTENSION) end
required_extensions(extensions_to_load)
click to toggle source
@param [Array<String>] extensions_to_load @return [Array<String>]
# File lib/meta_commit/container.rb, line 60 def required_extensions(extensions_to_load) extensions = Gem::Specification.find_all.select do |gem| gem.name =~ /^meta_commit_/ && gem.name != 'meta_commit_contracts' && extensions_to_load.include?(without_extension_prefix gem.name) end extensions.uniq {|gem| gem.name} end
without_extension_prefix(extension_name)
click to toggle source
@param [String] extension_name @return [String]
# File lib/meta_commit/container.rb, line 88 def without_extension_prefix(extension_name) extension_name.sub('meta_commit_', '') end