appraisal 1.0.0.beta3 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +2 -8
  3. data/appraisal.gemspec +0 -2
  4. data/bin/appraisal +6 -1
  5. data/features/support/dependency_helpers.rb +27 -21
  6. data/lib/appraisal/appraisal.rb +30 -2
  7. data/lib/appraisal/dependency.rb +3 -5
  8. data/lib/appraisal/dependency_list.rb +21 -0
  9. data/lib/appraisal/gemfile.rb +37 -27
  10. data/lib/appraisal/gemspec.rb +5 -4
  11. data/lib/appraisal/git_source.rb +12 -4
  12. data/lib/appraisal/group.rb +11 -4
  13. data/lib/appraisal/path_source.rb +31 -0
  14. data/lib/appraisal/platform.rb +12 -4
  15. data/lib/appraisal/task.rb +10 -7
  16. data/lib/appraisal/utils.rb +21 -0
  17. data/lib/appraisal/version.rb +1 -1
  18. data/spec/acceptance/appraisals_file_bundler_dsl_compatibility_spec.rb +98 -0
  19. data/spec/acceptance/cli/clean_spec.rb +20 -0
  20. data/spec/acceptance/cli/generate_spec.rb +28 -0
  21. data/spec/acceptance/cli/help_spec.rb +17 -0
  22. data/spec/acceptance/cli/install_spec.rb +70 -0
  23. data/spec/acceptance/cli/run_spec.rb +47 -0
  24. data/spec/acceptance/cli/update_spec.rb +43 -0
  25. data/spec/acceptance/cli/with_no_arguments_spec.rb +16 -0
  26. data/spec/acceptance/gemfile_dsl_compatibility_spec.rb +107 -0
  27. data/spec/acceptance/gemspec_spec.rb +75 -0
  28. data/spec/appraisal/gemspec_spec.rb +22 -0
  29. data/spec/appraisal/utils_spec.rb +24 -0
  30. data/spec/spec_helper.rb +0 -1
  31. data/spec/support/acceptance_test_helpers.rb +73 -35
  32. data/spec/support/dependency_helpers.rb +49 -0
  33. metadata +32 -48
  34. data/features/appraisals.feature +0 -105
  35. data/features/bundler_gemfile_compatibility.feature +0 -70
  36. data/features/gemspec.feature +0 -68
  37. data/features/missing_appraisals_file.feature +0 -23
  38. data/features/step_definitions/dependency_steps.rb +0 -24
  39. data/features/support/aruba.rb +0 -4
  40. data/features/support/env.rb +0 -11
  41. data/spec/acceptance/cli_spec.rb +0 -233
