Skip to content

Commit

Permalink
Merge branch 'master' into rails
Browse files Browse the repository at this point in the history
  • Loading branch information
winton committed Dec 29, 2010
2 parents 40dca3c + 43db36d commit 5f45d78
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 71 deletions.
46 changes: 23 additions & 23 deletions lib/gem_template/gems.rb
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -6,28 +6,32 @@ module GemTemplate
module Gems module Gems
class <<self class <<self


attr_accessor :configs, :gemset, :gemsets, :gemspec, :testing, :versions, :warn attr_accessor :config, :gemset, :gemsets, :versions


Gems.configs = [ "#{File.expand_path('../../../', __FILE__)}/config/gemsets.yml" ] class SimpleStruct
Gems.testing = false
Gems.warn = true

class Gemspec
attr_accessor :hash attr_accessor :hash


def initialize(hash) def initialize(hash)
@hash = hash @hash = hash
@hash.each do |key, value| @hash.each do |key, value|
self.class.send(:define_method, key) { value } self.class.send(:define_method, key) { hash[key] }
self.class.send(:define_method, "#{key}=") { |v| hash[key] = v }
end end
end end
end end


Gems.config = SimpleStruct.new(
:gemsets => [ "#{File.expand_path('../../../', __FILE__)}/config/gemsets.yml" ],
:gemspec => "#{File.expand_path('../../../', __FILE__)}/config/gemspec.yml",
:testing => false,
:warn => true
)

def activate(*gems) def activate(*gems)
begin begin
require 'rubygems' if !defined?(::Gem) || @testing require 'rubygems' unless defined?(::Gem)
rescue LoadError rescue LoadError
puts "rubygems library could not be required" if @warn puts "rubygems library could not be required" if @config.warn
end end


