Class: Gemika::Matrix
- Inherits:
-
Object
- Object
- Gemika::Matrix
- Defined in:
- lib/gemika/matrix.rb,
lib/gemika/matrix/github_actions_config.rb
Defined Under Namespace
Classes: Row
Constant Summary collapse
- COLOR_HEAD =
"\e[44;97m"- COLOR_WARNING =
"\e[33m"- COLOR_SUCCESS =
"\e[32m"- COLOR_FAILURE =
"\e[31m"- COLOR_RESET =
"\e[0m"
Instance Attribute Summary collapse
-
#current_ruby ⇒ Object
readonly
Returns the value of attribute current_ruby.
-
#rows ⇒ Object
readonly
Returns the value of attribute rows.
Class Method Summary collapse
-
.from_github_actions_yml(options = {}) ⇒ Object
(also: from_ci_config)
Builds a Matrix from the given Github Action workflow definition.
Instance Method Summary collapse
-
#each(&block) ⇒ Object
Runs the given
blockfor each matrix row that is compatible with the current Ruby. -
#initialize(options) ⇒ Matrix
constructor
A new instance of Matrix.
Constructor Details
#initialize(options) ⇒ Matrix
Returns a new instance of Matrix.
114 115 116 117 118 119 120 121 122 123 124 125 126 |
# File 'lib/gemika/matrix.rb', line 114 def initialize() @rows = .fetch(:rows) @silent = .fetch(:silent, false) @io = .fetch(:io, STDOUT) @color = .fetch(:color, true) validate = .fetch(:validate, true) @rows.each(&:validate!) if validate @results = Env.new_ordered_hash @compatible_count = 0 @all_passed = nil @current_ruby = .fetch(:current_ruby, RUBY_VERSION) @aliased_rubys = {} end |
Instance Attribute Details
#current_ruby ⇒ Object (readonly)
Returns the value of attribute current_ruby.
175 176 177 |
# File 'lib/gemika/matrix.rb', line 175 def current_ruby @current_ruby end |
#rows ⇒ Object (readonly)
Returns the value of attribute rows.
175 176 177 |
# File 'lib/gemika/matrix.rb', line 175 def rows @rows end |
Class Method Details
.from_github_actions_yml(options = {}) ⇒ Object Also known as: from_ci_config
Builds a Gemika::Matrix from the given Github Action workflow definition
167 168 169 170 |
# File 'lib/gemika/matrix.rb', line 167 def from_github_actions_yml( = {}) rows = GithubActionsConfig.load_rows() new(.merge(rows: rows)) end |
Instance Method Details
#each(&block) ⇒ Object
Runs the given block for each matrix row that is compatible with the current Ruby.
The row's gemfile will be set as an environment variable, so Bundler will use that gemfile if you shell out in block.
At the end it will print a summary of which rows have passed, failed or were skipped (due to incompatible Ruby version).
135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 |
# File 'lib/gemika/matrix.rb', line 135 def each(&block) @all_passed = true rows.each do |row| gemfile = row.gemfile if row.compatible_with_ruby?(current_ruby) @compatible_count += 1 @aliased_rubys[current_ruby] = row.ruby print_title gemfile gemfile_passed = Env.with_gemfile(gemfile, row, &block) @all_passed &= gemfile_passed if gemfile_passed @results[row] = tint('Success', COLOR_SUCCESS) else @results[row] = tint('Failed', COLOR_FAILURE) end else @results[row] = tint("Skipped", COLOR_WARNING) end end print_summary end |