@@ -0,0 +1,75 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Gemspec' do
4
+ before do
5
+ build_appraisal_file
6
+ build_rakefile
7
+ end
8
+
9
+ it 'supports gemspec syntax with default options' do
10
+ build_gemspec
11
+
12
+ write_file 'Gemfile', <<-Gemfile
13
+ gem 'appraisal', path: #{PROJECT_ROOT.inspect}
14
+
15
+ gemspec
16
+ Gemfile
17
+
18
+ run 'bundle install --local'
19
+ run 'appraisal install'
20
+ output = run 'appraisal rake version'
21
+
22
+ expect(output).to include 'Loaded 1.1.0'
23
+ end
24
+
25
+ it 'supports gemspec syntax with path option' do
26
+ build_gemspec 'specdir'
27
+
28
+ write_file 'Gemfile', <<-Gemfile
29
+ gem 'appraisal', path: #{PROJECT_ROOT.inspect}
30
+
31
+ gemspec path: './specdir'
32
+ Gemfile
33
+
34
+ run 'bundle install --local'
35
+ run 'appraisal install'
36
+ output = run 'appraisal rake version'
37
+
38
+ expect(output).to include 'Loaded 1.1.0'
39
+ end
40
+
41
+ def build_appraisal_file
42
+ super <<-Appraisals
43
+ appraise 'stock' do
44
+ gem 'rake'
45
+ end
46
+ Appraisals
47
+ end
48
+
49
+ def build_rakefile
50
+ write_file 'Rakefile', <<-rakefile
51
+ require 'rubygems'
52
+ require 'bundler/setup'
53
+ require 'appraisal'
54
+
55
+ task :version do
56
+ require 'dummy'
57
+ puts "Loaded \#{$dummy_version}"
58
+ end
59
+ rakefile
60
+ end
61
+
62
+ def build_gemspec(path = '.')
63
+ Dir.mkdir("tmp/stage/#{path}") rescue nil
64
+
65
+ write_file File.join(path, 'gemspec_project.gemspec'), <<-gemspec
66
+ Gem::Specification.new do |s|
67
+ s.name = 'gemspec_project'
68
+ s.version = '0.1'
69
+ s.summary = 'Awesome Gem!'
70
+
71
+ s.add_development_dependency('dummy', '1.1.0')
72
+ end
73
+ gemspec
74
+ end
75
+ end
@@ -0,0 +1,22 @@
1
+ require 'spec_helper'
2
+ require 'appraisal/gemspec'
3
+
4
+ describe Appraisal::Gemspec do
5
+ describe '#to_s' do
6
+ context 'when path is an absolute path' do
7
+ it 'returns the path as-is' do
8
+ gemspec = Appraisal::Gemspec.new(path: '/tmp')
9
+
10
+ expect(gemspec.to_s).to eq 'gemspec :path => "/tmp"'
11
+ end
12
+ end
13
+
14
+ context 'when path contains "./"' do
15
+ it 'strips out "./"' do
16
+ gemspec = Appraisal::Gemspec.new(path: './tmp/./appraisal././')
17
+
18
+ expect(gemspec.to_s).to eq 'gemspec :path => "../tmp/appraisal./"'
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+ require 'appraisal/utils'
3
+
4
+ describe Appraisal::Utils do
5
+ describe '.format_string' do
6
+ it 'prints out a nice looking hash without a brackets' do
7
+ hash = { :foo => 'bar', 'baz' => { :ball => 'boo' } }
8
+
9
+ expect(Appraisal::Utils.format_string(hash)).to eq(
10
+ ':foo => "bar", "baz" => { :ball => "boo" }'
11
+ )
12
+ end
13
+ end
14
+
15
+ describe '.format_arguments' do
16
+ it 'prints out arguments without enclosing square brackets' do
17
+ arguments = [:foo, bar: { baz: 'ball' }]
18
+
19
+ expect(Appraisal::Utils.format_arguments(arguments)).to eq(
20
+ ':foo, :bar => { :baz => "ball" }'
21
+ )
22
+ end
23
+ end
24
+ end
@@ -1,6 +1,5 @@
1
1
  require 'rubygems'
2
2
  require 'bundler/setup'
3
- require 'aruba/api'
4
3
  require './spec/support/acceptance_test_helpers'
5
4
 
6
5
  PROJECT_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..')).freeze
@@ -1,23 +1,25 @@
1
1
  require 'rspec/expectations/expectation_target'
2
2
  require 'active_support/core_ext/string/strip'
3
3
  require 'active_support/concern'
4
- require './features/support/dependency_helpers'
4
+ require 'appraisal/utils'
5
+ require_relative 'dependency_helpers'
5
6
 
6
7
  module AcceptanceTestHelpers
7
8
  extend ActiveSupport::Concern
8
- include Aruba::Api
9
9
  include DependencyHelpers
10
10
 
11
+ BUNDLER_ENVIRONMENT_VARIABLES = %w(RUBYOPT BUNDLE_PATH BUNDLE_BIN_PATH
12
+ BUNDLE_GEMFILE)
13
+
11
14
  included do
12
15
  metadata[:type] = :acceptance
13
16
 
14
17
  before :all do
15
- initialize_aruba_instance_variables
16
18
  build_default_dummy_gems
17
19
  end
18
20
 
19
21
  after :all do
20
- cleanup_default_gems
22
+ cleanup_gem_home
21
23
  end
22
24
 
23
25
  before parallel: true do
@@ -28,13 +30,38 @@ module AcceptanceTestHelpers
28
30
 
29
31
  before do
30
32
  cleanup_artifacts
33
+ save_environment_variables
34
+ unset_bundler_environment_variables
35
+ add_binstub_path
31
36
  build_default_gemfile
32
- unset_bundler_env_vars
33
- ENV["GEM_PATH"] = [TMP_GEM_ROOT, ENV["GEM_PATH"]].join(":")
34
37
  end
35
38
 
36
39
  after do
