add property support, too
This commit is contained in:
parent
dbc98424d8
commit
9713be8dfd
|
@ -249,3 +249,17 @@ Feature: Gemfiles
|
||||||
# generated by penchant, environment: local
|
# generated by penchant, environment: local
|
||||||
gem "one", "1.2.3", {:path=>"../cats"}
|
gem "one", "1.2.3", {:path=>"../cats"}
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
Scenario: Define special expansions for properties
|
||||||
|
Given I have the file "Gemfile.penchant" with the content:
|
||||||
|
"""
|
||||||
|
defaults_for env(:local), :path => '../%s'
|
||||||
|
property(:github) { |name| { :git => "git://github.com/#{name}/%s.git" } }
|
||||||
|
gem 'one', :github => 'john'
|
||||||
|
"""
|
||||||
|
When I rebuild the Gemfile for "local" mode
|
||||||
|
Then the file "Gemfile" should have the following content:
|
||||||
|
"""
|
||||||
|
# generated by penchant, environment: local
|
||||||
|
gem "one", {:git=>"git://github.com/john/one.git"}
|
||||||
|
"""
|
||||||
|
|
|
@ -121,6 +121,7 @@ module Penchant
|
||||||
@available_environments = []
|
@available_environments = []
|
||||||
@defined_git_repos = []
|
@defined_git_repos = []
|
||||||
@defaults = {}
|
@defaults = {}
|
||||||
|
@properties = {}
|
||||||
|
|
||||||
@_current_env_defaults = {}
|
@_current_env_defaults = {}
|
||||||
end
|
end
|
||||||
|
@ -150,6 +151,10 @@ module Penchant
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def property(name, &block)
|
||||||
|
@properties[name] = block
|
||||||
|
end
|
||||||
|
|
||||||
def for_environment?(envs)
|
def for_environment?(envs)
|
||||||
envs.include?(environment) || environment == ANY_ENVIRONMENT
|
envs.include?(environment) || environment == ANY_ENVIRONMENT
|
||||||
end
|
end
|
||||||
|
@ -192,13 +197,25 @@ module Penchant
|
||||||
end
|
end
|
||||||
|
|
||||||
def process_options(gem_name, template = {})
|
def process_options(gem_name, template = {})
|
||||||
Hash[
|
properties = {}
|
||||||
_defaults_for(gem_name).dup.merge(template).collect { |key, value|
|
|
||||||
|
property_stack = _defaults_for(gem_name).dup.merge(template).to_a
|
||||||
|
|
||||||
|
while !property_stack.empty?
|
||||||
|
key, value = property_stack.shift
|
||||||
|
|
||||||
|
if @properties[key]
|
||||||
|
@properties[key].call(*([ value ].flatten)).each do |k, v|
|
||||||
|
property_stack.push([ k, v ])
|
||||||
|
end
|
||||||
|
else
|
||||||
value = value % gem_name if value.respond_to?(:%)
|
value = value % gem_name if value.respond_to?(:%)
|
||||||
|
|
||||||
[ key, value ]
|
properties[key] = value
|
||||||
}.sort
|
end
|
||||||
]
|
end
|
||||||
|
|
||||||
|
Hash[properties.sort]
|
||||||
end
|
end
|
||||||
|
|
||||||
def _defaults_for(gem_name)
|
def _defaults_for(gem_name)
|
||||||
|
|
Loading…
Reference in New Issue