Class: Vx::Builder::MatrixBuilder

Inherits:
Struct
  • Object
show all
Defined in:
lib/vx/builder/matrix_builder.rb

Defined Under Namespace

Classes: Pair

Constant Summary collapse

KEYS =
%w{
  rvm
  gemfile
  scala
  jdk
  go
  node_js
  rust
  python

  image
  env_matrix:env
}

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#build_configurationObject

Returns the value of attribute build_configuration

Returns:

  • (Object)

    the current value of build_configuration



3
4
5
# File 'lib/vx/builder/matrix_builder.rb', line 3

def build_configuration
  @build_configuration
end

Instance Method Details

#attributes_for_new_build_configurationsObject



73
74
75
76
77
78
79
80
81
# File 'lib/vx/builder/matrix_builder.rb', line 73

def attributes_for_new_build_configurations
  permutate_and_build_pairs.inject([]) do |ac, pairs|
    ac << pairs.inject({}) do |a,pair|
      a[pair.key] = pair.value
      a
    end
    ac
  end
end

#attributes_for_new_build_configurations_with_merged_envObject



58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/vx/builder/matrix_builder.rb', line 58

def attributes_for_new_build_configurations_with_merged_env
  attrs = attributes_for_new_build_configurations
  attrs = [{}] if attrs.empty?
  attrs.map! do |a|
    env = a["env"]
    a["env"] = {
      "global" => build_configuration.env.global,
      "matrix" => Array(env)
    }
    a
  end

  attrs
end

#attributes_for_new_build_configurations_with_parallelObject



43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/vx/builder/matrix_builder.rb', line 43

def attributes_for_new_build_configurations_with_parallel
  new_attrs = []
  attrs     = attributes_for_new_build_configurations_with_merged_env
  if build_configuration.parallel?
    attrs.each do |attr|
      1.upto(build_configuration.parallel) do |n|
        new_attrs << attr.merge("parallel_job_number" => n - 1)
      end
    end
    new_attrs
  else
    attrs
  end
end

#buildObject



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/vx/builder/matrix_builder.rb', line 23

def build
  @build ||= begin
    if_empty do
      new_attributes = build_configuration.to_hash.dup
      build_configurations = attributes_for_new_build_configurations_with_parallel.map do |matrix_attributes|
        BuildConfiguration.new(
          new_attributes.merge(matrix_attributes),
          matrix_attributes
        )
      end
      filter_required_keys(
        filter_exclude(
          build_configuration.matrix.exclude,
          build_configurations
        )
      )
    end
  end
end

#extract_keys_from_builds_configurationObject



101
102
103
104
105
106
107
108
109
110
111
112
113
# File 'lib/vx/builder/matrix_builder.rb', line 101

def extract_keys_from_builds_configuration
  KEYS.inject([]) do |a, key|
    key_method, key_name = key.split(":")
    key_name ||= key_method

    value = build_configuration.public_send(key_method)
    unless value.empty?
      a << [key_name, value]
    end

    a
  end
end

#keysObject



19
20
21
# File 'lib/vx/builder/matrix_builder.rb', line 19

def keys
  extract_keys_from_builds_configuration.map(&:first).sort
end

#permutate_and_build_pairsObject



83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# File 'lib/vx/builder/matrix_builder.rb', line 83

def permutate_and_build_pairs
  pairs = extract_keys_from_builds_configuration.map do |key_name, values|
    values.map{|v| Pair.new(key_name, v) }
  end

  if not_matrix?(pairs)
    [pairs.flatten]
  else
    array_permutations(pairs).map do |it|
      if it.is_a?(Array)
        it.flatten
      else
        [it]
      end
    end
  end.sort_by(&:to_s)
end