37
- restore_env
40
+ restore_environment_variables
41
+ end
42
+ end
43
+
44
+ def save_environment_variables
45
+ @original_environment_variables = {}
46
+
47
+ (BUNDLER_ENVIRONMENT_VARIABLES + %w(PATH)).each do |key|
48
+ @original_environment_variables[key] = ENV[key]
49
+ end
50
+ end
51
+
52
+ def unset_bundler_environment_variables
53
+ BUNDLER_ENVIRONMENT_VARIABLES.each do |key|
54
+ ENV[key] = nil
55
+ end
56
+ end
57
+
58
+ def add_binstub_path
59
+ ENV['PATH'] = "bin:#{ENV['PATH']}"
60
+ end
61
+
62
+ def restore_environment_variables
63
+ @original_environment_variables.each_pair do |key, value|
64
+ ENV[key] = value
38
65
  end
39
66
  end
40
67
 
@@ -47,15 +74,15 @@ module AcceptanceTestHelpers
47
74
  end
48
75
 
49
76
  def add_gemspec_to_gemfile
50
- append_to_file 'gemfile', 'gemspec'
77
+ in_test_directory do
78
+ File.open('Gemfile', 'a') { |file| file.puts 'gemspec' }
79
+ end
51
80
  end
52
81
 
53
82
  def build_gemspec
54
- gem_name = dirs.last
55
-
56
- write_file "#{gem_name}.gemspec", <<-gemspec
83
+ write_file "stage.gemspec", <<-gemspec
57
84
  Gem::Specification.new do |s|
58
- s.name = '#{gem_name}'
85
+ s.name = 'stage'
59
86
  s.version = '0.1'
60
87
  s.summary = 'Awesome Gem!'
61
88
  end
@@ -67,41 +94,29 @@ module AcceptanceTestHelpers
67
94
  end
68
95
 
69
96
  def file(path)
70
- Pathname.new(current_dir) + path
97
+ Pathname.new(current_directory) + path
71
98
  end
72
99
 
73
100
  def be_exists
74
101
  be_exist
75
102
  end
76
103
 
77
- def run_simple(command, fail_on_error = true)
78
- super "bundle exec #{command}", fail_on_error
79
- end
104
+ private
80
105
 
81
- def output_from(command)
82
- super "bundle exec #{command}"
83
- rescue ArgumentError
84
- super command
106
+ def current_directory
107
+ File.expand_path('tmp/stage')
85
108
  end
86
109
 
87
- private
88
-
89
- def cleanup_artifacts
90
- FileUtils.rm_rf(current_dir)
110
+ def write_file(filename, content)
111
+ in_test_directory { File.open(filename, 'w') { |file| file.puts content } }
91
112
  end
92
113
 
93
- def cleanup_default_gems
94
- FileUtils.rm_rf(TMP_GEM_ROOT)
114
+ def cleanup_artifacts
115
+ FileUtils.rm_rf current_directory
95
116
  end
96
117
 
97
- def initialize_aruba_instance_variables
98
- @announce_stdout = nil
99
- @announce_stderr = nil
100
- @announce_cmd = nil
101
- @announce_dir = nil
102
- @announce_env = nil
103
- @aruba_timeout_seconds = 60
104
- @aruba_io_wait_seconds = nil
118
+ def cleanup_gem_home
119
+ FileUtils.rm_rf TMP_GEM_ROOT
105
120
  end
106
121
 
107
122
  def build_default_dummy_gems
@@ -116,8 +131,31 @@ module AcceptanceTestHelpers
116
131
  build_gemfile <<-Gemfile
117
132
  source 'https://rubygems.org'
118
133
 
119
- gem 'dummy'
120
134
  gem 'appraisal', :path => '#{PROJECT_ROOT}'
121
135
  Gemfile
136
+
137
+ in_test_directory do
138
+ `bundle install --binstubs --local`
139
+ end
140
+ end
141
+
142
+ def in_test_directory(&block)
143
+ FileUtils.mkdir_p current_directory
144
+ Dir.chdir current_directory, &block
145
+ end
146
+
147
+ def run(command, raise_on_error = true)
148
+ in_test_directory do
149
+ `#{command}`.tap do |output|
150
+ exitstatus = $?.exitstatus
151
+
152
+ if raise_on_error && exitstatus != 0
153
+ raise RuntimeError, <<-error_message.strip_heredoc
154
+ Command #{command.inspect} exited with status #{exitstatus}. Output:
155
+ #{output.gsub(/^/, ' ')}
156
+ error_message
157
+ end
158
+ end
159
+ end
122
160
  end
