appraisal 0.3.8 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- appraisal (0.3.8)
4
+ appraisal (0.4.0)
5
5
  bundler
6
6
  rake
7
7
 
@@ -31,7 +31,7 @@ GEM
31
31
  json (>= 1.4.6)
32
32
  json (1.5.3)
33
33
  rack (1.3.2)
34
- rake (0.9.2)
34
+ rake (0.9.2.2)
35
35
  rdiscount (1.6.8)
36
36
  rspec (2.6.0)
37
37
  rspec-core (~> 2.6.0)
data/README.md CHANGED
@@ -85,6 +85,15 @@ control to ensure that the same versions are always used. When running rake
85
85
  tasks for an appraisal, the rake task is run with the appropriate Gemfile for
86
86
  that appraisal, ensuring the correct dependencies are used.
87
87
 
88
+ Version Control
89
+ --------------
90
+
91
+ When using Appraisal, we recommend that you check your Gemfile.lock into
92
+ version control, as well as the gemfiles directory generated by Appraisal. This
93
+ will ensure that your tests are always green when you check out a fresh copy.
94
+ It also allows you to create reproducible regression tests for version-specific
95
+ bugs.
96
+
88
97
  Credits
89
98
  -------
90
99
 
data/Rakefile CHANGED
@@ -1,6 +1,7 @@
1
1
  require 'rubygems'
2
2
  require 'bundler/setup'
3
3
  require 'rake/gempackagetask'
4
+ require 'rspec/core/rake_task'
4
5
  require 'cucumber/rake/task'
5
6
 
6
7
  eval("$specification = #{IO.read('appraisal.gemspec')}")
@@ -9,11 +10,15 @@ Rake::GemPackageTask.new($specification) do |package|
9
10
  package.need_tar = true
10
11
  end
11
12
 
13
+ RSpec::Core::RakeTask.new do |t|
14
+ t.pattern = 'spec/**/*_spec.rb'
15
+ end
16
+
12
17
  Cucumber::Rake::Task.new(:cucumber) do |t|
13
18
  t.fork = true
14
19
  t.cucumber_opts = ['--format', (ENV['CUCUMBER_FORMAT'] || 'progress')]
15
20
  end
16
21
 
17
22
  desc "Default: run the cucumber scenarios"
18
- task :default => :cucumber
23
+ task :default => [:spec, :cucumber]
19
24
 
@@ -1,23 +1,33 @@
1
+ @disable-bundler
1
2
  Feature: run a rake task through several appraisals
2
3
 
3
4
  Background:
4
5
  Given a directory named "projecto"
6
+ And the following installed dummy gems:
7
+ | name | version |
8
+ | dummy_girl | 1.3.0 |
9
+ | dummy_girl | 1.3.2 |
10
+ | dummy_rake | 0.8.7 |
11
+ | dummy_rake | 0.9.0 |
12
+ | dummy_sass | 3.1.0 |
5
13
  When I cd to "projecto"
6
14
  And I write to "Gemfile" with:
7
15
  """
8
- source "http://rubygems.org"
9
- gem "rake", "0.8.7"
10
- gem "factory_girl"
16
+ gem "dummy_rake", "0.8.7"
17
+ gem "dummy_girl"
18
+ group :assets do
19
+ gem 'dummy_sass', " ~> 3.1.0"
20
+ end
11
21
  """
12
22
  When I add "appraisal" from this project as a dependency
13
23
  And I write to "Appraisals" with:
14
24
  """
15
25
  appraise "1.3.2" do
16
- gem "factory_girl", "1.3.2"
26
+ gem "dummy_girl", "1.3.2"
17
27
  end
18
28
  appraise "1.3.0" do
19
- gem "factory_girl", "1.3.0"
20
- gem "rake", "0.9.0"
29
+ gem "dummy_girl", "1.3.0"
30
+ gem "dummy_rake", "0.9.0"
21
31
  end
22
32
  """
23
33
  When I write to "Rakefile" with:
@@ -26,59 +36,52 @@ Feature: run a rake task through several appraisals
26
36
  require 'bundler/setup'
