more direct ingetration stuff
This commit is contained in:
parent
8fac9351ce
commit
5e1c05b85f
10
bin/penchant
10
bin/penchant
@ -2,8 +2,9 @@
|
||||
|
||||
require 'rubygems'
|
||||
require 'thor'
|
||||
require 'penchant'
|
||||
|
||||
class Penchant < Thor
|
||||
class PenchantCLI < Thor
|
||||
include Thor::Actions
|
||||
source_root File.expand_path('../..', __FILE__)
|
||||
|
||||
@ -13,6 +14,11 @@ class Penchant < Thor
|
||||
directory 'template/script', options[:dir]
|
||||
Dir[File.join(options[:dir], '**/*')].each { |file| File.chmod(0755, file) }
|
||||
end
|
||||
|
||||
desc "gemfile ENV", "Switch the gemfile environment"
|
||||
def gemfile(env)
|
||||
Penchant::Gemfile.do_full_env_switch!(env)
|
||||
end
|
||||
end
|
||||
|
||||
Penchant.start
|
||||
PenchantCLI.start
|
||||
|
@ -1,8 +1,23 @@
|
||||
require 'erb'
|
||||
|
||||
module Penchant
|
||||
class Gemfile
|
||||
attr_reader :path
|
||||
|
||||
def initialize(path)
|
||||
class << self
|
||||
def do_full_env_switch!(env)
|
||||
gemfile = Penchant::Gemfile.new
|
||||
if !gemfile.has_gemfile_erb?
|
||||
puts "Not using Gemfile.erb, exiting."
|
||||
return false
|
||||
end
|
||||
|
||||
gemfile.switch_to!(env)
|
||||
system %{bundle}
|
||||
end
|
||||
end
|
||||
|
||||
def initialize(path = Dir.pwd)
|
||||
@path = path
|
||||
end
|
||||
|
||||
@ -26,10 +41,25 @@ module Penchant
|
||||
File.readlines(gemfile_path).first.strip[%r{environment: (.*)}, 1]
|
||||
end
|
||||
|
||||
def switch_to!(gemfile_env)
|
||||
@env = gemfile_env
|
||||
template = File.read(gemfile_erb_path)
|
||||
|
||||
File.open(gemfile_path, 'wb') do |fh|
|
||||
fh.puts "# generated by penchant, environment: #{@env}"
|
||||
|
||||
fh.print ERB.new(template).result(binding)
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
def file_in_path(file)
|
||||
File.join(@path, file)
|
||||
end
|
||||
|
||||
def env(check, &block)
|
||||
instance_eval(&block) if check.to_s == @env.to_s
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -49,15 +49,51 @@ GEMFILE
|
||||
its(:environment) { should == environment }
|
||||
end
|
||||
end
|
||||
|
||||
describe '#switch_to!' do
|
||||
it 'should raise an exception' do
|
||||
expect { subject.switch_to!(:whatever) }.to raise_error(Errno::ENOENT)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'with gemfile.erb' do
|
||||
let(:erb_data) { 'whatever' }
|
||||
|
||||
before do
|
||||
write_file(gemfile_erb_path) { "whatever" }
|
||||
write_file(gemfile_erb_path) { erb_data }
|
||||
end
|
||||
|
||||
it { should_not have_gemfile }
|
||||
it { should have_gemfile_erb }
|
||||
|
||||
describe '#switch_to!' do
|
||||
let(:erb_data) { <<-ERB }
|
||||
<% env :test do %>
|
||||
test
|
||||
<% end %>
|
||||
|
||||
<% env :not do %>
|
||||
not
|
||||
<% end %>
|
||||
|
||||
all
|
||||
ERB
|
||||
|
||||
it 'should render test data' do
|
||||
subject.switch_to!(:test)
|
||||
|
||||
File.read('Gemfile').should include('test')
|
||||
File.read('Gemfile').should include('all')
|
||||
end
|
||||
|
||||
it 'should not render test data' do
|
||||
subject.switch_to!(:not)
|
||||
|
||||
File.read('Gemfile').should include('not')
|
||||
File.read('Gemfile').should include('all')
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -1,16 +1,11 @@
|
||||
#!/usr/bin/env ruby
|
||||
|
||||
if !File.file?('Gemfile.erb')
|
||||
puts "Not using Gemfile.erb, exiting."
|
||||
require 'rubygems'
|
||||
require 'penchant'
|
||||
|
||||
if Penchant::Gemfile.do_full_env_switch!(ARGV[0])
|
||||
puts "Gemfile switched to #{ARGV[0]}"
|
||||
else
|
||||
exit 0
|
||||
end
|
||||
|
||||
require 'erb'
|
||||
|
||||
env = ARGV[0]
|
||||
|
||||
File.open('Gemfile', 'w') { |fh| fh.print ERB.new(File.read('Gemfile.erb')).result(binding) }
|
||||
system %{bundle}
|
||||
|
||||
puts "Gemfile switched to #{env}"
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user