appraisal 0.5.2 → 1.0.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c5219eedbc26798b63b1aab040b7a511751c725b
4
- data.tar.gz: 9e654d7ce29fa85fe3d6086e9f15679fd7ddf4af
3
+ metadata.gz: 90e8b6522115c4dc3c17e760c10c3be470782a10
4
+ data.tar.gz: 88f5f2cd1d763807d3365a1c216883066922a683
5
5
  SHA512:
6
- metadata.gz: f940b01fa7a150d127336194c2464601f39f5dfa8aeebc302da7cc968eaa53a62a32a69b029cacd0e12d7c7ded13cf4244b45239c3813fb66874a106423f8f5b
7
- data.tar.gz: d7f5148386343f5e1a85f0b703c2a52f3a46281a1e918751eb4ff201aff878093823a8520eb6ee0e022be5f2346951fd7286bfb69e3085572629e169dd47c178
6
+ metadata.gz: 16adfbd7bf60a34ff6567d3c5b177af70fbc07a4d9d0a8d57e63241d404a47ab95b513f9def0ffa3ce35047d6ca04e5a7b87f0973ddeab0f87f4cbf203977b05
7
+ data.tar.gz: 802f454088dece1fbc37920e67c5eab145f38e7789de70b3a9b9580bde97f1090cd0459011455483739a965b047089a846b74d716e39ab416b6797a96e9e6e24
@@ -1,7 +1,15 @@
1
+ before_install: gem install bundler --pre
2
+
1
3
  rvm:
2
- - 1.8.7
3
4
  - 1.9.3
4
5
  - 2.0.0
5
- branches:
6
- only:
7
- - master
6
+ - jruby-19mode
7
+ - rbx-19mode
8
+ - ruby-head
9
+ - jruby-head
10
+
11
+ matrix:
12
+ allow_failures:
13
+ - rvm: jruby-19mode
14
+ - rvm: ruby-head
15
+ - rvm: jruby-head
data/README.md CHANGED
@@ -1,14 +1,20 @@
1
- # Appraisal [![Build Status](https://secure.travis-ci.org/thoughtbot/appraisal.png)](http://travis-ci.org/thoughtbot/appraisal?branch=master)
1
+ Appraisal
2
+ =========
3
+
4
+ [![Build Status][Build Status Image]][Build Status]
2
5
 
3
6
  Find out what your Ruby gems are worth.
4
7
 
8
+ [Build Status Image]: https://secure.travis-ci.org/thoughtbot/appraisal.png?branch=master
9
+ [Build Status]: http://travis-ci.org/thoughtbot/appraisal
10
+
5
11
  Synopsis
6
12
  --------
7
13
 
8
14
  Appraisal integrates with bundler and rake to test your library against
9
15
  different versions of dependencies in repeatable scenarios called "appraisals."
10
16
  Appraisal is designed to make it easy to check for regressions in your library
11
- without interfering with day-to-day development using bundler.
17
+ without interfering with day-to-day development using Bundler.
12
18
 
13
19
  Installation
14
20
  ------------
@@ -17,22 +23,27 @@ In your Gemfile:
17
23
 
18
24
  gem "appraisal"
19
25
 
