appraisal 1.0.3 → 2.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.
@@ -22,7 +22,7 @@ module Appraisal
22
22
 
23
23
  def exported_options
24
24
  @options.merge(
25
- path: Utils.prefix_path(@options[:path])
25
+ :path => Utils.prefix_path(@options[:path])
26
26
  )
27
27
  end
28
28
  end
@@ -1,42 +1,30 @@
1
- require 'appraisal/dependency_list'
1
+ require "appraisal/bundler_dsl"
2
2
  require 'appraisal/utils'
3
3
 
4
4
  module Appraisal
5
- class GitSource
5
+ class GitSource < BundlerDSL
6
6
  def initialize(source, options = {})
7
- @dependencies = DependencyList.new
7
+ super()
8
8
  @source = source
9
9
  @options = options
10
10
  end
11
11
 
12
- def gem(name, *requirements)
13
- @dependencies.add(name, requirements)
14
- end
15
-
16
- def run(&block)
17
- instance_exec(&block)
18
- end
19
-
20
12
  def to_s
21
- dependencies = @dependencies.to_s.strip.gsub(/^/, ' ')
22
-
23
13
  if @options.empty?
24
- "git #{Utils.prefix_path(@source).inspect} do\n#{dependencies}\nend"
14
+ "git #{Utils.prefix_path(@source).inspect} do\n#{indent(super)}\nend"
25
15
  else
26
16
  "git #{Utils.prefix_path(@source).inspect}, #{Utils.format_string(@options)} do\n" +
27
- "#{dependencies}\nend"
17
+ "#{indent(super)}\nend"
28
18
  end
29
19
  end
30
20
 
31
21
  # :nodoc:
32
22
  def for_dup
33
- dependencies = @dependencies.for_dup.strip.gsub(/^/, ' ')
34
-
35
23
  if @options.empty?
36
- "git #{@source.inspect} do\n#{dependencies}\nend"
24
+ "git #{@source.inspect} do\n#{indent(super)}\nend"
37
25
  else
38
26
  "git #{@source.inspect}, #{Utils.format_string(@options)} do\n" +
39
- "#{dependencies}\nend"
27
+ "#{indent(super)}\nend"
40
28
  end
41
29
  end
42
30
  end
@@ -1,51 +1,24 @@
1
- require 'appraisal/dependency_list'
1
+ require "appraisal/bundler_dsl"
2
2
  require 'appraisal/utils'
3
3
 
4
4
  module Appraisal
5
- class Group
5
+ class Group < BundlerDSL
6
6
  def initialize(group_names)
7
- @dependencies = DependencyList.new
7
+ super()
8
8
  @group_names = group_names
9
- @gemspec = nil
10
- end
11
-
12
- def run(&block)
13
- instance_exec(&block)
14
- end
15
-
16
- def gem(name, *requirements)
17
- @dependencies.add(name, requirements)
18
- end
19
-
20
- def gemspec(options = {})
21
- @gemspec = Gemspec.new(options)
22
9
  end
23
10
 
24
11
  def to_s
25
- formatted_output dependencies_list
12
+ formatted_output indent(super)
26
13
  end
27
14
 
28
15
  # :nodoc:
29
16
  def for_dup
30
- formatted_output dependencies_list_for_dup
17
+ formatted_output indent(super)
31
18
  end
32
19
 
33
20
  private
34
21
 
35
- def dependencies_list
36
- Utils.join_parts([
37
- dependencies_entry,
38
- gemspec_entry
39
- ]).gsub(/^/, " ")
40
- end
41
-
42
- def dependencies_list_for_dup
43
- Utils.join_parts([
44
- dependencies_entry,
45
- gemspec_entry_for_dup
46
- ]).gsub(/^/, " ")
47
- end
48
-
49
22
  def formatted_output(output_dependencies)
50
23
  <<-OUTPUT.strip
51
24
  group #{Utils.format_arguments(@group_names)} do
