class Kamaze::Project::ToolsProvider
Tools provider
Tools are instantiated on demand, each demand generates a fresh new tool instance, avoiding risk to reuse a previous altered version of a tool.
Sample of use:
“`ruby project.tools.fetch(:licenser).process do |licenser|
process.license = project.version.license_header process.patterns = ['bin/*', 'lib/**/**.rb'] process.output = STDOUT
end “`
Attributes
Base items, before (if needed) resolution.
@return [Hash]
@return [Resolver]
Public Class Methods
Default tools
Tools default values can be “Class“ or “String“ (or “Symbol“), when value is not a “Class“, it is resolved using “inflector“
@return [Hash]
# File lib/kamaze/project/tools_provider.rb, line 40 def defaults items.freeze end
@param [Hash] items
# File lib/kamaze/project/tools_provider.rb, line 61 def initialize(items = {}) @items = Hash[self.class.defaults].merge(items) @resolver = Resolver.new end
Protected Class Methods
Get items
Items are collected from a YAML file.
@return [Hash]
# File lib/kamaze/project/tools_provider.rb, line 51 def items "#{__dir__}/resources/config/tools.yml" .yield_self { |file| YAML.load_file(file) } .yield_self do |defaults| defaults.transform_keys(&:to_sym) end end
Public Instance Methods
Get a fresh instance with given name
@param [Symbol|String] name @return [Object|nil]
# File lib/kamaze/project/tools_provider.rb, line 110 def [](name) name = name.to_sym return nil unless member?(name) self.items.fetch(name).yield_self do |klass| resolver.classify(klass).new end end
Associates the value given by value with the given key.
@param [String|Symbol] name @param [Class] value
# File lib/kamaze/project/tools_provider.rb, line 78 def []=(name, value) value.tap do { name => value }.tap { |h| merge!(h) } end end
Get a fresh instance with given name
@param [Symbol|String] name @return [Object] @raise [KeyError]
# File lib/kamaze/project/tools_provider.rb, line 100 def fetch(name) raise KeyError, "key not found: :#{name}" unless member?(name) self[name] end
Prevents further modifications.
See also “Object#frozen?“.
@return [self]
# File lib/kamaze/project/tools_provider.rb, line 89 def freeze super.tap do @items.freeze end end
Returns “true“ if the given key is present
@param [Symbol|String] name @return [Boolean]
# File lib/kamaze/project/tools_provider.rb, line 136 def member?(name) self.items.member?(name.to_sym) end
@param [Hash] items @return [self]
# File lib/kamaze/project/tools_provider.rb, line 68 def merge!(items) self.tap do items.transform_keys(&:to_sym).tap { |h| @items.merge!(h) } end end
Get all instances at once
@return [Hash]
# File lib/kamaze/project/tools_provider.rb, line 125 def to_h self.items .map { |k, v| [k, resolver.classify(v)] } .yield_self { |results| Hash[results] } .yield_self { |items| items.transform_values(&:new) } end