123
161
  end
@@ -0,0 +1,49 @@
1
+ module DependencyHelpers
2
+ def build_gem(gem_name, version = '1.0.0')
3
+ ENV['GEM_HOME'] = TMP_GEM_ROOT
4
+
5
+ unless File.exist? "tmp/gems/gems/#{gem_name}-#{version}"
6
+ FileUtils.mkdir_p "tmp/gems/#{gem_name}/lib"
7
+
8
+ FileUtils.cd "tmp/gems/#{gem_name}" do
9
+ gemspec = "#{gem_name}.gemspec"
10
+ lib_file = "lib/#{gem_name}.rb"
11
+
12
+ File.open gemspec, 'w' do |file|
13
+ file.puts <<-gemspec
14
+ Gem::Specification.new do |s|
15
+ s.name = #{gem_name.inspect}
16
+ s.version = #{version.inspect}
17
+ s.authors = 'Mr. Smith'
18
+ s.summary = 'summary'
19
+ s.files = #{lib_file.inspect}
20
+ end
21
+ gemspec
22
+ end
23
+
24
+ File.open lib_file, 'w' do |file|
25
+ file.puts "$#{gem_name}_version = '#{version}'"
26
+ end
27
+
28
+ `gem build #{gemspec} 2>&1`
29
+ `gem install -lN #{gem_name}-#{version}.gem -v #{version} 2>&1`
30
+ end
31
+ end
32
+ end
33
+
34
+ def build_gems(gems)
35
+ gems.each { |gem| build_gem(gem) }
36
+ end
37
+
38
+ def build_git_gem(gem_name, version = '1.0.0')
39
+ build_gem gem_name, version
40
+
41
+ Dir.chdir "tmp/gems/#{gem_name}" do
42
+ `git init .`
43
+ `git config user.email "appraisal@thoughtbot.com"`
44
+ `git config user.name "Appraisal"`
45
+ `git add .`
46
+ `git commit -a -m "initial commit"`
47
+ end
48
+ end
49
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: appraisal
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.beta3
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joe Ferris
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-02-28 00:00:00.000000000 Z
12
+ date: 2014-04-02 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
@@ -67,20 +67,6 @@ dependencies:
67
67
  - - ">="
68
68
  - !ruby/object:Gem::Version
69
69
  version: 3.2.13
70
- - !ruby/object:Gem::Dependency
71
- name: cucumber
72
- requirement: !ruby/object:Gem::Requirement
73
- requirements:
74
- - - "~>"
75
- - !ruby/object:Gem::Version
76
- version: '1.0'
77
- type: :development
78
- prerelease: false
79
- version_requirements: !ruby/object:Gem::Requirement
80
- requirements:
81
- - - "~>"
82
- - !ruby/object:Gem::Version
83
- version: '1.0'
84
70
  - !ruby/object:Gem::Dependency
85
71
  name: rspec
86
72
  requirement: !ruby/object:Gem::Requirement
@@ -95,20 +81,6 @@ dependencies:
95
81
  - - "~>"
96
82
  - !ruby/object:Gem::Version
97
83
  version: '2.6'
98
- - !ruby/object:Gem::Dependency
99
- name: aruba
100
- requirement: !ruby/object:Gem::Requirement
101
- requirements:
102
- - - "~>"
103
- - !ruby/object:Gem::Version
104
- version: 0.5.1
105
- type: :development
106
- prerelease: false
107
- version_requirements: !ruby/object:Gem::Requirement
108
- requirements:
109
- - - "~>"
110
- - !ruby/object:Gem::Version
111
- version: 0.5.1
112
84
  description: Appraisal integrates with bundler and rake to test your library against
113
85
  different versions of dependencies in repeatable scenarios called "appraisals."
114
86
  email:
@@ -129,35 +101,42 @@ files:
129
101
  - Rakefile
130
102
  - appraisal.gemspec
131
103
  - bin/appraisal
132
- - features/appraisals.feature
133
- - features/bundler_gemfile_compatibility.feature
134
- - features/gemspec.feature
135
- - features/missing_appraisals_file.feature
136
- - features/step_definitions/dependency_steps.rb
137
- - features/support/aruba.rb
138
104
  - features/support/dependency_helpers.rb
