judges 0.60.2 → 0.60.3

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
  SHA256:
3
- metadata.gz: 1b8a66e3d51e2392f0f93f1520b688ab8720a530cffb0a2a929ee51d8a788351
4
- data.tar.gz: edfdf8700f08f118988c1f03c77973d27695895eda3837f15a3ea3b19d2e60ba
3
+ metadata.gz: 26d69625988cf52b0a58b477b38399fa6131ce5ef2fca9e41fad8b3f0d9409e9
4
+ data.tar.gz: 49a6f1decdb471de65037f19d249cd4a5f3208e53a7ca3b9e23a8b7a225dbbe4
5
5
  SHA512:
6
- metadata.gz: f0df3c5a1be9698e575ba9853c51c0e868cdaf2870fba7c6e9fe222be299b58941bec182b2d3f1800f3cf33d1de12c053147290fe5ccb31c10912e3b4ec96036
7
- data.tar.gz: c9bd376f7b8a1aca9add4af2132a77e229a24e4a7eb401bbd4c80f6799170f164b94b9bed0bdbd75ac2f13ad041a975d20bba8ead756a17fb4d628c0c6810090
6
+ metadata.gz: 3222d9734c7ed4e2afe39f61ba91fc9c69ba8ef17ea7639de5112e886a3a5f42cd7a84af6fb024dc96e817750f0cb567f04cd8bf08d93b894500c081323ce5a5
7
+ data.tar.gz: 74bc0d47b424a70b03221212a3626e83999234370003aa97f33d7500c1c2fff7fa175186664c170371ac45a3fa54302ea84920679306079a033f0e0883a8d526
data/Gemfile CHANGED
@@ -7,7 +7,7 @@ source 'https://rubygems.org'
7
7
  gemspec
8
8
 
9
9
  gem 'base64', '~>0.3'
10
- gem 'cucumber', '~>10.0', require: false
10
+ gem 'cucumber', '~>11.0', require: false
11
11
  gem 'diff-lcs', '1.6.2', require: false # GPL
12
12
  gem 'minitest', '~>6.0', require: false
13
13
  gem 'minitest-mock', '~>5.27', require: false
data/Gemfile.lock CHANGED
@@ -26,7 +26,7 @@ GEM
26
26
  specs:
27
27
  addressable (2.8.9)
28
28
  public_suffix (>= 2.0.2, < 8.0)
29
- ansi (1.5.0)
29
+ ansi (1.6.0)
30
30
  ast (2.4.3)
31
31
  backtrace (0.4.1)
32
32
  base64 (0.3.0)
@@ -42,24 +42,24 @@ GEM
42
42
  retries (~> 0.0)
43
43
  tago (~> 0.2)
44
44
  typhoeus (~> 1.4)
45
- bigdecimal (4.0.1)
45
+ bigdecimal (4.1.1)
46
46
  builder (3.3.0)
47
47
  concurrent-ruby (1.3.6)
48
48
  crack (1.0.1)
49
49
  bigdecimal
50
50
  rexml
51
- cucumber (10.2.0)
51
+ cucumber (11.0.0)
52
52
  base64 (~> 0.2)
53
53
  builder (~> 3.2)
54
54
  cucumber-ci-environment (> 9, < 12)
55
- cucumber-core (> 15, < 17)
55
+ cucumber-core (>= 16.2.0, < 17)
56
56
  cucumber-cucumber-expressions (> 17, < 20)
57
- cucumber-html-formatter (> 21, < 23)
57
+ cucumber-html-formatter (> 21, < 24)
58
58
  diff-lcs (~> 1.5)
59
59
  logger (~> 1.6)
60
60
  mini_mime (~> 1.1)
61
61
  multi_test (~> 1.1)
62
- sys-uname (~> 1.3)
62
+ sys-uname (~> 1.5)
63
63
  cucumber-ci-environment (11.0.0)
64
64
  cucumber-core (16.2.0)
65
65
  cucumber-gherkin (> 36, < 40)
@@ -69,9 +69,9 @@ GEM
69
69
  bigdecimal
70
70
  cucumber-gherkin (39.0.0)
71
71
  cucumber-messages (>= 31, < 33)
72
- cucumber-html-formatter (22.3.0)
72
+ cucumber-html-formatter (23.1.0)
73
73
  cucumber-messages (> 23, < 33)
74
- cucumber-messages (32.2.0)
74
+ cucumber-messages (32.3.1)
75
75
  cucumber-tag-expressions (8.1.0)
76
76
  date (3.5.1)
77
77
  decoor (0.1.0)