self.gemset = :default unless defined?(@gemset) && @gemset self.gemset = :default unless defined?(@gemset) && @gemset
Expand All @@ -37,7 +41,7 @@ def activate(*gems)
if defined?(gem) if defined?(gem)
gem name.to_s, version gem name.to_s, version
else else
puts "#{name} #{"(#{version})" if version} failed to activate" if @warn puts "#{name} #{"(#{version})" if version} failed to activate" if @config.warn
end end
end end
end end
Expand All @@ -46,7 +50,7 @@ def gemset=(gemset)
if gemset if gemset
@gemset = gemset.to_sym @gemset = gemset.to_sym


@gemsets = @configs.reverse.collect { |config| @gemsets = @config.gemsets.reverse.collect { |config|
if config.is_a?(::String) if config.is_a?(::String)
YAML::load(File.read(config)) rescue {} YAML::load(File.read(config)) rescue {}
elsif config.is_a?(::Hash) elsif config.is_a?(::Hash)
Expand All @@ -56,7 +60,7 @@ def gemset=(gemset)
deep_merge(hash, symbolize_keys(config)) deep_merge(hash, symbolize_keys(config))
end end


@versions = @gemsets[@gemspec.name.to_sym].inject({}) do |hash, (key, value)| @versions = @gemsets[gemspec.name.to_sym].inject({}) do |hash, (key, value)|
if value.is_a?(::String) if value.is_a?(::String)
hash[key] = value hash[key] = value
elsif value.is_a?(::Hash) && key == @gemset elsif value.is_a?(::Hash) && key == @gemset
Expand All @@ -71,18 +75,14 @@ def gemset=(gemset)
end end
end end


def reload_gemspec def gemspec(reload=false)
data = if @gemspec && !reload
YAML::load( @gemspec
File.read( else
"#{File.expand_path('../../../', __FILE__)}/config/gemspec.yml" data = YAML::load(File.read(@config.gemspec)) rescue {}
) @gemspec = SimpleStruct.new(data)
) rescue {} end

@gemspec = Gemspec.new(data)
end end

Gems.reload_gemspec


private private


Expand Down
2 changes: 1 addition & 1 deletion spec/fixtures/gemsets.yml
Original file line number Original file line Diff line number Diff line change
@@ -1,4 +1,4 @@
gem_template: name:
rake: =0.8.7 rake: =0.8.7
default: default:
rspec: =1.3.1 rspec: =1.3.1
Expand Down
61 changes: 24 additions & 37 deletions spec/gem_template/gems_spec.rb
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -2,25 +2,25 @@


describe GemTemplate::Gems do describe GemTemplate::Gems do


describe :activate do before(:each) do
before(:each) do @old_config = GemTemplate::Gems.config
GemTemplate::Gems.configs = [
"#{$root}/spec/fixtures/gemsets.yml"
]
GemTemplate::Gems.gemset = nil
GemTemplate::Gems.testing = true
end


it "should warn if unable to require rubygems" do GemTemplate::Gems.config.gemspec = "#{$root}/spec/fixtures/gemspec.yml"
GemTemplate::Gems.stub!(:require) GemTemplate::Gems.config.gemsets = [
GemTemplate::Gems.should_receive(:require).with('rubygems').and_raise(LoadError) "#{$root}/spec/fixtures/gemsets.yml"
GemTemplate::Gems.stub!(:gem) ]
out = capture_stdout do GemTemplate::Gems.config.testing = true
GemTemplate::Gems.activate :rspec GemTemplate::Gems.config.warn = true
end
out.should =~ /rubygems library could not be required/
end


GemTemplate::Gems.gemspec true
GemTemplate::Gems.gemset = nil
end

after(:each) do
GemTemplate::Gems.config = @old_config
end

describe :activate do
it "should activate gems" do it "should activate gems" do
GemTemplate::Gems.stub!(:gem) GemTemplate::Gems.stub!(:gem)
GemTemplate::Gems.should_receive(:gem).with('rspec', '=1.3.1') GemTemplate::Gems.should_receive(:gem).with('rspec', '=1.3.1')
Expand All @@ -31,9 +31,9 @@


describe :gemset= do describe :gemset= do
before(:each) do before(:each) do
GemTemplate::Gems.configs = [ GemTemplate::Gems.config.gemsets = [
{ {
:gem_template => { :name => {
:rake => '>0.8.6', :rake => '>0.8.6',
:default => { :default => {
:externals => '=1.0.2' :externals => '=1.0.2'
Expand All @@ -55,7 +55,7 @@


it "should set @gemsets" do it "should set @gemsets" do
GemTemplate::Gems.gemsets.should == { GemTemplate::Gems.gemsets.should == {
:gem_template => { :name => {
:rake => ">0.8.6", :rake => ">0.8.6",
:default => { :default => {
:externals => '=1.0.2', :externals => '=1.0.2',
Expand Down Expand Up @@ -93,7 +93,7 @@


it "should set @gemsets" do it "should set @gemsets" do
GemTemplate::Gems.gemsets.should == { GemTemplate::Gems.gemsets.should == {
:gem_template => { :name => {
:rake => ">0.8.6", :rake => ">0.8.6",
:default => { :default => {
:externals => '=1.0.2', :externals => '=1.0.2',
Expand Down Expand Up @@ -126,21 +126,6 @@
end end


describe :reload_gemspec do describe :reload_gemspec do
before(:all) do
GemTemplate::Gems.configs = [
"#{$root}/spec/fixtures/gemsets.yml"
]
GemTemplate::Gems.gemset = :default
end

before(:each) do
@gemspec_path = "#{$root}/gem_template.gemspec"
@gemspec = File.read(@gemspec_path)
yml = File.read("#{$root}/spec/fixtures/gemspec.yml")
File.stub!(:read).and_return yml
GemTemplate::Gems.reload_gemspec
end

it "should populate @gemspec" do it "should populate @gemspec" do
GemTemplate::Gems.gemspec.hash.should == { GemTemplate::Gems.gemspec.hash.should == {
"name" => "name", "name" => "name",
Expand Down Expand Up @@ -168,7 +153,9 @@
end end


it "should produce a valid gemspec" do it "should produce a valid gemspec" do
gemspec = eval(@gemspec, binding, @gemspec_path) GemTemplate::Gems.gemset = :default
gemspec = File.expand_path("../../../gem_template.gemspec", __FILE__)
gemspec = eval(File.read(gemspec), binding, gemspec)
gemspec.validate.should == true gemspec.validate.should == true
end end
end end
Expand Down
10 changes: 0 additions & 10 deletions spec/spec_helper.rb
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -7,14 +7,4 @@
require 'pp' require 'pp'


Spec::Runner.configure do |config| Spec::Runner.configure do |config|
end

def capture_stdout
old = $stdout
out = StringIO.new
$stdout = out
yield
return out.string
ensure
$stdout = old
end end

0 comments on commit 5f45d78

Please sign in to comment.