139
- - features/support/env.rb
140
105
  - lib/appraisal.rb
141
106
  - lib/appraisal/appraisal.rb
142
107
  - lib/appraisal/cli.rb
143
108
  - lib/appraisal/command.rb
144
109
  - lib/appraisal/dependency.rb
110
+ - lib/appraisal/dependency_list.rb
145
111
  - lib/appraisal/errors.rb
146
112
  - lib/appraisal/file.rb
147
113
  - lib/appraisal/gemfile.rb
148
114
  - lib/appraisal/gemspec.rb
149
115
  - lib/appraisal/git_source.rb
150
116
  - lib/appraisal/group.rb
117
+ - lib/appraisal/path_source.rb
151
118
  - lib/appraisal/platform.rb
152
119
  - lib/appraisal/task.rb
153
120
  - lib/appraisal/utils.rb
154
121
  - lib/appraisal/version.rb
155
- - spec/acceptance/cli_spec.rb
122
+ - spec/acceptance/appraisals_file_bundler_dsl_compatibility_spec.rb
123
+ - spec/acceptance/cli/clean_spec.rb
124
+ - spec/acceptance/cli/generate_spec.rb
125
+ - spec/acceptance/cli/help_spec.rb
126
+ - spec/acceptance/cli/install_spec.rb
127
+ - spec/acceptance/cli/run_spec.rb
128
+ - spec/acceptance/cli/update_spec.rb
129
+ - spec/acceptance/cli/with_no_arguments_spec.rb
130
+ - spec/acceptance/gemfile_dsl_compatibility_spec.rb
131
+ - spec/acceptance/gemspec_spec.rb
156
132
  - spec/appraisal/appraisal_spec.rb
157
133
  - spec/appraisal/file_spec.rb
158
134
  - spec/appraisal/gemfile_spec.rb
135
+ - spec/appraisal/gemspec_spec.rb
136
+ - spec/appraisal/utils_spec.rb
159
137
  - spec/spec_helper.rb
160
138
  - spec/support/acceptance_test_helpers.rb
139
+ - spec/support/dependency_helpers.rb
161
140
  homepage: http://github.com/thoughtbot/appraisal
162
141
  licenses:
163
142
  - MIT
@@ -173,9 +152,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
173
152
  version: '0'
174
153
  required_rubygems_version: !ruby/object:Gem::Requirement
175
154
  requirements:
176
- - - ">"
155
+ - - ">="
177
156
  - !ruby/object:Gem::Version
178
- version: 1.3.1
157
+ version: '0'
179
158
  requirements: []
180
159
  rubyforge_project:
181
160
  rubygems_version: 2.2.2
@@ -183,17 +162,22 @@ signing_key:
183
162
  specification_version: 4
184
163
  summary: Find out what your Ruby gems are worth
185
164
  test_files:
186
- - features/appraisals.feature
187
- - features/bundler_gemfile_compatibility.feature
188
- - features/gemspec.feature
189
- - features/missing_appraisals_file.feature
190
- - features/step_definitions/dependency_steps.rb
191
- - features/support/aruba.rb
192
165
  - features/support/dependency_helpers.rb
193
- - features/support/env.rb
194
- - spec/acceptance/cli_spec.rb
166
+ - spec/acceptance/appraisals_file_bundler_dsl_compatibility_spec.rb
167
+ - spec/acceptance/cli/clean_spec.rb
168
+ - spec/acceptance/cli/generate_spec.rb
169
+ - spec/acceptance/cli/help_spec.rb
170
+ - spec/acceptance/cli/install_spec.rb
171
+ - spec/acceptance/cli/run_spec.rb
172
+ - spec/acceptance/cli/update_spec.rb
173
+ - spec/acceptance/cli/with_no_arguments_spec.rb
174
+ - spec/acceptance/gemfile_dsl_compatibility_spec.rb
175
+ - spec/acceptance/gemspec_spec.rb
195
176
  - spec/appraisal/appraisal_spec.rb
196
177
  - spec/appraisal/file_spec.rb
197
178
  - spec/appraisal/gemfile_spec.rb
179
+ - spec/appraisal/gemspec_spec.rb
180
+ - spec/appraisal/utils_spec.rb
198
181
  - spec/spec_helper.rb
199
182
  - spec/support/acceptance_test_helpers.rb
183
+ - spec/support/dependency_helpers.rb