vx-builder 0.5.5 → 0.5.6

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4f650bfd08d5d32ad96835d0d46fae32ba4b1134
4
- data.tar.gz: 42bd4a8612afed0483a6c72279195e897d1777f7
3
+ metadata.gz: ce0dadf1e545f6b25be85c1bc67f77eb50462166
4
+ data.tar.gz: 674500ec89d62b497ef1096a0aa80718d84731bb
5
5
  SHA512:
6
- metadata.gz: 3532ec962dcb4473ace04da98591787e9e26303658b07cfbc9f4f2765fa0fff130d5968c821ac7a458b741cd652d144d7b0875dfd8f220d660905baefbbc5b79
7
- data.tar.gz: 16a9ba6bb7dc93fadaf811b27c6268bfe14d8f1f68e8047720f19812861044cae20e91b44cc80bca2fc94e38765beab43f38f2c53a423d122308dd61e15220bc
6
+ metadata.gz: c2d17b508d3ba8861ddcbfc5480c51b6177a696f2fb057a627223517eed62e42acbb4a31a6465d2c37b1d33d8cf3ffc56ab87246b59c7fe5726006dd73e8034f
7
+ data.tar.gz: e2e2c103a1594b81c02f3bd2bc5cc652d47695b7f3b3c19fec333863aa5a93d57b7e1965808ee4b5b04f9c021c39f702c3f3461c77c4d399fcdab46423a414a9
@@ -57,7 +57,8 @@ module Vx
57
57
  end
58
58
  end
59
59
 
60
- attr_reader :env, :cache, :deploy, :attributes, :deploy_modules, :vexor
60
+ attr_reader :env, :cache, :deploy, :attributes, :deploy_modules, :vexor,
61
+ :matrix
61
62
 
62
63
  def initialize(new_attributes = {}, matrix_attributes = {})
63
64
  new_attributes = {} unless new_attributes.is_a?(Hash)
@@ -65,6 +66,7 @@ module Vx
65
66
  @env = Env.new new_attributes.delete("env")
66
67
  @cache = Cache.new new_attributes.delete("cache")
67
68
  @vexor = Vexor.new new_attributes.delete("vexor")
69
+ @matrix = Matrix.new new_attributes.delete("matrix")
68
70
 
69
71
  @deploy = Deploy.new new_attributes.delete("deploy")
70
72
  @deploy_modules = new_attributes.delete("deploy_modules") || []
@@ -117,6 +119,7 @@ module Vx
117
119
  "env" => env.attributes,
118
120
  "cache" => cache.attributes,
119
121
  "vexor" => vexor.attributes,
122
+ "matrix" => matrix.attributes,
120
123
  "deploy" => deploy.attributes,
121
124
  "deploy_modules" => deploy_modules.map(&:to_hash)
122
125
  )
@@ -0,0 +1,39 @@
1
+ module Vx
2
+ module Builder
3
+ class BuildConfiguration
4
+ class Matrix
5
+
6
+ attr_reader :attributes
7
+
8
+ def initialize(new_env)
9
+ normalize_attributes(new_env)
10
+ end
11
+
12
+ def exclude
13
+ @attributes["exclude"] || []
14
+ end
15
+
16
+ private
17
+
18
+ def normalize_attributes(new_env)
19
+ @attributes = {}
20
+
21
+ if new_env.is_a?(Hash)
22
+ exclude = extract_exclude(new_env)
23
+ @attributes.merge!("exclude" => exclude) if exclude
24
+ end
25
+ end
26
+
27
+ def extract_exclude(env)
28
+ case env['exclude']
29
+ when Hash
30
+ [env['exclude']]
31
+ when Array
32
+ env['exclude'].select{|i| i.is_a?(Hash) }
33
+ end
34
+ end
35
+
36
+ end
37
+ end
38
+ end
39
+ end
@@ -9,6 +9,7 @@ module Vx
9
9
  jdk
10
10
  go
11
11
  node_js
12
+ rust
12
13
 
13
14
  image
14
15
  env_matrix:env
@@ -27,7 +28,12 @@ module Vx
27
28
  matrix_attributes
28
29
  )
29
30
  end
30
- build_configurations.select{|bc| bc.any? }
31
+ filter_not_empty(
32
+ filter_exclude(
33
+ build_configuration.matrix.exclude,
34
+ build_configurations
35
+ )
36
+ )
31
37
  end
32
38
  end
33
39
 
@@ -90,6 +96,26 @@ module Vx
90
96
 
91
97
  private
92
98
 
99
+ def filter_not_empty(configurations)
100
+ configurations.select{|c| c.any? }
101
+ end
102
+
103
+ def filter_exclude(exclude, configurations)
104
+ configurations.select do |c|
105
+ !exclude.any? do |pair|
106
+ pair.all? do |k,v|
107
+ if k == 'env'
108
+ k = 'env_matrix'
109
+ end
110
+
111
+ c.respond_to?(k) &&
112
+ c.public_send(k).is_a?(Array) &&
113
+ c.public_send(k).include?(v)
114
+ end
115
+ end
116
+ end
117
+ end
118
+
93
119
  def not_matrix?(pairs)
94
120
  pairs.all?{|i| i.size == 1 }
95
121
  end
@@ -1,5 +1,5 @@
1
1
  module Vx
2
2
  module Builder
3
- VERSION = "0.5.5"
3
+ VERSION = "0.5.6"
4
4
  end
5
5
  end
@@ -24,6 +24,10 @@ node_js: "0.10"
24
24
 
25
25
  rust: "0.11.0"
26
26
 
