appraisal 1.0.0.beta3 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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