Class: Vx::Builder::MatrixBuilder
- Inherits:
-
Struct
- Object
- Struct
- Vx::Builder::MatrixBuilder
- 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
-
#build_configuration ⇒ Object
Returns the value of attribute build_configuration.
Instance Method Summary collapse
- #attributes_for_new_build_configurations ⇒ Object
- #attributes_for_new_build_configurations_with_merged_env ⇒ Object
- #attributes_for_new_build_configurations_with_parallel ⇒ Object
- #build ⇒ Object
- #extract_keys_from_builds_configuration ⇒ Object
- #keys ⇒ Object
- #permutate_and_build_pairs ⇒ Object
Instance Attribute Details
#build_configuration ⇒ Object
Returns the value of attribute 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_configurations ⇒ Object
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_env ⇒ Object
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_parallel ⇒ Object
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 |
#build ⇒ Object
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_configuration ⇒ Object
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 |
#keys ⇒ Object
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_pairs ⇒ Object
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 |