27
+ matrix:
28
+ exclude:
29
+ - rvm: 2.1
30
+
27
31
  image:
28
32
  - one
29
33
  - two
@@ -0,0 +1,52 @@
1
+ require 'spec_helper'
2
+
3
+ describe Vx::Builder::BuildConfiguration::Matrix do
4
+ let(:params) { { 'matrix' => ['a', 'b'], 'global' => ['c', 'd'] } }
5
+ let(:env) { described_class.new params }
6
+ subject { env }
7
+
8
+ it "should succeefuly work without matrix" do
9
+ matrix = described_class.new(nil)
10
+ expect(matrix.attributes).to be_empty
11
+
12
+ matrix = described_class.new({})
13
+ expect(matrix.attributes).to be_empty
14
+
15
+ matrix = described_class.new({"foo" => "bar"})
16
+ expect(matrix.attributes).to be_empty
17
+
18
+ matrix = described_class.new(%w{1})
19
+ expect(matrix.attributes).to be_empty
20
+
21
+ matrix = described_class.new('string')
22
+ expect(matrix.attributes).to be_empty
23
+ end
24
+
25
+ it "should build exclude attribute from Hash" do
26
+ attrs = {
27
+ "exclude" => {
28
+ "rvm" => "2.1"
29
+ }
30
+ }
31
+
32
+ matrix = described_class.new attrs
33
+ expect(matrix.attributes).to eq({
34
+ "exclude"=> [{"rvm" => "2.1"}]
35
+ })
36
+ expect(matrix.exclude).to eq([{'rvm' => '2.1'}])
37
+ end
38
+
39
+ it "should build exclude attribute from Array" do
40
+ attrs = {
41
+ "exclude" => [
42
+ {"rvm" => "2.1"},
43
+ 'ignore'
44
+ ]
45
+ }
46
+ matrix = described_class.new attrs
47
+ expect(matrix.attributes).to eq({
48
+ "exclude"=> [{"rvm" => "2.1"}]
49
+ })
50
+ expect(matrix.exclude).to eq([{'rvm' => '2.1'}])
51
+ end
52
+ end
@@ -52,7 +52,8 @@ describe Vx::Builder::BuildConfiguration do
52
52
  "deploy_modules" => [],
53
53
  "bundler_args" => ["--without development"],
54
54
  "before_deploy" => ["echo before deploy"],
55
- "after_deploy" => ["echo after deploy"]
55
+ "after_deploy" => ["echo after deploy"],
56
+ "matrix" => {"exclude"=>[{"rvm"=>2.1}]}
56
57
  }
57
58
  ) }
58
59
  end
@@ -40,6 +40,25 @@ describe Vx::Builder::MatrixBuilder do
40
40
  ).build
41
41
  end
42
42
 
43
+ it "should exclude configurations" do
44
+ yaml = YAML.load %{
45
+ env:
46
+ - B=frontend
47
+ - B=backend
48
+ rvm:
49
+ - 2.0
50
+ - 2.1
51
+ matrix:
52
+ exclude:
53
+ - rvm: 2.1
54
+ env: B=frontend
55
+ }
56
+ configurations = create_matrix(yaml)
57
+ expect(configurations).to have(3).items
58
+ expect(configurations.map(&:rvm)).to eq [[2.0], [2.0], [2.1]]
59
+ expect(configurations.map(&:env_matrix)).to eq [["B=backend"], ["B=frontend"], ["B=backend"]]
60
+ end
61
+
43
62
  it "should generate 12 configurations" do
44
63
  expect(create_matrix).to have(12).items
45
64
  end
@@ -151,6 +170,7 @@ describe Vx::Builder::MatrixBuilder do
151
170
  it { should eq ['rvm:2.0.0'] }
152
171
  end
153
172
  end
173
+
154
174
  end
155
175
 
156
176
  context "attributes_for_new_confgurations_with_merged_env" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vx-builder
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.5
4
+ version: 0.5.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dmitry Galinsky
@@ -129,6 +129,7 @@ files:
129
129
  - lib/vx/builder/build_configuration/deploy/base.rb
130
130
  - lib/vx/builder/build_configuration/deploy/shell.rb
131
131
  - lib/vx/builder/build_configuration/env.rb
132
+ - lib/vx/builder/build_configuration/matrix.rb
132
133
  - lib/vx/builder/build_configuration/vexor.rb
133
134
  - lib/vx/builder/configuration.rb
134
135
  - lib/vx/builder/deploy_builder.rb
@@ -194,6 +195,7 @@ files:
194
195
  - spec/lib/builder/build_configuration/deploy/shell_spec.rb
195
196
  - spec/lib/builder/build_configuration/deploy_spec.rb
196
197
  - spec/lib/builder/build_configuration/env_spec.rb
198
+ - spec/lib/builder/build_configuration/matrix_spec.rb
197
199
  - spec/lib/builder/build_configuration/vexor_spec.rb
198
200
  - spec/lib/builder/build_configuration_spec.rb
199
201
  - spec/lib/builder/configuration_spec.rb
@@ -278,6 +280,7 @@ test_files:
278
280
  - spec/lib/builder/build_configuration/deploy/shell_spec.rb
279
281
  - spec/lib/builder/build_configuration/deploy_spec.rb
280
282
  - spec/lib/builder/build_configuration/env_spec.rb
283
+ - spec/lib/builder/build_configuration/matrix_spec.rb
281
284
  - spec/lib/builder/build_configuration/vexor_spec.rb
282
285
  - spec/lib/builder/build_configuration_spec.rb
283
286
  - spec/lib/builder/configuration_spec.rb