@@ -53,19 +26,5 @@ group #{Utils.format_arguments(@group_names)} do
53
26
  end
54
27
  OUTPUT
55
28
  end
56
-
57
- def dependencies_entry
58
- @dependencies.to_s
59
- end
60
-
61
- def gemspec_entry
62
- @gemspec.to_s
63
- end
64
-
65
- def gemspec_entry_for_dup
66
- if @gemspec
67
- @gemspec.for_dup
68
- end
69
- end
70
29
  end
71
30
  end
@@ -1,42 +1,30 @@
1
- require 'appraisal/dependency_list'
1
+ require "appraisal/bundler_dsl"
2
2
  require 'appraisal/utils'
3
3
 
4
4
  module Appraisal
5
- class PathSource
5
+ class PathSource < BundlerDSL
6
6
  def initialize(source, options = {})
7
- @dependencies = DependencyList.new
7
+ super()
8
8
  @source = source
9
9
  @options = options
10
10
  end
11
11
 
12
- def gem(name, *requirements)
13
- @dependencies.add(name, requirements)
14
- end
15
-
16
- def run(&block)
17
- instance_exec(&block)
18
- end
19
-
20
12
  def to_s
21
- dependencies = @dependencies.to_s.strip.gsub(/^/, ' ')
22
-
23
13
  if @options.empty?
24
- "path #{Utils.prefix_path(@source).inspect} do\n#{dependencies}\nend"
14
+ "path #{Utils.prefix_path(@source).inspect} do\n#{indent(super)}\nend"
25
15
  else
26
16
  "path #{Utils.prefix_path(@source).inspect}, #{Utils.format_string(@options)} do\n" +
27
- "#{dependencies}\nend"
17
+ "#{indent(super)}\nend"
28
18
  end
29
19
  end
30
20
 
31
21
  # :nodoc:
32
22
  def for_dup
33
- dependencies = @dependencies.for_dup.strip.gsub(/^/, ' ')
34
-
35
23
  if @options.empty?
36
- "path #{@source.inspect} do\n#{dependencies}\nend"
24
+ "path #{@source.inspect} do\n#{indent(super)}\nend"
37
25
  else
38
26
  "path #{@source.inspect}, #{Utils.format_string(@options)} do\n" +
39
- "#{dependencies}\nend"
27
+ "#{indent(super)}\nend"
40
28
  end
41
29
  end
42
30
  end
@@ -1,28 +1,30 @@
1
- require 'appraisal/dependency_list'
1
+ require "appraisal/bundler_dsl"
2
2
  require 'appraisal/utils'
3
3
 
4
4
  module Appraisal
5
- class Platform
5
+ class Platform < BundlerDSL
6
6
  def initialize(platform_names)
7
- @dependencies = DependencyList.new
7
+ super()
8
8
  @platform_names = platform_names
9
9
  end
10
10
 
11
- def gem(name, *requirements)
12
- @dependencies.add(name, requirements)
11
+ def to_s
12
+ formatted_output indent(super)
13
13
  end
14
14
 
15
- def run(&block)
16
- instance_exec(&block)
15
+ # :nodoc:
16
+ def for_dup
17
+ formatted_output indent(super)
17
18
  end
18
19
 
19
- def to_s
20
- "platforms #{Utils.format_arguments(@platform_names)} do\n" +
21
- @dependencies.to_s.strip.gsub(/^/, ' ') +
22
- "\nend"
23
- end
20
+ private
24
21
 
25
- # :nodoc:
26
- alias_method :for_dup, :to_s
22
+ def formatted_output(output_dependencies)
23
+ <<-OUTPUT.strip
24
+ platforms #{Utils.format_arguments(@platform_names)} do
25
+ #{output_dependencies}
26
+ end
27
+ OUTPUT
28
+ end
27
29
  end
28
30
  end
