Class: Kamaze::Project::ToolsProvider
- Defined in:
- lib/kamaze/project/tools_provider.rb,
lib/kamaze/project/tools_provider/resolver.rb
Overview
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:
project.tools.fetch(:licenser).process do |licenser|
process.license = project.version.license_header
process.patterns = ['bin/*', 'lib/**/**.rb']
process.output = STDOUT
end
Defined Under Namespace
Classes: Resolver
Instance Attribute Summary collapse
-
#items ⇒ Hash
readonly
protected
Base items, before (if needed) resolution.
- #resolver ⇒ Resolver readonly protected
Class Method Summary collapse
-
.defaults ⇒ Hash
Default tools.
-
.items ⇒ Hash
protected
Get items.
Instance Method Summary collapse
-
#[](name) ⇒ Object|nil
Get a fresh instance with given name.
-
#[]=(name, value) ⇒ Object
Associates the value given by value with the given key.
-
#fetch(name) ⇒ Object
(also: #get)
Get a fresh instance with given name.
-
#freeze ⇒ self
Prevents further modifications.
-
#initialize(items = {}) ⇒ ToolsProvider
constructor
A new instance of ToolsProvider.
-
#member?(name) ⇒ Boolean
Returns
true
if the given key is present. - #merge!(items) ⇒ self
-
#to_h ⇒ Hash
Get all instances at once.
Constructor Details
#initialize(items = {}) ⇒ ToolsProvider
Returns a new instance of ToolsProvider.
61 62 63 64 |
# File 'lib/kamaze/project/tools_provider.rb', line 61 def initialize(items = {}) @items = Hash[self.class.defaults].merge(items) @resolver = Resolver.new end |
Instance Attribute Details
#items ⇒ Hash (readonly, protected)
Base items, before (if needed) resolution.
148 149 150 |
# File 'lib/kamaze/project/tools_provider.rb', line 148 def items @items end |
#resolver ⇒ Resolver (readonly, protected)
143 144 145 |
# File 'lib/kamaze/project/tools_provider.rb', line 143 def resolver @resolver end |
Class Method Details
.defaults ⇒ Hash
Default tools
Tools default values can be Class
or String
(or Symbol
),
when value is not a Class
, it is resolved using inflector
40 41 42 |
# File 'lib/kamaze/project/tools_provider.rb', line 40 def defaults items.freeze end |
.items ⇒ Hash (protected)
Get items
Items are collected from a YAML file.
51 52 53 54 55 56 57 |
# 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 |
Instance Method Details
#[](name) ⇒ Object|nil
Get a fresh instance with given name
110 111 112 113 114 115 116 117 118 |
# 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 |
#[]=(name, value) ⇒ Object
Associates the value given by value with the given key.
78 79 80 81 82 |
# File 'lib/kamaze/project/tools_provider.rb', line 78 def []=(name, value) value.tap do { name => value }.tap { |h| merge!(h) } end end |
#fetch(name) ⇒ Object Also known as: get
Get a fresh instance with given name
100 101 102 103 104 |
# File 'lib/kamaze/project/tools_provider.rb', line 100 def fetch(name) raise KeyError, "key not found: :#{name}" unless member?(name) self[name] end |
#freeze ⇒ self
Prevents further modifications.
See also Object#frozen?
.
89 90 91 92 93 |
# File 'lib/kamaze/project/tools_provider.rb', line 89 def freeze super.tap do @items.freeze end end |
#member?(name) ⇒ Boolean
Returns true
if the given key is present
136 137 138 |
# File 'lib/kamaze/project/tools_provider.rb', line 136 def member?(name) self.items.member?(name.to_sym) end |
#merge!(items) ⇒ self
68 69 70 71 72 |
# 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 |
#to_h ⇒ Hash
Get all instances at once
125 126 127 128 129 130 |
# 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 |