13
13
# Usage: `bundle exec ruby appraisal/generate.rb`
14
14
15
15
require 'bundler'
16
- require " appraisal/appraisal"
16
+ require ' appraisal/appraisal'
17
17
18
- require_relative " ../tasks/appraisal_conversion"
18
+ require_relative ' ../tasks/appraisal_conversion'
19
19
20
20
gemfile = Appraisal ::Gemfile . new . tap do |g |
21
21
# Support `eval_gemfile` for `Bundler::DSL`
22
- g . define_singleton_method ( :eval_gemfile ) { |file | load ( file ) }
22
+ g . define_singleton_method ( :eval_gemfile ) { |file | load ( file ) }
23
23
g . load ( Bundler . default_gemfile )
24
24
end
25
25
53
53
# `gem` : optional, gem name to test (gem name can be different from the integration name)
54
54
# `min` : optional, minimum version to test
55
55
# `meta` : optional, additional metadata (development dependencies, etc.) for the group
56
+ #
57
+ # Examples:
58
+ #
59
+ # 1. Generating coverage starting minimal version
60
+ #
61
+ # build_coverage_matrix('devise', min: '3.1.4')
62
+ # ├─ appraise 'devise-min'
63
+ # │ └─ gem 'devise', '= 3.1.4'
64
+ # └─ appraise 'devise-latest'
65
+ # └─ gem 'devise'
66
+ #
67
+ # 2. Generating coverage starting minimal version with some additional gems with
68
+ # specific version tied to only minimal version
69
+ #
70
+ # build_coverage_matrix('devise', min: '3.1.4', meta: { min: { 'bigdecimal' => '1.3.4' } })
71
+ # ├─ appraise 'devise-min'
72
+ # │ ├─ gem 'devise', '= 3.1.4'
73
+ # │ └─ gem 'bigdecimal', '1.3.4'
74
+ # └─ appraise 'devise-latest'
75
+ # └─ gem 'devise'
76
+ #
77
+ # 3. Generating coverage starting minimal version with some additional gems with
78
+ # specific version for all possible combinations
79
+ #
80
+ # build_coverage_matrix('devise', min: '3.1.4', meta: { 'bigdecimal' => '3.0.0' })
81
+ # ├─ appraise 'devise-min'
82
+ # │ ├─ gem 'devise', '= 3.1.4'
83
+ # │ └─ gem 'bigdecimal', '3.0.0'
84
+ # └─ appraise 'devise-latest'
85
+ # ├─ gem 'devise'
86
+ # └─ gem 'bigdecimal', '3.0.0'
56
87
def build_coverage_matrix ( integration , range = [ ] , gem : nil , min : nil , meta : { } )
57
88
gem ||= integration
58
89
90
+ meta_versions = meta . each_with_object ( { } ) do |( key , value ) , memo |
91
+ memo [ key ] = meta . delete ( key ) if value . is_a? ( Hash )
92
+ end
93
+
59
94
if min
60
95
appraise "#{ integration } -min" do
61
96
gem gem , "= #{ min } "
62
- meta . each { |k , v | v ? gem ( k , v ) : gem ( k ) }
97
+
98
+ meta_versions [ :min ] . to_h . merge ( meta ) . each { |k , v | v ? gem ( k , v ) : gem ( k ) }
63
99
end
64
100
end
65
101
66
102
range . each do |n |
67
103
appraise "#{ integration } -#{ n } " do
68
104
gem gem , "~> #{ n } "
69
- meta . each { |k , v | v ? gem ( k , v ) : gem ( k ) }
105
+ meta_versions [ n ] . to_h . merge ( meta ) . each { |k , v | v ? gem ( k , v ) : gem ( k ) }
70
106
end
71
107
end
72
108
@@ -75,7 +111,7 @@ def build_coverage_matrix(integration, range = [], gem: nil, min: nil, meta: {})
75
111
# still requires being updated to pick up the next major version and
76
112
# committing the changes to lockfiles.
77
113
gem gem
78
- meta . each { |k , v | v ? gem ( k , v ) : gem ( k ) }
114
+ meta_versions [ :latest ] . to_h . merge ( meta ) . each { |k , v | v ? gem ( k , v ) : gem ( k ) }
79
115
end
80
116
end
81
117
0 commit comments