add opposite env feature for less repetition
This commit is contained in:
parent
d5403f1139
commit
635e07a112
@ -73,6 +73,15 @@ no_deployment do
|
|||||||
gems dev_gems, :github => 'johnbintz'
|
gems dev_gems, :github => 'johnbintz'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# an even shorter way to specify environments!
|
||||||
|
# in remote env, expands to:
|
||||||
|
# gem 'bullseye', :git => 'git://github.com/johnbintz/bullseye.git'
|
||||||
|
# in local env, expands to:
|
||||||
|
# gem 'bullseye', :path => '../bullseye'
|
||||||
|
env :remote, :opposite => :local do
|
||||||
|
gem 'bullseye', :github => 'johnbintz'
|
||||||
|
end
|
||||||
|
|
||||||
# only expanded on Mac OS X
|
# only expanded on Mac OS X
|
||||||
os :darwin do
|
os :darwin do
|
||||||
gem 'rb-fsevent'
|
gem 'rb-fsevent'
|
||||||
|
@ -235,6 +235,34 @@ Feature: Gemfiles
|
|||||||
gem "one", "1.2.3", {:path=>"../one"}
|
gem "one", "1.2.3", {:path=>"../one"}
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
Scenario: Create opposite environment gem assumptions to cut down on repetition
|
||||||
|
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" } }
|
||||||
|
|
||||||
|
env :remote, :opposite => :local do
|
||||||
|
gem 'one', :github => 'johnbintz', :require => nil
|
||||||
|
end
|
||||||
|
env :local, :opposite => :remote do
|
||||||
|
gem 'two', :path => '../%s', :require => nil
|
||||||
|
end
|
||||||
|
"""
|
||||||
|
When I rebuild the Gemfile for "local" mode
|
||||||
|
Then the file "Gemfile" should have the following content:
|
||||||
|
"""
|
||||||
|
# generated by penchant, environment: local
|
||||||
|
gem "one", {:path=>"../one", :require=>nil}
|
||||||
|
gem "two", {:path=>"../two", :require=>nil}
|
||||||
|
"""
|
||||||
|
When I rebuild the Gemfile for "remote" mode
|
||||||
|
Then the file "Gemfile" should have the following content:
|
||||||
|
"""
|
||||||
|
# generated by penchant, environment: remote
|
||||||
|
gem "one", {:git=>"git://github.com/johnbintz/one.git", :require=>nil}
|
||||||
|
gem "two", {:require=>nil}
|
||||||
|
"""
|
||||||
|
|
||||||
Scenario: Override defaults for an environment
|
Scenario: Override defaults for an environment
|
||||||
Given I have the file "Gemfile.penchant" with the content:
|
Given I have the file "Gemfile.penchant" with the content:
|
||||||
"""
|
"""
|
||||||
|
@ -138,6 +138,9 @@ module Penchant
|
|||||||
end
|
end
|
||||||
|
|
||||||
def env(*args)
|
def env(*args)
|
||||||
|
options = {}
|
||||||
|
options = args.pop if args.last.kind_of?(::Hash)
|
||||||
|
|
||||||
@available_environments += args
|
@available_environments += args
|
||||||
|
|
||||||
if block_given?
|
if block_given?
|
||||||
@ -145,6 +148,16 @@ module Penchant
|
|||||||
@_current_env_defaults = _defaults_for(Env.new(environment))
|
@_current_env_defaults = _defaults_for(Env.new(environment))
|
||||||
yield
|
yield
|
||||||
@_current_env_defaults = {}
|
@_current_env_defaults = {}
|
||||||
|
else
|
||||||
|
if options[:opposite]
|
||||||
|
if for_environment?([ options[:opposite] ].flatten)
|
||||||
|
@_current_env_defaults = _defaults_for(Env.new(environment))
|
||||||
|
@_strip_pathing_options = true
|
||||||
|
yield
|
||||||
|
@_strip_pathing_options = false
|
||||||
|
@_current_env_defaults = {}
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
Penchant::Gemfile::Env.new(args.shift)
|
Penchant::Gemfile::Env.new(args.shift)
|
||||||
@ -203,7 +216,22 @@ module Penchant
|
|||||||
def process_options(gem_name, template = {})
|
def process_options(gem_name, template = {})
|
||||||
properties = {}
|
properties = {}
|
||||||
|
|
||||||
property_stack = _defaults_for(gem_name).dup.merge(template).to_a
|
property_stack = template.to_a
|
||||||
|
|
||||||
|
original_properties = process_option_stack(gem_name, property_stack)
|
||||||
|
|
||||||
|
if @_strip_pathing_options
|
||||||
|
[ :git, :branch, :path ].each { |key| original_properties.delete(key) }
|
||||||
|
end
|
||||||
|
|
||||||
|
properties = process_option_stack(gem_name, _defaults_for(gem_name).to_a).merge(original_properties)
|
||||||
|
|
||||||
|
Hash[properties.sort]
|
||||||
|
end
|
||||||
|
|
||||||
|
def process_option_stack(gem_name, stack)
|
||||||
|
property_stack = stack.dup
|
||||||
|
properties = {}
|
||||||
|
|
||||||
while !property_stack.empty?
|
while !property_stack.empty?
|
||||||
key, value = property_stack.shift
|
key, value = property_stack.shift
|
||||||
@ -227,8 +255,8 @@ module Penchant
|
|||||||
properties[key] = value
|
properties[key] = value
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
Hash[properties.sort]
|
properties
|
||||||
end
|
end
|
||||||
|
|
||||||
def _defaults_for(gem_name)
|
def _defaults_for(gem_name)
|
||||||
@ -322,12 +350,13 @@ module Penchant
|
|||||||
|
|
||||||
args = [ gem_name.first ]
|
args = [ gem_name.first ]
|
||||||
args << version if version
|
args << version if version
|
||||||
args << options if !options.empty?
|
|
||||||
|
|
||||||
if options[:git]
|
if options[:git]
|
||||||
@defined_git_repos << Penchant::Repo.new(options[:git])
|
@defined_git_repos << Penchant::Repo.new(options[:git])
|
||||||
end
|
end
|
||||||
|
|
||||||
|
args << options if !options.empty?
|
||||||
|
|
||||||
@output << %{gem #{args_to_string(args)}}
|
@output << %{gem #{args_to_string(args)}}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
module Penchant
|
module Penchant
|
||||||
VERSION = "0.2.20"
|
VERSION = "0.2.21"
|
||||||
end
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user