From eca33a4680886947bf53ff0f1d0ffd31e63a1976 Mon Sep 17 00:00:00 2001 From: winton Date: Tue, 28 Dec 2010 03:21:01 -0800 Subject: [PATCH] New system for specifying gem versions, gemspec info, activating gems --- LICENSE | 2 +- Rakefile | 2 +- config/gemsets.yml | 3 + config/gemspec.yml | 12 ++++ gem_template.gemspec | 34 ++++------ lib/gem_template.rb | 4 +- lib/gem_template/gems.rb | 49 +++++++-------- lib/gem_template/gemsets.rb | 65 +++++++++++++++++++ lib/gem_template/gemspec.rb | 32 ++++++++++ lib/gem_template/version.rb | 3 - spec/fixtures/gemsets.yml | 6 ++ spec/fixtures/gemspec.yml | 12 ++++ spec/gem_template/gems_spec.rb | 31 +++++++++ spec/gem_template/gemsets_spec.rb | 100 ++++++++++++++++++++++++++++++ spec/gem_template/gemspec_spec.rb | 54 ++++++++++++++++ spec/spec_helper.rb | 17 ++--- 16 files changed, 362 insertions(+), 64 deletions(-) create mode 100644 config/gemsets.yml create mode 100644 config/gemspec.yml create mode 100644 lib/gem_template/gemsets.rb create mode 100644 lib/gem_template/gemspec.rb delete mode 100644 lib/gem_template/version.rb create mode 100644 spec/fixtures/gemsets.yml create mode 100644 spec/fixtures/gemspec.yml create mode 100644 spec/gem_template/gems_spec.rb create mode 100644 spec/gem_template/gemsets_spec.rb create mode 100644 spec/gem_template/gemspec_spec.rb diff --git a/LICENSE b/LICENSE index 1f11fbd..964b8ba 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2010 Winton Welsh +Copyright (c) 2010 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in diff --git a/Rakefile b/Rakefile index 04a1e95..c701fa1 100644 --- a/Rakefile +++ b/Rakefile @@ -1,6 +1,6 @@ require File.dirname(__FILE__) + '/lib/gem_template/gems' -GemTemplate::Gems.require(:rake) +GemTemplate::Gems.activate %w(rake rspec) require 'rake' require 'rake/gempackagetask' diff --git a/config/gemsets.yml b/config/gemsets.yml new file mode 100644 index 0000000..91d6220 --- /dev/null +++ b/config/gemsets.yml @@ -0,0 +1,3 @@ +gem_template: + rake: =0.8.7 + rspec: =1.3.1 \ No newline at end of file diff --git a/config/gemspec.yml b/config/gemspec.yml new file mode 100644 index 0000000..9ded4bf --- /dev/null +++ b/config/gemspec.yml @@ -0,0 +1,12 @@ +name: gem_template +version: 0.1.0 +authors: + - +email: +homepage: +summary: +description: +dependencies: + - +development_dependencies: + - \ No newline at end of file diff --git a/gem_template.gemspec b/gem_template.gemspec index 962dc47..e013b58 100644 --- a/gem_template.gemspec +++ b/gem_template.gemspec @@ -1,29 +1,21 @@ # -*- encoding: utf-8 -*- -lib = File.expand_path('../lib/', __FILE__) -$:.unshift lib unless $:.include?(lib) - -require 'gem_template/gems' -require 'gem_template/version' - Gem::Specification.new do |s| - s.name = "gem_template" - s.version = GemTemplate::VERSION - s.platform = Gem::Platform::RUBY - s.authors = ["Winton Welsh"] - s.email = ["mail@wintoni.us"] - s.homepage = "http://github.com/winton/gem_template" - s.summary = "" - s.description = "" + GemTemplate::Gemspec.data.each do |key, value| + unless %w(dependencies development_dependencies).include?(key) + s.send "#{key}=", value + end + end - GemTemplate::Gems::TYPES[:gemspec].each do |g| - s.add_dependency g.to_s, GemTemplate::Gems::VERSIONS[g] + GemTemplate::Gemspec.dependencies.each do |g| + s.add_dependency g.to_s, GemTemplate::Gems.versions[g] end - GemTemplate::Gems::TYPES[:gemspec_dev].each do |g| - s.add_development_dependency g.to_s, GemTemplate::Gems::VERSIONS[g] + GemTemplate::Gemspec.development_dependencies.each do |g| + s.add_development_dependency g.to_s, GemTemplate::Gems.versions[g] end - s.files = Dir.glob("{bin,lib}/**/*") + %w(LICENSE README.md) - s.executables = Dir.glob("{bin}/*").collect { |f| File.basename(f) } - s.require_path = 'lib' + s.executables = `git ls-files -- {bin}/*`.split("\n").collect { |f| File.basename(f) } + s.files = `git ls-files`.split("\n") + s.require_paths = %w(lib) + s.test_files = `git ls-files -- {features,test,spec}/*`.split("\n") end \ No newline at end of file diff --git a/lib/gem_template.rb b/lib/gem_template.rb index 649b7be..ddbddc4 100644 --- a/lib/gem_template.rb +++ b/lib/gem_template.rb @@ -1,10 +1,8 @@ require File.dirname(__FILE__) + '/gem_template/gems' -GemTemplate::Gems.require(:lib) +GemTemplate::Gems.activate %w() $:.unshift File.dirname(__FILE__) -require 'gem_template/version' - module GemTemplate end \ No newline at end of file diff --git a/lib/gem_template/gems.rb b/lib/gem_template/gems.rb index f3e39dc..83f2540 100644 --- a/lib/gem_template/gems.rb +++ b/lib/gem_template/gems.rb @@ -1,39 +1,32 @@ unless defined?(GemTemplate::Gems) - require 'rubygems' + require "#{File.dirname(__FILE__)}/gemsets" module GemTemplate class Gems - - VERSIONS = { - :rake => '=0.8.7', - :rspec => '=1.3.1' - } - - TYPES = { - :gemspec => [], - :gemspec_dev => [ :rspec ], - :lib => [], - :rake => [ :rake, :rspec ], - :spec => [ :rspec ] - } - class < { + :rake => '>0.8.6', + :default => { + :externals => '=1.0.2' + } + } + }, + "#{$root}/spec/fixtures/gemsets.yml" + ] + end + + describe :gemset= do + describe :default do + before(:each) do + GemTemplate::Gemsets.gemset = :default + end + + it "should set @gemset" do + GemTemplate::Gemsets.gemset.should == :default + end + + it "should set @gemsets" do + GemTemplate::Gemsets.gemsets.should == { + :gem_template => { + :rake => ">0.8.6", + :default => { + :externals => '=1.0.2', + :rspec => "=1.3.1" + }, + :rspec2 => { :rspec => "=2.3.0" } + } + } + end + + it "should set Gems.versions" do + GemTemplate::Gems.versions.should == { + :rake => ">0.8.6", + :rspec => "=1.3.1", + :externals => "=1.0.2" + } + end + + it "should set everything to nil if gemset given nil value" do + GemTemplate::Gemsets.gemset = nil + GemTemplate::Gemsets.gemset.should == nil + GemTemplate::Gemsets.gemsets.should == nil + GemTemplate::Gems.versions.should == nil + end + end + + describe :rspec2 do + before(:each) do + GemTemplate::Gemsets.gemset = "rspec2" + end + + it "should set @gemset" do + GemTemplate::Gemsets.gemset.should == :rspec2 + end + + it "should set @gemsets" do + GemTemplate::Gemsets.gemsets.should == { + :gem_template => { + :rake => ">0.8.6", + :default => { + :externals => '=1.0.2', + :rspec => "=1.3.1" + }, + :rspec2 => { :rspec => "=2.3.0" } + } + } + end + + it "should set Gems.versions" do + GemTemplate::Gems.versions.should == { + :rake => ">0.8.6", + :rspec => "=2.3.0" + } + end + end + + describe :nil do + before(:each) do + GemTemplate::Gemsets.gemset = nil + end + + it "should set everything to nil" do + GemTemplate::Gemsets.gemset.should == nil + GemTemplate::Gemsets.gemsets.should == nil + GemTemplate::Gems.versions.should == nil + end + end + end +end diff --git a/spec/gem_template/gemspec_spec.rb b/spec/gem_template/gemspec_spec.rb new file mode 100644 index 0000000..2d3e77f --- /dev/null +++ b/spec/gem_template/gemspec_spec.rb @@ -0,0 +1,54 @@ +require 'spec_helper' + +describe GemTemplate::Gemspec do + + before(:all) do + GemTemplate::Gemsets.configs = [ + "#{$root}/spec/fixtures/gemsets.yml" + ] + GemTemplate::Gemsets.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::Gemspec.reload + end + + after(:all) do + GemTemplate::Gemspec.reload + end + + it "should populate @data" do + GemTemplate::Gemspec.data.should == { + "name" => "name", + "version" => "0.1.0", + "authors" => ["Author"], + "email" => "email@email.com", + "homepage" => "http://github.com/author/name", + "summary" => "Summary", + "description" => "Description", + "dependencies" => ["rake"], + "development_dependencies" => ["rspec"] + } + end + + it "should create methods from keys of @data" do + GemTemplate::Gemspec.name.should == "name" + GemTemplate::Gemspec.version.should == "0.1.0" + GemTemplate::Gemspec.authors.should == ["Author"] + GemTemplate::Gemspec.email.should == "email@email.com" + GemTemplate::Gemspec.homepage.should == "http://github.com/author/name" + GemTemplate::Gemspec.summary.should == "Summary" + GemTemplate::Gemspec.description.should == "Description" + GemTemplate::Gemspec.dependencies.should == ["rake"] + GemTemplate::Gemspec.development_dependencies.should == ["rspec"] + end + + it "should produce a valid gemspec" do + gemspec = eval(@gemspec, binding, @gemspec_path) + gemspec.validate.should == true + end +end \ No newline at end of file diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 98c85c7..8d67aef 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -1,7 +1,7 @@ $root = File.expand_path('../../', __FILE__) require "#{$root}/lib/gem_template/gems" -GemTemplate::Gems.require(:spec) +GemTemplate::Gems.activate :rspec require "#{$root}/lib/gem_template" require 'pp' @@ -9,9 +9,12 @@ Spec::Runner.configure do |config| end -# For use with rspec textmate bundle -def debug(object) - puts "
"
-  puts object.pretty_inspect.gsub('<', '<').gsub('>', '>')
-  puts "
" -end +def capture_stdout + old = $stdout + out = StringIO.new + $stdout = out + yield + return out.string +ensure + $stdout = old +end \ No newline at end of file