26
+ Note that gems must be bundled in the global namespace. Bundling gems to a local
27
+ location or vendoring plugins is not supported. If you do not want to pollute the
28
+ global namespace, one alternative is [RVM's Gemsets](http://rvm.io/gemsets).
29
+
20
30
  Setup
21
31
  -----
22
32
 
23
33
  Setting up appraisal requires an Appraisals file (similar to a Gemfile) in your
24
- project root, named "Appraisals" (note the case), and some slight changes to your project's Rakefile.
34
+ project root, named "Appraisals" (note the case), and some slight changes to
35
+ your project's Rakefile.
25
36
 
26
37
  An Appraisals file consists of several appraisal definitions. An appraisal
27
38
  definition is simply a list of gem dependencies. For example, to test with a
28
39
  few versions of Rails:
29
40
 
30
- appraise "rails2" do
31
- gem "rails", "2.3.9"
41
+ appraise "rails-3" do
42
+ gem "rails", "3.2.14"
32
43
  end
33
44
 
34
- appraise "rails3" do
35
- gem "rails", "3.0.0"
45
+ appraise "rails-4" do
46
+ gem "rails", "4.0.0"
36
47
  end
37
48
 
38
49
  The dependencies in your Appraisals file are combined with dependencies in your
@@ -40,15 +51,11 @@ Gemfile, so you don't need to repeat anything that's the same for each
40
51
  appraisal. If something is specified in both the Gemfile and an appraisal, the
41
52
  version from the appraisal takes precedence.
42
53
 
43
- Once you have an Appraisals file set up, just require appraisal in your Rakefile:
44
-
45
- require 'appraisal'
46
-
47
54
  It's also recommended that you setup bundler at the very top of your Rakefile,
48
55
  so that you don't need to constantly run bundle exec:
49
56
 
50
- require 'rubygems'
51
- require 'bundler/setup'
57
+ require "rubygems"
58
+ require "bundler/setup"
52
59
 
53
60
  Usage
54
61
  -----
@@ -56,55 +63,99 @@ Usage
56
63
  Once you've configured the appraisals you want to use, you need to install the
57
64
  dependencies for each appraisal:
58
65
 
59
- rake appraisal:install
66
+ appraisal install
60
67
 
61
68
  This will resolve, install, and lock the dependencies for that appraisal using
62
- bundler. Once you have your dependencies setup, you can run any rake task in a
69
+ bundler. Once you have your dependencies set up, you can run any command in a
63
70
  single appraisal:
64
71
 
65
- rake appraisal:rails2 test
72
+ appraisal rails-3 rake test
66
73
 
67
- This will run your "test" rake task using the dependencies configured for Rails
68
- 2. You can also run each appraisal in turn:
74
+ This will run `rake test` using the dependencies configured for Rails 3. You can
75
+ also run each appraisal in turn:
69
76
 
70
- rake appraisal test
77
+ appraisal rake test
71
78
 
72
- If you want to use only the dependencies from your Gemfile, just run "rake
73
- test" as normal. This allows you to keep running with the latest versions of
79
+ If you want to use only the dependencies from your Gemfile, just run `rake
80
+ test` as normal. This allows you to keep running with the latest versions of
74
81
  your dependencies in quick test runs, but keep running the tests in older
75
82
  versions to check for regressions.
76
83
 
84
+ In the case that you want to run all the appraisals by default when you run
85
+ `rake`, you can override your default Rake task by put this into your Rakefile:
86
+
87
+ if !ENV["APPRAISAL_INITIALIZED"] && !ENV["TRAVIS"]
88
+ task :default => :appraisal
89
+ end
90
+
91
+ (Appraisal sets `APPRAISAL_INITIALIZED` environment variable when it runs your
92
+ process. We put a check here to ensure that `appraisal rake` command should run
93
+ your real default task, which usually is your `test` task.)
94
+
95
+ Note that this may conflict with your CI setup if you decide to split the test
96
+ into multiple processes by Appraisal and you are using `rake` to run tests by
97
+ default. Please see **Travis CI Integration** for more detail.
98
+
77
99
  Under the hood
78
100
  --------------
79
101
 
80
- Running "rake appraisal:install" generates a Gemfile for each appraisal by
81
- combining your root Gemfile with the specific requirements for each appraisal.
82
- These are stored in the "gemfiles" directory, and should be added to version
83
- control to ensure that the same versions are always used. When running rake
84
- tasks for an appraisal, the rake task is run with the appropriate Gemfile for
85
- that appraisal, ensuring the correct dependencies are used.
102
+ Running `appraisal install` generates a Gemfile for each appraisal by combining
103
+ your root Gemfile with the specific requirements for each appraisal. These are
104
+ stored in the `gemfiles` directory, and should be added to version control to
105
+ ensure that the same versions are always used.
106
+
107
+ When you prefix a command with `appraisal`, the command is run with the
108
+ appropriate Gemfile for that appraisal, ensuring the correct dependencies
109
+ are used.
86
110
 
87
111
  Version Control
88
- --------------
112
+ ---------------
113
+
114
+ When using Appraisal, we recommend you check in the Gemfiles that Appraisal
115
+ generates within the gemfiles directory, but exclude the lockfiles there
116
+ (`*.gemfile.lock`.) The Gemfiles are useful when running your tests against a
117
+ continuous integration server such as [Travis CI][Travis CI].
118
+
119
+ [Travis CI]: https://travis-ci.org
120
+
121
+ Travis CI integration
122
+ ---------------------
89
123
 
90
- When using Appraisal, we recommend that you check your Gemfile.lock into
91
- version control, as well as the gemfiles directory generated by Appraisal. This
92
- will ensure that your tests are always green when you check out a fresh copy.
93
- It also allows you to create reproducible regression tests for version-specific
94
- bugs.
124
+ If you're using Appraisal and using Travis CI, we're recommending you to setup
125
+ Travis to run the test against multiple generated Gemfiles. This can be done
126
+ by using `gemfile` setting:
127
+
128
+ # In .travis.yml
129
+ gemfile:
130
+ - gemfiles/3.0.gemfile
131
+ - gemfiles/3.1.gemfile
132
+ - gemfiles/3.2.gemfile
133
+
134
+ Please note that if you've set your default rake task to run the test against
135
+ all versions of its dependency, you might have to set a `script` setting:
136
+
137
+ script: "bundle exec rake test"
138
+
139
+ That will make sure that each of the test sub-job are not getting run more than
140
+ one time.
95
141
 
96
142
  Credits
97
143
  -------
98
144
 
99
145
  ![thoughtbot](http://thoughtbot.com/images/tm/logo.png)
100
146
 
101
- Appraisal is maintained and funded by [thoughtbot, inc](http://thoughtbot.com/community)
147
+ Appraisal is maintained and funded by [thoughtbot, inc][thoughtbot]
102
148
 
103
- Thank you to all [the contributors](https://github.com/thoughtbot/appraisal/contributors)!
149
+ Thank you to all [the contributors][contributors]
104
150
 
105
151
  The names and logos for thoughtbot are trademarks of thoughtbot, inc.
106
152
 
153
+ [thoughtbot]: http://thoughtbot.com/community
154
+ [contributors]: https://github.com/thoughtbot/appraisal/contributors
155
+
107
156
  License
108
157
  -------
109
158
 
110
- Appraisal is Copyright © 2010-2013 Joe Ferris and thoughtbot, inc. It is free software, and may be redistributed under the terms specified in the MIT-LICENSE file.
159
+ Appraisal is Copyright © 2010-2013 Joe Ferris and thoughtbot, inc. It is free
160
+ software, and may be redistributed under the terms specified in the MIT-LICENSE
161
+ file.
@@ -3,14 +3,15 @@ $:.push File.expand_path("../lib", __FILE__)
3
3
  require "appraisal/version"
4
4
 
5
5
  Gem::Specification.new do |s|
6
- s.name = %q{appraisal}
6
+ s.name = 'appraisal'
7
7
  s.version = Appraisal::VERSION.dup
8
8
  s.platform = Gem::Platform::RUBY
9
- s.authors = ["Joe Ferris"]
10
- s.email = %q{jferris@thoughtbot.com}
11
- s.homepage = "http://github.com/thoughtbot/appraisal"
12
- s.summary = %q{Find out what your Ruby gems are worth}
13
- s.description = %q{Appraisal integrates with bundler and rake to test your library against different versions of dependencies in repeatable scenarios called "appraisals."}
9
+ s.authors = ['Joe Ferris', 'Prem Sichanugrist']
10
+ s.email = ['jferris@thoughtbot.com', 'prem@thoughtbot.com']
11
+ s.homepage = 'http://github.com/thoughtbot/appraisal'
12
+ s.summary = 'Find out what your Ruby gems are worth'
13
+ s.description = 'Appraisal integrates with bundler and rake to test your library against different versions of dependencies in repeatable scenarios called "appraisals."'
14
+ s.license = 'MIT'
14
15
 
15
16
  s.files = `git ls-files`.split("\n")
16
17
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
@@ -19,8 +20,10 @@ Gem::Specification.new do |s|
19
20
 
20
21
  s.add_runtime_dependency('rake')
21
22
  s.add_runtime_dependency('bundler')
23
+ s.add_runtime_dependency('thor', '~> 0.18.1')
22
24
 
25
+ s.add_development_dependency('activesupport', '>= 3.2.13')
23
26
  s.add_development_dependency('cucumber', '~> 1.0')
24
27
  s.add_development_dependency('rspec', '~> 2.6')
25
- s.add_development_dependency('aruba', '~> 0.4.2')
28
+ s.add_development_dependency('aruba', '~> 0.5.1')
26
29
  end
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+ require 'rubygems'
3
+ require 'bundler/setup'
4
+ require 'appraisal'
5
+ require 'appraisal/cli'
6
+
7
+ Appraisal::CLI.start
@@ -16,11 +16,13 @@ Feature: run a rake task through several appraisals
16
16
  """
17
17
  gem "dummy_rake", "0.8.7"
18
18
  gem "dummy_girl"
19
+
19
20
  group :assets do
20
- gem 'dummy_sass', " ~> 3.1.0"
21
+ gem 'dummy_sass', "~> 3.1.0"
21
22
  end
23
+
22
24
  group :test, :development do
23
- gem 'dummy_spec', " ~> 3.1.0"
25
+ gem 'dummy_spec', "~> 3.1.0"
24
26
  end
25
27
  """
26
28
  When I add "appraisal" from this project as a dependency
@@ -29,6 +31,7 @@ Feature: run a rake task through several appraisals
29
31
  appraise "1.3.2" do
30
32
  gem "dummy_girl", "1.3.2"
31
33
  end
34
+
32
35
  appraise "1.3.0" do
33
36
  gem "dummy_girl", "1.3.0"
34
37
  gem "dummy_rake", "0.9.0"
@@ -39,15 +42,18 @@ Feature: run a rake task through several appraisals
39
42
  require 'rubygems'
40
43
  require 'bundler/setup'
41
44
  require 'appraisal'
45
+
42
46
  task :version do
43
47
  require 'dummy_girl'
44
48
  puts "Loaded #{$dummy_girl_version}"
45
49
  end
50
+
46
51
  task :fail do
47
52
  require 'dummy_girl'
48
53
  puts "Fail #{$dummy_girl_version}"
49
54
  raise
50
55
  end
56
+
51
57
  task :default => :version
52
58
  """
53
59
  When I successfully run `bundle install --local`
@@ -89,3 +95,11 @@ Feature: run a rake task through several appraisals
89
95
  And a file named "gemfiles/1.3.0.gemfile.lock" should not exist
90
96
  And a file named "gemfiles/1.3.2.gemfile" should not exist
91
97
  And a file named "gemfiles/1.3.2.gemfile.lock" should not exist
98
+
99
+ Scenario: install gems within groups
100
+ Then the file "gemfiles/1.3.0.gemfile" should contain:
101
+ """
102
+ group :assets do
103
+ gem "dummy_sass", "~> 3.1.0"
104
+ end
105
+ """
@@ -0,0 +1,70 @@
1
+ @disable-bundler
2
+ Feature: Bundler Gemfile Compatibility
3
+
4
+ Scenario: Parsing Gemfile
5
+ Given the following installed dummy gems:
6
+ | name | version |
7
+ | bacon | 1.0.0 |
8
+ | bread | 1.0.0 |
9
+ | miso_soup | 1.0.0 |
10
+ | rice | 1.0.0 |
11
+ And a git repository exists for gem "egg" with version "0.1.0"
12
+ And I write to "Gemfile" with:
13
+ """
14
+ source "https://rubygems.org"
15
+ ruby RUBY_VERSION
16
+
17
+ git "./egg" do
18
+ gem "egg"
19
+ end
20
+
21
+ group :breakfast do
22
+ gem "bacon"
23
+ end
24
+ """
25
+ And I add "appraisal" from this project as a dependency
26
+ And I write to "Appraisals" with:
27
+ """
28
+ appraise "japanese" do
29
+ gem "rice"
30
+ gem "miso_soup"
31
+ end
32
+
33
+ appraise "english" do
34
+ gem "bread"
35
+ end
36
+ """
37
+ And I write to "Rakefile" with:
38
+ """
39
+ require 'rubygems'
40
+ require 'bundler/setup'
41
+ require 'appraisal'
42
+ """
43
+ When I successfully run `bundle install --local`
44
+ And I successfully run `bundle exec rake appraisal:gemfiles --trace`
45
+ Then the file "gemfiles/japanese.gemfile" should contain:
46
+ """
47
+ source "https://rubygems.org"
48
+ """
49
+ And the file "gemfiles/japanese.gemfile" should contain a correct ruby directive
50
+ And the file "gemfiles/japanese.gemfile" should contain:
51
+ """
52
+ gem "rice"
53
+ gem "miso_soup"
54
+ """
55
+ And the file "gemfiles/japanese.gemfile" should contain:
56
+ """
57
+ git "./egg" do
58
+ gem "egg"
59
+ end
60
+ """
61
+ And the file "gemfiles/japanese.gemfile" should contain:
62
+ """
63
+ group :breakfast do
64
+ gem "bacon"
65
+ end
66
+ """
67
+ And the file "gemfiles/english.gemfile" should contain:
68
+ """
69
+ gem "bread"
70
+ """
@@ -57,17 +57,6 @@ Feature: appraisals using an existing gemspec
57
57
  And I run `bundle exec rake appraisal version --trace`
58
58
  Then the output should contain "Loaded 1.3.2"
59
59
 
60
-
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
-
71
60
  Scenario: run a gem in the gemspec via path
72
61
  And I write to "Gemfile" with:
73
62
  """
@@ -0,0 +1,23 @@
1
+ @disable-bundler
2
+ Feature: raise an exception when there is no Appraisal file
3
+
4
+ Scenario: No Appraisal file
5
+ Given a directory named "projecto"
6
+ And the following installed dummy gems:
7
+ | name | version |
8
+ | dummy_girl | 1.3.0 |
9
+ And I cd to "projecto"
10
+ And I write to "Gemfile" with:
11
+ """
12
+ gem "dummy_girl"
13
+ """
14
+ And I add "appraisal" from this project as a dependency
15
+ And I write to "Rakefile" with:
16
+ """
17
+ require 'rubygems'
18
+ require 'bundler/setup'
19
+ require 'appraisal'
20
+ """
21
+ And I successfully run `bundle install --local`
22
+ When I run `bundle exec rake appraisal:install --trace`
23
+ Then the output should contain "Unable to locate 'Appraisals' file in the current directory."
@@ -3,29 +3,22 @@ When /^I add "([^"]*)" from this project as a dependency$/ do |gem_name|
3
3
  end
4
4
 
5
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
6
+ table.hashes.each { |hash| build_gem(hash["name"], hash["version"]) }
7
+ end
8
+
9
+ Given /^a git repository exists for gem "(.*?)" with version "(.*?)"$/ do |gem_name, version|
10
+ build_gem(gem_name, version)
11
+ cd gem_name
12
+ run_simple 'git init .'
13
+ run_simple 'git config user.email "appraisal@thoughtbot.com"'
14
+ run_simple 'git config user.name "Appraisal"'
15
+ run_simple 'git add .'
16
+ run_simple 'git commit -a -m "initial commit"'
17
+ dirs.pop
18
+ end
19
+
20
+ Then /^the file "(.*?)" should contain a correct ruby directive$/ do |filename|
21
+ in_current_dir do
22
+ File.read(filename).should match(/^ruby "#{RUBY_VERSION}"$/)
30
23
  end
31
24
  end