@@ -0,0 +1,65 @@
1
+ require "appraisal/file"
2
+ require "yaml"
3
+
4
+ module Appraisal
5
+ class TravisCIHelper
6
+ NO_CONFIGURATION_WARNING = <<-WARNING.strip
7
+ Note: Run with --travis to generate Travis CI configuration.
8
+ WARNING
9
+
10
+ INVALID_CONFIGURATION_WARNING = <<-WARNING.strip.gsub(/\s+/, " ")
11
+ Warning: Your gemfiles directive in .travis.yml is incorrect. Run
12
+ `appraisal generate --travis` to get the correct configuration.
13
+ WARNING
14
+
15
+ def self.display_instruction
16
+ puts "# Put this in your .travis.yml"
17
+ puts "gemfiles:"
18
+
19
+ File.each do |appraisal|
20
+ puts " - #{appraisal.relative_gemfile_path}"
21
+ end
22
+ end
23
+
24
+ def self.validate_configuration_file
25
+ ConfigurationValidator.new.validate
26
+ end
27
+
28
+ class ConfigurationValidator
29
+ CONFIGURATION_FILE = ".travis.yml"
30
+
31
+ def validate
32
+ if has_configuration_file?
33
+ if has_no_gemfiles_configuration?
34
+ $stderr.puts(NO_CONFIGURATION_WARNING)
35
+ elsif has_invalid_gemfiles_configuration?
36
+ $stderr.puts(INVALID_CONFIGURATION_WARNING)
37
+ end
38
+ end
39
+ end
40
+
41
+ private
42
+
43
+ def has_configuration_file?
44
+ ::File.exist?(CONFIGURATION_FILE)
45
+ end
46
+
47
+ def has_no_gemfiles_configuration?
48
+ !(configuration && configuration.has_key?("gemfiles"))
49
+ end
50
+
51
+ def has_invalid_gemfiles_configuration?
52
+ if configuration && configuration["gemfiles"]
53
+ appraisal_paths =
54
+ File.new.appraisals.map(&:relative_gemfile_path).sort
55
+ travis_gemfile_paths = configuration["gemfiles"].sort
56
+ appraisal_paths != travis_gemfile_paths
57
+ end
58
+ end
59
+
60
+ def configuration
61
+ YAML.load_file(CONFIGURATION_FILE) rescue nil
62
+ end
63
+ end
64
+ end
65
+ end
@@ -1,3 +1,3 @@
1
1
  module Appraisal
2
- VERSION = '1.0.3'.freeze
2
+ VERSION = '2.0.0'.freeze
3
3
  end
@@ -2,7 +2,7 @@ require 'spec_helper'
2
2
 
3
3
  describe 'Appraisals file Bundler DSL compatibility' do
4
4
  it 'supports all Bundler DSL in Appraisals file' do
5
- build_gems %w(bagel orange_juice milk waffle)
5
+ build_gems %w(bagel orange_juice milk waffle coffee ham)
6
6
  build_git_gem 'egg'
7
7
 
8
8
  build_gemfile <<-Gemfile
@@ -25,9 +25,13 @@ describe 'Appraisals file Bundler DSL compatibility' do
25
25
 
26
26
  platforms :ruby, :jruby do
27
27
  gem 'milk'
28
+
29
+ group :lunch do
30
+ gem "coffee"
31
+ end
28
32
  end
29
33
 
30
- gem 'appraisal', path: #{PROJECT_ROOT.inspect}
34
+ gem 'appraisal', :path => #{PROJECT_ROOT.inspect}
31
35
  Gemfile
32
36
 
33
37
  build_appraisal_file <<-Appraisals
@@ -47,6 +51,10 @@ describe 'Appraisals file Bundler DSL compatibility' do
47
51
 
48
52
  group :breakfast do
49
53
  gem 'bacon'
54
+
55
+ platforms :rbx do
56
+ gem "ham"
57
+ end
50
58
  end
51
59
 
52
60
  platforms :ruby, :jruby do
@@ -85,11 +93,19 @@ describe 'Appraisals file Bundler DSL compatibility' do
85
93
  group :breakfast do