@@ -109,41 +109,36 @@ GEM
109
109
  net-http (~> 0.5)
110
110
  faraday-retry (2.4.0)
111
111
  faraday (~> 2.0)
112
- ffi (1.17.3-aarch64-linux-gnu)
113
- ffi (1.17.3-aarch64-linux-musl)
114
- ffi (1.17.3-arm-linux-gnu)
115
- ffi (1.17.3-arm-linux-musl)
116
- ffi (1.17.3-arm64-darwin)
117
- ffi (1.17.3-x64-mingw-ucrt)
118
- ffi (1.17.3-x86_64-darwin)
119
- ffi (1.17.3-x86_64-linux-gnu)
120
- ffi (1.17.3-x86_64-linux-musl)
112
+ ffi (1.17.4-aarch64-linux-gnu)
113
+ ffi (1.17.4-aarch64-linux-musl)
114
+ ffi (1.17.4-arm-linux-gnu)
115
+ ffi (1.17.4-arm-linux-musl)
116
+ ffi (1.17.4-arm64-darwin)
117
+ ffi (1.17.4-x64-mingw-ucrt)
118
+ ffi (1.17.4-x86_64-darwin)
119
+ ffi (1.17.4-x86_64-linux-gnu)
120
+ ffi (1.17.4-x86_64-linux-musl)
121
121
  gli (2.22.2)
122
122
  ostruct
123
123
  hashdiff (1.2.1)
124
124
  iri (0.11.8)
125
- json (2.18.1)
126
- json-schema (6.1.0)
127
- addressable (~> 2.8)
128
- bigdecimal (>= 3.1, < 5)
125
+ json (2.19.3)
129
126
  language_server-protocol (3.17.0.5)
130
127
  lint_roller (1.1.0)
131
128
  logger (1.7.0)
132
129
  loog (0.8.0)
133
130
  ellipsized
134
131
  logger (~> 1.0)
135
- mcp (0.7.1)
136
- json-schema (>= 4.1)
137
132
  memoist3 (1.0.0)
138
133
  mini_mime (1.1.5)
139
- minitest (6.0.2)
134
+ minitest (6.0.5)
140
135
  drb (~> 2.0)
141
136
  prism (~> 1.5)
142
137
  minitest-mock (5.27.0)
143
- minitest-reporters (1.7.1)
138
+ minitest-reporters (1.8.0)
144
139
  ansi
145
140
  builder
146
- minitest (>= 5.0)
141
+ minitest (>= 5.0, < 7)
147
142
  ruby-progressbar
148
143
  minitest-retry (0.3.1)
149
144
  minitest (>= 5.0)
@@ -181,22 +176,22 @@ GEM
181
176
  ostruct (0.6.3)
182
177
  others (0.1.1)
183
178
  parallel (1.27.0)
184
- parser (3.3.10.2)
179
+ parser (3.3.11.1)
185
180
  ast (~> 2.4.1)
186
181
  racc
187
182
  prism (1.9.0)
188
183
  psych (5.3.1)
189
184
  date
190
185
  stringio
191
- public_suffix (7.0.2)
192
- qbash (0.8.0)
186
+ public_suffix (7.0.5)
187
+ qbash (0.8.2)
193
188
  backtrace (> 0)
194
189
  elapsed (> 0)
195
190
  loog (> 0)
196
191
  tago (> 0)
197
192
  racc (1.8.1)
198
193
  rainbow (3.1.1)
199
- rake (13.3.1)
194
+ rake (13.4.2)
200
195
  random-port (0.8.2)
201
196
  tago (~> 0.0)
202
197
  rdoc (7.2.0)
@@ -206,19 +201,18 @@ GEM
206
201
  regexp_parser (2.11.3)
207
202
  retries (0.0.5)
208
203
  rexml (3.4.4)
209
- rubocop (1.85.0)
204
+ rubocop (1.86.1)
210
205
  json (~> 2.3)
211
206
  language_server-protocol (~> 3.17.0.2)
212
207
  lint_roller (~> 1.1.0)
213
- mcp (~> 0.6)
214
- parallel (~> 1.10)
208
+ parallel (>= 1.10)
215
209
  parser (>= 3.3.0.2)
216
210
  rainbow (>= 2.2.2, < 4.0)
217
211
  regexp_parser (>= 2.9.3, < 3.0)
218
212
  rubocop-ast (>= 1.49.0, < 2.0)
219
213
  ruby-progressbar (~> 1.7)
220
214
  unicode-display_width (>= 2.4.0, < 4.0)
