Class: AlpacaBuildTool::Configuration
- Inherits:
-
Object
- Object
- AlpacaBuildTool::Configuration
- Defined in:
- lib/alpacabuildtool/configuration.rb
Overview
Cofniguration provides methods to retrieve from default, global and local configuration scopes and to save configuration into global or local scope
- default configuration (<GEM>/lib/data/.alpaca.conf)
- global configuration (~/.alpaca.conf)
- local configuration (<SOLUTION_FOLDER>/.alpaca.conf)
Constant Summary collapse
- DATA_DIR =
Used to find default configuration
File.join(File.(File.dirname(__FILE__)), 'data')
- DEFAULT_CONFIGURATION =
Default configuration file with absolute path
File.join(DATA_DIR, '.alpaca.conf')
- GLOBAL_CONFIGURATION =
Global configuration file with absolute path
File.('~/.alpaca.conf')
- LOCAL_CONFIGURATION_PROPERTY =
Use to define relative path to local configuration from solution
'local_configuration'
- SOLUTION_NAME_VARIABLE =
Use in configuration values and in result it will be replaced with solution name
'#{solution_name}'
- SOLUTION_DIR_VARIABLE =
Use in configuration values and in result it will be replaced with solution directory path
'#{solution_directory}'
- CLEAN_CONFIGURATION_KEY =
Use this key to clean configuration entry
#>global configuration: # MSBuild: # options: # target: ["Clean", "Rebuild"] # verbosity: "minimal" # nologo: true #>local configuration: # MSBuild: # options: # clean_configuration: true # nologo: true #>results: # MSBuild: # options: # nologo: true
'clean_configuration'
Class Method Summary collapse
-
.clean(hash) ⇒ Object
Removes clean_configuration entry for the hash.
-
.clean?(hash) ⇒ Boolean
Check if hash has clean_configuration entry.
-
.merge(first_config, second_config) ⇒ Object
Merges hashes recursively with higher priority for second hash Also second config can contain.
-
.set(properties) ⇒ Object
Saves list of properties into global scope configuration.
-
.set_property(config, property) ⇒ Object
Set one property for existing configuration.
Instance Method Summary collapse
-
#[](entry) ⇒ Object
Returns hash with configuration for entry.
-
#initialize(solution) ⇒ Configuration
constructor
Creates instance of local configuration.
-
#set(properties) ⇒ Object
Saves list of properties into local scope configuration.
Constructor Details
#initialize(solution) ⇒ Configuration
Creates instance of local configuration
solution
-
solution object to find configuration for
134 135 136 137 138 |
# File 'lib/alpacabuildtool/configuration.rb', line 134 def initialize(solution) local_config = load_local_configuration(solution.dir) @configuration = Configuration.merge(global_config, local_config) @configuration = detokenize(@configuration, solution) end |
Class Method Details
.clean(hash) ⇒ Object
Removes clean_configuration entry for the hash
hash
-
hash to be cleaned
117 118 119 120 |
# File 'lib/alpacabuildtool/configuration.rb', line 117 def self.clean(hash) hash.delete CLEAN_CONFIGURATION_KEY hash end |
.clean?(hash) ⇒ Boolean
Check if hash has clean_configuration entry
hash
-
hash to be verified
126 127 128 |
# File 'lib/alpacabuildtool/configuration.rb', line 126 def self.clean?(hash) hash.key? CLEAN_CONFIGURATION_KEY end |
.merge(first_config, second_config) ⇒ Object
Merges hashes recursively with higher priority for second hash Also second config can contain
clean_configuration: true
that will force to take only second configuration content for that configuration level
first_config
-
low priority configuration (hash)
second_config
-
high priority configuration
106 107 108 109 110 111 |
# File 'lib/alpacabuildtool/configuration.rb', line 106 def self.merge(first_config, second_config) return clean(second_config) if clean?(second_config) first_config.merge(second_config) do |_key, old_value, new_value| old_value.is_a?(Hash) ? merge(old_value, new_value) : new_value end end |
.set(properties) ⇒ Object
Saves list of properties into global scope configuration
properties
-
Array of properties ‘path.to.property=value’
65 66 67 68 69 70 71 |
# File 'lib/alpacabuildtool/configuration.rb', line 65 def self.set(properties) file = File. GLOBAL_CONFIGURATION File.new(file, 'w+').close unless File.exist? file config = YAML.load(File.open(file)) || {} properties.each { |property| set_property(config, property) } File.open(file, 'w+') { |f| f.write config.to_yaml } end |
.set_property(config, property) ⇒ Object
Set one property for existing configuration
config
-
hash to hold new property
property
-
property _node1.node2=value_
Configuration.set_propert(hash, 'node1.node2=value')
# will make hash['node1']['node2'] == value
# and create node1 or node2 if they do not exist there
82 83 84 85 86 87 88 89 90 91 92 |
# File 'lib/alpacabuildtool/configuration.rb', line 82 def self.set_property(config, property) name, value = property.split('=') nodes = name.split('.') tail = nodes.last current_node = config nodes.each do |node| current_node[node] ||= {} current_node[node] = value if node == tail current_node = current_node[node] end end |
Instance Method Details
#[](entry) ⇒ Object
Returns hash with configuration for entry
entry
-
entry name
157 158 159 |
# File 'lib/alpacabuildtool/configuration.rb', line 157 def [](entry) @configuration[entry] end |
#set(properties) ⇒ Object
Saves list of properties into local scope configuration
properties
-
Array of properties ‘path.to.property=value’
144 145 146 147 148 149 150 151 |
# File 'lib/alpacabuildtool/configuration.rb', line 144 def set(properties) File.new(@file, 'w+').close unless File.exist? @file config = YAML.load(File.open(@file)) || {} properties.each do |property| Configuration.set_property(config, property) end File.open(@file, 'w+') { |f| f.write config.to_yaml } end |