86
94
  gem "orange_juice"
87
95
  gem "bacon"
96
+
97
+ platforms :rbx do
98
+ gem "ham"
99
+ end
88
100
  end
89
101
 
90
102
  platforms :ruby, :jruby do
91
103
  gem "milk"
92
104
  gem "yoghurt"
105
+
106
+ group :lunch do
107
+ gem "coffee"
108
+ end
93
109
  end
94
110
 
95
111
  gemspec :path => "../"
@@ -0,0 +1,22 @@
1
+ require "spec_helper"
2
+
3
+ describe "Bundle with custom path" do
4
+ it "supports --path option" do
5
+ build_gemfile <<-Gemfile
6
+ source "https://rubygems.org"
7
+
8
+ gem 'appraisal', :path => #{PROJECT_ROOT.inspect}
9
+ Gemfile
10
+
11
+ build_appraisal_file <<-Appraisals
12
+ appraise "breakfast" do
13
+ end
14
+ Appraisals
15
+
16
+ run %(bundle install --path="vendor/bundle")
17
+ output = run "appraisal install"
18
+
19
+ expect(file "gemfiles/breakfast.gemfile").to be_exists
20
+ expect(output).to include("Successfully installed bundler")
21
+ end
22
+ end
@@ -2,6 +2,12 @@ require 'spec_helper'
2
2
 
3
3
  describe 'CLI', 'appraisal generate' do
4
4
  it 'generates the gemfiles' do
5
+ build_gemfile <<-Gemfile
6
+ source "https://rubygems.org"
7
+
8
+ gem "appraisal", :path => "#{PROJECT_ROOT}"
9
+ Gemfile
10
+
5
11
  build_appraisal_file <<-Appraisal
6
12
  appraise '1.0.0' do
7
13
  gem 'dummy', '1.0.0'
@@ -40,7 +40,7 @@ describe 'CLI', 'appraisal install' do
40
40
  current_directory
41
41
  end
42
42
 
43
- context 'with job size', parallel: true do
43
+ context 'with job size', :parallel => true do
44
44
  before do
45
45
  build_appraisal_file <<-Appraisal
46
46
  appraise '1.0.0' do
@@ -0,0 +1,28 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'CLI', 'appraisal list' do
4
+ it 'prints list of appraisals' do
5
+ build_appraisal_file <<-Appraisal
6
+ appraise '1.0.0' do
7
+ gem 'dummy', '1.0.0'
8
+ end
9
+ appraise '2.0.0' do
10
+ gem 'dummy', '1.0.0'
11
+ end
12
+ appraise '1.1.0' do
13
+ gem 'dummy', '1.0.0'
14
+ end
15
+ Appraisal
16
+
17
+ output = run 'appraisal list'
18
+
19
+ expect(output).to eq("1.0.0\n2.0.0\n1.1.0\n")
20
+ end
21
+
22
+ it 'prints nothing if there are no appraisals in the file' do
23
+ build_appraisal_file ''
24
+ output = run 'appraisal list'
25
+
26
+ expect(output.length).to eq(0)
27
+ end
28
+ end
@@ -0,0 +1,27 @@
1
+ require "spec_helper"
2
+
3
+ describe "CLI", "appraisal version" do
4
+ context "with version subcommand" do
5
+ it "prints out version string" do
6
+ output = run "appraisal version"
7
+
8
+ expect(output).to include("Appraisal #{Appraisal::VERSION}")
9
+ end
10
+ end
11
+
12
+ context "with -v flag" do
13
+ it "prints out version string" do
14
+ output = run "appraisal -v"
15
+
16
+ expect(output).to include("Appraisal #{Appraisal::VERSION}")
17
+ end
18
+ end
19
+
20
+ context "with --version flag" do
21
+ it "prints out version string" do
22
+ output = run "appraisal --version"
23
+
24
+ expect(output).to include("Appraisal #{Appraisal::VERSION}")
25
+ end
26
+ end
27
+ end