27
37
  require 'appraisal'
28
38
  task :version do
29
- require 'factory_girl'
30
- puts "Loaded #{Factory::VERSION}"
39
+ require 'dummy_girl'
40
+ puts "Loaded #{$dummy_girl_version}"
31
41
  end
32
42
  task :fail do
33
- require 'factory_girl'
34
- puts "Fail #{Factory::VERSION}"
43
+ require 'dummy_girl'
44
+ puts "Fail #{$dummy_girl_version}"
35
45
  raise
36
46
  end
37
47
  task :default => :version
38
48
  """
39
- When I successfully run `bundle exec rake appraisal:install --trace`
49
+ When I successfully run `bundle install --local`
50
+ And I successfully run `bundle exec rake appraisal:install --trace`
40
51
 
41
- @disable-bundler
42
52
  Scenario: run a specific task with one appraisal
43
53
  When I successfully run `bundle exec rake appraisal:1.3.0 version --trace`
44
54
  Then the output should contain "Loaded 1.3.0"
45
55
 
46
- @disable-bundler
47
56
  Scenario: run a specific task with all appraisals
48
57
  When I successfully run `bundle exec rake appraisal version --trace`
49
58
  Then the output should contain "Loaded 1.3.0"
50
59
  And the output should contain "Loaded 1.3.2"
51
60
  And the output should not contain "Invoke version"
52
61
 
53
- @disable-bundler
54
62
  Scenario: run the default task with one appraisal
55
63
  When I successfully run `bundle exec rake appraisal:1.3.0 --trace`
56
64
  Then the output should contain "Loaded 1.3.0"
57
65
 
58
- @disable-bundler
59
66
  Scenario: run the default task with all appraisals
60
67
  When I successfully run `bundle exec rake appraisal --trace`
61
68
  Then the output should contain "Loaded 1.3.0"
62
69
  And the output should contain "Loaded 1.3.2"
63
70
 
64
- @disable-bundler
65
71
  Scenario: run a failing task with one appraisal
66
72
  When I run `bundle exec rake appraisal:1.3.0 fail --trace`
67
73
  Then the output should contain "Fail 1.3.0"
68
74
  And the exit status should be 1
69
75
 
70
- @disable-bundler
71
76
  Scenario: run a failing task with all appraisals
72
77
  When I run `bundle exec rake appraisal fail --trace`
73
78
  Then the output should contain "Fail 1.3.2"
74
79
  But the output should not contain "Fail 1.3.0"
75
80
  And the exit status should be 1
76
81
 
77
- @disable-bundler
78
82
  Scenario: run a cleanup task
79
83
  When I run `bundle exec rake appraisal:cleanup --trace`
80
84
  Then a file named "gemfiles/1.3.0.gemfile" should not exist
81
85
  And a file named "gemfiles/1.3.0.gemfile.lock" should not exist
82
86
  And a file named "gemfiles/1.3.2.gemfile" should not exist
83
87
  And a file named "gemfiles/1.3.2.gemfile.lock" should not exist
84
-
@@ -1,70 +1,70 @@
1
+ @disable-bundler
1
2
  Feature: appraisals using an existing gemspec
2
3
 
3
- Background:
4
- Given a directory named "gemspecced"
5
- When I cd to "gemspecced"
6
- And I write to "gemspecced.gemspec" with:
7
- """
8
- Gem::Specification.new do |s|
9
- s.name = %q{gemspecced}
10
- s.version = '0.1'
11
- s.summary = %q{featureful!}
4
+ Background:
5
+ Given a directory named "gemspecced"
6
+ And the following installed dummy gems:
7
+ | name | version |
8
+ | dummy_girl | 1.3.0 |
9
+ | dummy_girl | 1.3.2 |
10
+ When I cd to "gemspecced"
11
+ And I write to "gemspecced.gemspec" with:
12
+ """
13
+ Gem::Specification.new do |s|
14
+ s.name = %q{gemspecced}
15
+ s.version = '0.1'
16
+ s.summary = %q{featureful!}
12
17
 
13
- s.add_runtime_dependency('mocha')
14
- s.add_development_dependency('factory_girl', '1.3.2')
15
- end
16
- """
17
- And a directory named "specdir"
18
- And I write to "specdir/gemspecced.gemspec" with:
19
- """
20
- Gem::Specification.new do |s|
21
- s.name = %q{gemspecced}
22
- s.version = '0.1'
23
- s.summary = %q{featureful!}
18
+ s.add_development_dependency('dummy_girl', '1.3.2')
19
+ end
20
+ """
21
+ And a directory named "specdir"
22
+ And I write to "specdir/gemspecced.gemspec" with:
23
+ """
24
+ Gem::Specification.new do |s|
25
+ s.name = %q{gemspecced}
26
+ s.version = '0.1'
27
+ s.summary = %q{featureful!}
24
28
 
25
- s.add_runtime_dependency('mocha')
26
- s.add_development_dependency('factory_girl', '1.3.0')
27
- end
28
- """
29
- And I write to "Appraisals" with:
30
- """
31
- appraise "stock" do
32
- gem "shoulda", "2.11.3"
33
- end
34
- """
35
- When I write to "Rakefile" with:
36
- """
37
- require 'rubygems'
38
- require 'bundler/setup'
39
- require 'appraisal'
40
- task :version do
41
- require 'factory_girl'
42
- puts "Loaded #{Factory::VERSION}"
43
- end
44
- """
29
+ s.add_development_dependency('dummy_girl', '1.3.0')
30
+ end
31
+ """
32
+ And I write to "Appraisals" with:
33
+ """
34
+ appraise "stock" do
35
+ gem "shoulda", "2.11.3"
36
+ end
37
+ """
38
+ When I write to "Rakefile" with:
39
+ """
40
+ require 'rubygems'
41
+ require 'bundler/setup'
42
+ require 'appraisal'
43
+ task :version do
44
+ require 'dummy_girl'
45
+ puts "Loaded #{$dummy_girl_version}"
46
+ end
47
+ """
45
48
 
46
- @disable-bundler
47
- Scenario: run a gem in the gemspec
48
- And I write to "Gemfile" with:
49
- """
50
- source "http://rubygems.org"
51
- gemspec
52
- """
53
- When I add "appraisal" from this project as a dependency
54
- When I successfully run `bundle exec rake appraisal:install --trace`
55
- When I run `bundle exec rake appraisal version --trace`
56
- Then the output should contain "Loaded 1.3.2"
49
+ Scenario: run a gem in the gemspec
50
+ And I write to "Gemfile" with:
51
+ """
52
+ gemspec
53
+ """
54
+ When I add "appraisal" from this project as a dependency
55
+ And I successfully run `bundle install --local`
56
+ And I successfully run `bundle exec rake appraisal:install --trace`
57
+ And I run `bundle exec rake appraisal version --trace`
58
+ Then the output should contain "Loaded 1.3.2"
57
59
 
58
60
 
59
- @disable-bundler
60
- Scenario: run a gem in the gemspec via path
61
- And I write to "Gemfile" with:
62
- """
63
- source "http://rubygems.org"
64
- gemspec :path => './specdir'
65
- """
66
- When I add "appraisal" from this project as a dependency
67
- When I successfully run `bundle exec rake appraisal:install --trace`
68
- When I run `bundle exec rake appraisal version --trace`
69
- Then the output should contain "Loaded 1.3.0"
61
+ Scenario: run a gem in the gemspec via path
62
+ And I write to "Gemfile" with:
63
+ """
64
+ gemspec :path => './specdir'
65
+ """
66
+ When I add "appraisal" from this project as a dependency
67
+ When I successfully run `bundle exec rake appraisal:install --trace`
68
+ When I run `bundle exec rake appraisal version --trace`
69
+ Then the output should contain "Loaded 1.3.0"
70
70
 
@@ -2,3 +2,30 @@ When /^I add "([^"]*)" from this project as a dependency$/ do |gem_name|
2
2
  append_to_file('Gemfile', %{\ngem "#{gem_name}", :path => "#{PROJECT_ROOT}"})
3
3
  end
4
4
 
5
+ Given /^the following installed dummy gems:$/ do |table|
6
+ table.hashes.each do |hash|
7
+ name = hash["name"]
8
+ version = hash["version"]
9
+ create_dir(name)
10
+ cd(name)
11
+ create_dir("lib")
12
+ gem_path = "#{name}.gemspec"
13
+ version_path = "lib/#{name}.rb"
14
+ spec = <<-SPEC
15
+ Gem::Specification.new do |s|
16
+ s.name = '#{name}'
17
+ s.version = '#{version}'
18
+ s.authors = 'Mr. Smith'
19
+ s.summary = 'summary'
20
+ s.files = '#{version_path}'
21
+ end
22
+ SPEC
23
+ write_file(gem_path, spec)
24
+ write_file(version_path, "$#{name}_version = '#{version}'")
25
+ in_current_dir { `gem build #{gem_path} 2>&1` }
26
+ set_env("GEM_HOME", TMP_GEM_ROOT)
27
+ in_current_dir { `gem install #{name}-#{version}.gem 2>&1` }
28
+ FileUtils.rm_rf(File.join(current_dir, name))
29
+ dirs.pop
30
+ end
31
+ end
@@ -1,4 +1,11 @@
1
1
  require 'aruba/cucumber'
2
2
 
3
3
  PROJECT_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..', '..')).freeze
4
+ TMP_GEM_ROOT = File.join(PROJECT_ROOT, "tmp", "gems")
4
5
 
6
+ Before do
7
+ FileUtils.rm_rf(TMP_GEM_ROOT)
8
+ FileUtils.mkdir_p(TMP_GEM_ROOT)
9
+ end
10
+
11
+ ENV["GEM_PATH"] = [TMP_GEM_ROOT, ENV["GEM_PATH"]].join(":")
@@ -7,7 +7,8 @@ module Appraisal
7
7
  attr_reader :dependencies
8
8
 
9
9
  def initialize
10
- @dependencies = {}
10
+ @sources = []
11
+ @dependencies = []
11
12
  end
12
13
 
13
14
  def load(path)
@@ -19,11 +20,16 @@ module Appraisal
19
20
  end
20
21
 
21
22
  def gem(name, *requirements)
22
- @dependencies[name] = Dependency.new(name, requirements)
23
+ @dependencies.reject! { |dependency| dependency.name == name }
24
+ @dependencies << Dependency.new(name, requirements)
25
+ end
26
+
27
+ def group(name)
28
+ # ignore the group
23
29
  end
24
30
 
25
31
  def source(source)
26
- @source = source
32
+ @sources << source
27
33
  end
28
34
 
29
35
  def to_s
@@ -32,8 +38,8 @@ module Appraisal
32
38
 
33
39
  def dup
34
40
  gemfile = Gemfile.new
35
- gemfile.source @source
36
- dependencies.values.each do |dependency|
41
+ @sources.each { |source| gemfile.source source }
42
+ dependencies.each do |dependency|
37
43
  gemfile.gem(dependency.name, *dependency.requirements)
38
44
  end
39
45
  gemfile.gemspec(@gemspec.options) if @gemspec
@@ -47,11 +53,11 @@ module Appraisal
47
53
  protected
48
54
 
49
55
  def source_entry
50
- %(source "#{@source}")
56
+ @sources.map { |source| "source #{source.inspect}" }.join("\n")
51
57
  end
52
58
 
53
59
  def dependencies_entry
54
- dependencies.values.map { |dependency| dependency.to_s }.join("\n")
60
+ dependencies.map { |dependency| dependency.to_s }.join("\n")
55
61
  end
56
62
 
57
63
  def gemspec_entry
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: appraisal
3
3
  version: !ruby/object:Gem::Version
4
- hash: 3
4
+ hash: 15
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 3
9
- - 8
10
- version: 0.3.8
8
+ - 4
9
+ - 0
10
+ version: 0.4.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Joe Ferris
@@ -15,12 +15,10 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-08-09 00:00:00 -04:00
19
- default_executable:
18
+ date: 2011-11-11 00:00:00 Z
20
19
  dependencies:
21
20
  - !ruby/object:Gem::Dependency
22
- type: :development
23
- requirement: &id001 !ruby/object:Gem::Requirement
21
+ version_requirements: &id001 !ruby/object:Gem::Requirement
24
22
  none: false
25
23
  requirements:
26
24
  - - ~>
@@ -30,12 +28,12 @@ dependencies:
30
28
  - 1
31
29
  - 0
32
30
  version: "1.0"
33
- version_requirements: *id001
34
- name: cucumber
31
+ requirement: *id001
32
+ type: :development
35
33
  prerelease: false
34
+ name: cucumber
36
35
  - !ruby/object:Gem::Dependency
37
- type: :development
38
- requirement: &id002 !ruby/object:Gem::Requirement
36
+ version_requirements: &id002 !ruby/object:Gem::Requirement
39
37
  none: false
40
38
  requirements:
41
39
  - - ~>
@@ -45,12 +43,12 @@ dependencies:
45
43
  - 2
46
44
  - 6
47
45
  version: "2.6"
48
- version_requirements: *id002
49
- name: rspec
46
+ requirement: *id002
47
+ type: :development
50
48
  prerelease: false
49
+ name: rspec
51
50
  - !ruby/object:Gem::Dependency
52
- type: :development
53
- requirement: &id003 !ruby/object:Gem::Requirement
51
+ version_requirements: &id003 !ruby/object:Gem::Requirement
54
52
  none: false
55
53
  requirements:
56
54
  - - ~>
@@ -61,12 +59,12 @@ dependencies:
61
59
  - 4
62
60
  - 2
63
61
  version: 0.4.2
64
- version_requirements: *id003
65
- name: aruba
62
+ requirement: *id003
63
+ type: :development
66
64
  prerelease: false
65
+ name: aruba
67
66
  - !ruby/object:Gem::Dependency
68
- type: :runtime
69
- requirement: &id004 !ruby/object:Gem::Requirement
67
+ version_requirements: &id004 !ruby/object:Gem::Requirement
70
68
  none: false
71
69
  requirements:
72
70
  - - ">="
@@ -75,12 +73,12 @@ dependencies:
75
73
  segments:
76
74
  - 0
77
75
  version: "0"
78
- version_requirements: *id004
79
- name: rake
76
+ requirement: *id004
77
+ type: :runtime
80
78
  prerelease: false
79
+ name: rake
81
80
  - !ruby/object:Gem::Dependency
82
- type: :runtime
83
- requirement: &id005 !ruby/object:Gem::Requirement
81
+ version_requirements: &id005 !ruby/object:Gem::Requirement
84
82
  none: false
85
83
  requirements:
86
84
  - - ">="
@@ -89,9 +87,10 @@ dependencies:
89
87
  segments:
90
88
  - 0
91
89
  version: "0"
92
- version_requirements: *id005
93
- name: bundler
90
+ requirement: *id005
91
+ type: :runtime
94
92
  prerelease: false
93
+ name: bundler
95
94
  description: Appraisal integrates with bundler and rake to test your library against different versions of dependencies in repeatable scenarios called "appraisals."
96
95
  email: jferris@thoughtbot.com
97
96
  executables: []
@@ -119,7 +118,6 @@ files:
119
118
  - features/step_definitions/dependency_steps.rb
120
119
  - features/support/aruba.rb
121
120
  - features/support/env.rb
122
- has_rdoc: true
123
121
  homepage: http://github.com/thoughtbot/appraisal
124
122
  licenses: []
125
123
 
@@ -149,7 +147,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
149
147
  requirements: []
150
148
 
151
149
  rubyforge_project:
152
- rubygems_version: 1.6.1
150
+ rubygems_version: 1.8.11
153
151
  signing_key:
154
152
  specification_version: 3
155
153
  summary: Find out what your Ruby gems are worth