221
- rubocop-ast (1.49.0)
215
+ rubocop-ast (1.49.1)
222
216
  parser (>= 3.3.7.2)
223
217
  prism (~> 1.7)
224
218
  rubocop-minitest (0.39.1)
@@ -246,9 +240,13 @@ GEM
246
240
  simplecov-html (0.13.2)
247
241
  simplecov_json_formatter (0.1.4)
248
242
  stringio (3.2.0)
249
- sys-uname (1.5.0)
243
+ sys-uname (1.5.1)
244
+ ffi (~> 1.1)
245
+ memoist3 (~> 1.0.0)
246
+ sys-uname (1.5.1-universal-mingw32)
250
247
  ffi (~> 1.1)
251
248
  memoist3 (~> 1.0.0)
249
+ win32ole
252
250
  tago (0.7.0)
253
251
  timeout (0.6.0)
254
252
  total (0.4.2)
@@ -263,10 +261,11 @@ GEM
263
261
  json (>= 1.8)
264
262
  nokogiri (~> 1.6)
265
263
  rexml (~> 3.2)
266
- webmock (3.26.1)
264
+ webmock (3.26.2)
267
265
  addressable (>= 2.8.0)
268
266
  crack (>= 0.3.2)
269
267
  hashdiff (>= 0.4.0, < 2.0.0)
268
+ win32ole (1.9.3)
270
269
  yaml (0.4.0)
271
270
  yard (0.9.38)
272
271
 
@@ -283,7 +282,7 @@ PLATFORMS
283
282
 
284
283
  DEPENDENCIES
285
284
  base64 (~> 0.3)
286
- cucumber (~> 10.0)
285
+ cucumber (~> 11.0)
287
286
  diff-lcs (= 1.6.2)
288
287
  judges!
289
288
  minitest (~> 6.0)
data/README.md CHANGED
@@ -84,6 +84,60 @@ of Ruby scripts that are executed after the judge
84
84
  The `expected_failure` (default: `[]`) is a list of strings that must
85
85
  be present in the message of the exception being raised.
86
86
 
87
+ ## Architecture
88
+
89
+ The core data structure is a
90
+ [Factbase](https://github.com/yegor256/factbase) — a flat, schemaless,
91
+ binary-serialized collection of facts (records with named attributes)
92
+ held in memory during a run. Facts are queried via
93
+ [XPath](https://www.w3.org/TR/xpath/) expressions rather than SQL.
94
+ There is no schema to migrate, no ORM layer, and no database process
95
+ to manage. The factbase binary file is read at the start of each
96
+ `update` run and written back on exit, making state portable and
97
+ inspectable via `judges print`. This differs from tools such as
98
+ [Sidekiq](https://sidekiq.org/) or
99
+ [ActiveJob](https://guides.rubyonrails.org/active_job_basics.html),
100
+ which depend on an external database or message broker.
101
+
102
+ Each judge is a single `.rb` Ruby file in its own directory. It is
103
+ not a class, a module, or a Rake task — it is a plain script loaded
104
+ with Ruby's `load(file, true)`, which wraps it in an anonymous module
105
+ and prevents constants in one judge from leaking into another. All
106
+ context is injected as Ruby global variables: `$fb` (the factbase),
107
+ `$loog` (logging), `$options` (configuration), `$global` (shared
108
+ across all judges in a run), and `$local` (reset after each judge).
109
+ A new judge author needs to know only those variables; there is no
110
+ base class to inherit and no interface contract to satisfy.
111
+
112
+ The `update` command runs all judges in repeated cycles until the
113
+ factbase stops changing (zero churn) or until the `--max-cycles` or
114
+ `--lifetime` limit is reached. This fixed-point convergence model is
115
+ analogous to [Datalog](https://en.wikipedia.org/wiki/Datalog): a
116
+ judge that inserts a fact in one cycle may trigger a different judge
117
+ in the next cycle, without any explicit dependency declaration.
118
+ Pipeline tools such as
119
+ [Apache Airflow](https://airflow.apache.org/) or
120
+ [GitHub Actions](https://docs.github.com/en/actions) require a
121
+ directed acyclic graph defined upfront; judges require none.
122
+
123
+ Every judge directory contains `.yml` test files alongside its `.rb`
124
+ script. A YAML file declares the initial facts (`input`), the count
125
+ of judge executions (`runs`), prerequisite judges (`before`),
126
+ post-condition scripts (`after`), and
127
+ [XPath](https://www.w3.org/TR/xpath/) assertions the factbase must
128
+ satisfy when the judge finishes (`expected`). Running `judges test`
129
+ creates a fresh, in-memory factbase per test case. Co-locating tests
130
+ with the script keeps each judge directory self-contained: one
131
+ directory holds both the deliverable and its verification.
132
+
133
+ The `push` and `pull` commands exchange the binary factbase with a
134
+ remote [Baza](https://github.com/yegor256/baza.rb) server via a
135
+ named-lock protocol. `pull` acquires the lock and downloads the
136
+ file; `push` uploads the modified file and releases the lock. This
137
+ lets distributed CI pipelines share a single evolving factbase
138
+ across multiple jobs without running a database: each job pulls,
139
+ runs `update` locally, and pushes back.
140
+
87
141
  ## How to contribute
88
142
 
89
143
  Read
data/judges.gemspec CHANGED
@@ -9,7 +9,7 @@ Gem::Specification.new do |s|
9
9
  s.required_rubygems_version = Gem::Requirement.new('>= 0') if s.respond_to? :required_rubygems_version=
10
10
  s.required_ruby_version = '>=3.2'
11
11
  s.name = 'judges'
12
- s.version = '0.60.2'
12
+ s.version = '0.60.3'
13
13
  s.license = 'MIT'
14
14
  s.summary = 'Command-Line Tool for a Factbase'
15
15
  s.description =
@@ -51,9 +51,8 @@ class Judges::Pull
51
51
  end
52
52
  fb.import(baza.pull(wait(name, baza, jid, opts['wait'])))
53
53
  Judges::Impex.new(@loog, args[1]).export(fb)
54
- rescue StandardError => e
54
+ ensure
55
55
  baza.unlock(name, opts['owner'])
56
- raise e
57
56
  end
58
57
  throw :"👍 Pulled #{fb.size} facts by name '#{name}'"
59
58
  else
data/lib/judges/judges.rb CHANGED
@@ -78,7 +78,7 @@ class Judges::Judges
78
78
  next unless File.directory?(d)
79
79
  b = File.basename(d)
80
80
  next unless File.exist?(File.join(d, "#{b}.rb"))
81
- Judges::Judge.new(File.absolute_path(d), @lib, @loog)
81
+ Judges::Judge.new(File.absolute_path(d), @lib, @loog, epoch: @epoch)
82
82
  end
83
83
  list.compact!
84
84
  list.sort_by!(&:name)
data/lib/judges.rb CHANGED
@@ -8,5 +8,5 @@
8
8
  # Copyright:: Copyright (c) 2024-2026 Yegor Bugayenko
9
9
  # License:: MIT
10
10
  module Judges
11
- VERSION = '0.60.2' unless const_defined?(:VERSION)
11
+ VERSION = '0.60.3' unless const_defined?(:VERSION)
12
12
  end
data/package-lock.json CHANGED
@@ -52,15 +52,15 @@
52
52
  }
53
53
  },
54
54
  "node_modules/@eslint/config-array": {
55
- "version": "0.21.1",
56
- "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz",
57
- "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==",
55
+ "version": "0.21.2",
56
+ "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.2.tgz",
57
+ "integrity": "sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==",
58
58
  "dev": true,
59
59
  "license": "Apache-2.0",
60
60
  "dependencies": {
61
61
  "@eslint/object-schema": "^2.1.7",
62
62
  "debug": "^4.3.1",
63
- "minimatch": "^3.1.2"
63
+ "minimatch": "^3.1.5"
64
64
  },
65
65
  "engines": {
66
66
  "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -93,20 +93,20 @@
93
93
  }
94
94
  },
95
95
  "node_modules/@eslint/eslintrc": {
96
- "version": "3.3.1",
97
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz",
98
- "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==",
96
+ "version": "3.3.5",
97
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.5.tgz",
98
+ "integrity": "sha512-4IlJx0X0qftVsN5E+/vGujTRIFtwuLbNsVUe7TO6zYPDR1O6nFwvwhIKEKSrl6dZchmYBITazxKoUYOjdtjlRg==",
99
99
  "dev": true,
100
100
  "license": "MIT",
101
101
  "dependencies": {
102
- "ajv": "^6.12.4",
102
+ "ajv": "^6.14.0",
103
103
  "debug": "^4.3.2",
104
104
  "espree": "^10.0.1",
105
105
  "globals": "^14.0.0",
106
106
  "ignore": "^5.2.0",
107
107
  "import-fresh": "^3.2.1",
108
- "js-yaml": "^4.1.0",
109
- "minimatch": "^3.1.2",
108
+ "js-yaml": "^4.1.1",
109
+ "minimatch": "^3.1.5",
110
110
  "strip-json-comments": "^3.1.1"
111
111
  },
112
112
  "engines": {
@@ -117,9 +117,9 @@
117
117
  }
118
118
  },
119
119
  "node_modules/@eslint/js": {
120
- "version": "9.39.2",
121
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.2.tgz",
122
- "integrity": "sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==",
120
+ "version": "9.39.4",
121
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.4.tgz",
122
+ "integrity": "sha512-nE7DEIchvtiFTwBw4Lfbu59PG+kCofhjsKaCWzxTpt4lfRjRMqG6uMBzKXuEcyXhOHoUp9riAm7/aWYGhXZ9cw==",
123
123
  "dev": true,
124
124
  "license": "MIT",
125
125
  "engines": {
@@ -239,7 +239,6 @@
239
239
  "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
240
240
  "dev": true,
241
241
  "license": "MIT",
242
- "peer": true,
243
242
  "bin": {
244
243
  "acorn": "bin/acorn"
245
244
  },
@@ -258,9 +257,9 @@
258
257
  }
259
258
  },
260
259
  "node_modules/ajv": {
261
- "version": "6.12.6",
262
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
263
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
260
+ "version": "6.14.0",
261
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz",
262
+ "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==",
264
263
  "dev": true,
265
264
  "license": "MIT",
266
265
  "dependencies": {
@@ -305,9 +304,9 @@
305
304
  "license": "MIT"
306
305
  },
307
306
  "node_modules/brace-expansion": {
308
- "version": "1.1.11",
309
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
310
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
307
+ "version": "1.1.12",
308
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
309
+ "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
311
310
  "dev": true,
312
311
  "license": "MIT",
313
312
  "dependencies": {
@@ -423,26 +422,25 @@
423
422
  }
424
423
  },
425
424
  "node_modules/eslint": {
426
- "version": "9.39.2",
427
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.2.tgz",
428
- "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==",
425
+ "version": "9.39.4",
426
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.4.tgz",
427
+ "integrity": "sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==",
429
428
  "dev": true,
430
429
  "license": "MIT",
431
- "peer": true,
432
430
  "dependencies": {
433
431
  "@eslint-community/eslint-utils": "^4.8.0",
434
432
  "@eslint-community/regexpp": "^4.12.1",
435
- "@eslint/config-array": "^0.21.1",
433
+ "@eslint/config-array": "^0.21.2",
436
434
  "@eslint/config-helpers": "^0.4.2",
437
435
  "@eslint/core": "^0.17.0",
438
- "@eslint/eslintrc": "^3.3.1",
439
- "@eslint/js": "9.39.2",
436
+ "@eslint/eslintrc": "^3.3.5",
437
+ "@eslint/js": "9.39.4",
440
438
  "@eslint/plugin-kit": "^0.4.1",
441
439
  "@humanfs/node": "^0.16.6",
442
440
  "@humanwhocodes/module-importer": "^1.0.1",
443
441
  "@humanwhocodes/retry": "^0.4.2",
444
442
  "@types/estree": "^1.0.6",
445
- "ajv": "^6.12.4",
443
+ "ajv": "^6.14.0",
446
444
  "chalk": "^4.0.0",
447
445
  "cross-spawn": "^7.0.6",
448
446
  "debug": "^4.3.2",
@@ -461,7 +459,7 @@
461
459
  "is-glob": "^4.0.0",
462
460
  "json-stable-stringify-without-jsonify": "^1.0.1",
463
461
  "lodash.merge": "^4.6.2",
464
- "minimatch": "^3.1.2",
462
+ "minimatch": "^3.1.5",
465
463
  "natural-compare": "^1.4.0",
466
464
  "optionator": "^0.9.3"
467
465
  },
@@ -753,9 +751,9 @@
753
751
  "license": "ISC"
754
752
  },
755
753
  "node_modules/js-yaml": {
756
- "version": "4.1.0",
757
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
758
- "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
754
+ "version": "4.1.1",
755
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz",
756
+ "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==",
759
757
  "dev": true,
760
758
  "license": "MIT",
761
759
  "dependencies": {
@@ -834,9 +832,9 @@
834
832
  "license": "MIT"
835
833
  },
836
834
  "node_modules/minimatch": {
837
- "version": "3.1.2",
838
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
839
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
835
+ "version": "3.1.5",
836
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
837
+ "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
840
838
  "dev": true,
841
839
  "license": "ISC",
842
840
  "dependencies": {
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: judges
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.60.2
4
+ version: 0.60.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yegor Bugayenko