judges 0.15.3 → 0.15.5

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: c55f53ae0053a336a2f35c02046a4def974a981bde802c79472db1692ff76e34
4
- data.tar.gz: 0d6eff130d9e2fe484427341e31c55087d4d31aa5cd44d88bd8cbec866b4c836
3
+ metadata.gz: '085c4d08e376f51c6a9cae8e973f27a4cf7c0b418679e94643a6f8a336c94f92'
4
+ data.tar.gz: 8cb2893668c8ac8d41512c4c26904ea77e23d326b01d4307f7548b33853f682b
5
5
  SHA512:
6
- metadata.gz: f83f3a441a93594460592a1b5052d1f76b720fe0ce3b5f6d4b4834093c4092e3689407983aaa7009a285628ae25d606ba23defb098b0f11085a28010cd1ac3c5
7
- data.tar.gz: f19e035da56f053efbef01065040d85018834538785ac6dca4c10536e0e65f7d8dd85cc3097e86fe73d49f8c00a89b53930f6571c4814cbe44c2234efc1de443
6
+ metadata.gz: 41a4b6dc87cd1d374b02d4cc220c82e89cb2ddfd67414af0061e5470de392a2b5ee666b3a4be91fcbcbdfa72fcc30dc8e9789f5355a9bc7e972188dd13a35adb
7
+ data.tar.gz: 3e4f59993b5b96456dba23339c9f3c1624e8aa010d0f45379576cfdde5ce55681a1f7e4f15013d158af4a136b06946f0396bd0593ba76e2e47b3973765f69a72
data/Gemfile CHANGED
@@ -27,10 +27,11 @@ gem 'cucumber', '9.2.0', require: false
27
27
  gem 'minitest', '5.24.1', require: false
28
28
  gem 'net-ping', '2.0.8', require: false
29
29
  gem 'rake', '13.2.1', require: false
30
+ gem 'random-port', '~>0.0', require: false
30
31
  gem 'rspec-rails', '6.1.3', require: false
31
- gem 'rubocop', '1.64.1', require: false
32
+ gem 'rubocop', '1.65.0', require: false
32
33
  gem 'rubocop-performance', '1.21.1', require: false
33
- gem 'rubocop-rspec', '3.0.1', require: false
34
+ gem 'rubocop-rspec', '3.0.2', require: false
34
35
  gem 'simplecov', '0.22.0', require: false
35
36
  gem 'simplecov-cobertura', '2.1.0', require: false
36
37
  gem 'webmock', '3.23.1', require: false
data/Gemfile.lock CHANGED
@@ -2,17 +2,17 @@ PATH
2
2
  remote: .
3
3
  specs:
4
4
  judges (0.0.0)
5
- backtrace (~> 0.3)
5
+ backtrace
6
6
  concurrent-ruby (~> 1.2)
7
- factbase (~> 0.0)
7
+ factbase
8
8
  gli (~> 2.21)
9
- iri (~> 0.8)
10
- loog (~> 0.2)
9
+ iri
10
+ loog
11
11
  moments (~> 0.3)
12
12
  nokogiri (~> 1.10)
13
- others (~> 0.0)
14
- retries (~> 0.0)
15
- tago (~> 0.0)
13
+ others
14
+ retries
15
+ tago
16
16
  typhoeus (~> 1.3)
17
17
 
18
18
  GEM
@@ -110,7 +110,7 @@ GEM
110
110
  i18n (1.14.5)
111
111
  concurrent-ruby (~> 1.0)
112
112
  io-console (0.7.2)
113
- irb (1.13.2)
113
+ irb (1.14.0)
114
114
  rdoc (>= 4.0.0)
115
115
  reline (>= 0.4.2)
116
116
  iri (0.8.0)
@@ -142,14 +142,14 @@ GEM
142
142
  racc (~> 1.4)
143
143
  others (0.0.3)
144
144
  parallel (1.25.1)
145
- parser (3.3.3.0)
145
+ parser (3.3.4.0)
146
146
  ast (~> 2.4.1)
147
147
  racc
148
148
  psych (5.1.2)
149
149
  stringio
150
150
  public_suffix (6.0.0)
151
151
  racc (1.8.0)
152
- rack (3.1.6)
152
+ rack (3.1.7)
153
153
  rack-session (2.0.0)
154
154
  rack (>= 3.0.0)
155
155
  rack-test (2.1.0)
@@ -174,6 +174,7 @@ GEM
174
174
  zeitwerk (~> 2.6)
175
175
  rainbow (3.1.1)
176
176
  rake (13.2.1)
177
+ random-port (0.7.0)
177
178
  rdoc (6.7.0)
178
179
  psych (>= 4.0.0)
179
180
  regexp_parser (2.9.2)
@@ -199,13 +200,13 @@ GEM
199
200
  rspec-mocks (~> 3.13)
200
201
  rspec-support (~> 3.13)
201
202
  rspec-support (3.13.1)
202
- rubocop (1.64.1)
203
+ rubocop (1.65.0)
203
204
  json (~> 2.3)
204
205
  language_server-protocol (>= 3.17.0)
205
206
  parallel (~> 1.10)
206
207
  parser (>= 3.3.0.2)
207
208
  rainbow (>= 2.2.2, < 4.0)
208
- regexp_parser (>= 1.8, < 3.0)
209
+ regexp_parser (>= 2.4, < 3.0)
209
210
  rexml (>= 3.2.5, < 4.0)
210
211
  rubocop-ast (>= 1.31.1, < 2.0)
211
212
  ruby-progressbar (~> 1.7)
@@ -215,7 +216,7 @@ GEM
215
216
  rubocop-performance (1.21.1)
216
217
  rubocop (>= 1.48.1, < 2.0)
217
218
  rubocop-ast (>= 1.31.1, < 2.0)
218
- rubocop-rspec (3.0.1)
219
+ rubocop-rspec (3.0.2)
219
220
  rubocop (~> 1.61)
220
221
  ruby-progressbar (1.13.0)
221
222
  simplecov (0.22.0)
@@ -262,10 +263,11 @@ DEPENDENCIES
262
263
  minitest (= 5.24.1)
263
264
  net-ping (= 2.0.8)
264
265
  rake (= 13.2.1)
266
+ random-port (~> 0.0)
265
267
  rspec-rails (= 6.1.3)
266
- rubocop (= 1.64.1)
268
+ rubocop (= 1.65.0)
267
269
  rubocop-performance (= 1.21.1)
268
- rubocop-rspec (= 3.0.1)
270
+ rubocop-rspec (= 3.0.2)
269
271
  simplecov (= 0.22.0)
270
272
  simplecov-cobertura (= 2.1.0)
271
273
  webmock (= 3.23.1)
data/assets/index.xsl CHANGED
@@ -40,7 +40,14 @@ SOFTWARE.
40
40
  <head>
41
41
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
42
42
  <title>
43
- <xsl:value-of select="$title"/>
43
+ <xsl:choose>
44
+ <xsl:when test="$title = ''">
45
+ <xsl:text>factbase</xsl:text>
46
+ </xsl:when>
47
+ <xsl:otherwise>
48
+ <xsl:value-of select="$title"/>
49
+ </xsl:otherwise>
50
+ </xsl:choose>
44
51
  </title>
45
52
  <meta charset="UTF-8"/>
46
53
  <meta content="width=device-width, initial-scale=1.0" name="viewport"/>
@@ -170,8 +177,8 @@ SOFTWARE.
170
177
  <td>
171
178
  <xsl:for-each select="$f/*">
172
179
  <xsl:text> </xsl:text>
173
- <xsl:variable name="visible" select="string-length(substring-before(concat(',', $hidden, ','), concat(name(), ','))) = 0"/>
174
- <xsl:if test="string-length(substring-before(concat(',', $columns, ','), concat(name(), ','))) = 0">
180
+ <xsl:variable name="visible" select="string-length(substring-before(concat(',', $hidden, ','), concat(',', name(), ','))) = 0"/>
181
+ <xsl:if test="string-length(substring-before(concat(',', $columns, ','), concat(',', name(), ','))) = 0">
175
182
  <xsl:choose>
176
183
  <xsl:when test="$visible">
177
184
  <xsl:value-of select="name()"/>
data/judges.gemspec CHANGED
@@ -26,7 +26,7 @@ Gem::Specification.new do |s|
26
26
  s.required_rubygems_version = Gem::Requirement.new('>= 0') if s.respond_to? :required_rubygems_version=
27
27
  s.required_ruby_version = '>=3.2'
28
28
  s.name = 'judges'
29
- s.version = '0.15.3'
29
+ s.version = '0.15.5'
30
30
  s.license = 'MIT'
31
31
  s.summary = 'Command-Line Tool for a Factbase'
32
32
  s.description =
@@ -42,17 +42,17 @@ Gem::Specification.new do |s|
42
42
  s.executables = s.files.grep(%r{^bin/}) { |f| File.basename(f) }
43
43
  s.rdoc_options = ['--charset=UTF-8']
44
44
  s.extra_rdoc_files = ['README.md', 'LICENSE.txt']
45
- s.add_runtime_dependency 'backtrace', '~>0.3'
46
- s.add_runtime_dependency 'concurrent-ruby', '~>1.2'
47
- s.add_runtime_dependency 'factbase', '~>0.0'
48
- s.add_runtime_dependency 'gli', '~>2.21'
49
- s.add_runtime_dependency 'iri', '~>0.8'
50
- s.add_runtime_dependency 'loog', '~>0.2'
51
- s.add_runtime_dependency 'moments', '~>0.3'
52
- s.add_runtime_dependency 'nokogiri', '~>1.10'
53
- s.add_runtime_dependency 'others', '~>0.0'
54
- s.add_runtime_dependency 'retries', '~>0.0'
55
- s.add_runtime_dependency 'tago', '~>0.0'
56
- s.add_runtime_dependency 'typhoeus', '~>1.3'
45
+ s.add_dependency 'backtrace'
46
+ s.add_dependency 'concurrent-ruby', '~>1.2'
47
+ s.add_dependency 'factbase'
48
+ s.add_dependency 'gli', '~>2.21'
49
+ s.add_dependency 'iri'
50
+ s.add_dependency 'loog'
51
+ s.add_dependency 'moments', '~>0.3'
52
+ s.add_dependency 'nokogiri', '~>1.10'
53
+ s.add_dependency 'others'
54
+ s.add_dependency 'retries'
55
+ s.add_dependency 'tago'
56
+ s.add_dependency 'typhoeus', '~>1.3'
57
57
  s.metadata['rubygems_mfa_required'] = 'true'
58
58
  end
data/lib/judges/baza.rb CHANGED
@@ -160,12 +160,14 @@ class Judges::Baza
160
160
  def name_exists?(name)
161
161
  exists = 0
162
162
  elapsed(@loog) do
163
- ret = checked(
164
- Typhoeus::Request.get(
165
- home.append('exists').append(name).to_s,
166
- headers:
163
+ ret = with_retries do
164
+ checked(
165
+ Typhoeus::Request.get(
166
+ home.append('exists').append(name).to_s,
167
+ headers:
168
+ )
167
169
  )
168
- )
170
+ end
169
171
  exists = ret.body == 'yes'
170
172
  throw :"The name \"#{name}\" #{exists ? 'exists' : "doesn't exist"} at #{@host}"
171
173
  end
@@ -176,9 +178,9 @@ class Judges::Baza
176
178
 
177
179
  def headers
178
180
  {
179
- 'User-Agent': "judges #{Judges::VERSION}",
180
- Connection: 'close',
181
- 'X-Zerocracy-Token': @token
181
+ 'User-Agent' => "judges #{Judges::VERSION}",
182
+ 'Connection' => 'close',
183
+ 'X-Zerocracy-Token' => @token
182
184
  }
183
185
  end
184
186
 
@@ -43,6 +43,7 @@ class Judges::Update
43
43
  raise 'Exactly two arguments required' unless args.size == 2
44
44
  dir = args[0]
45
45
  raise "The directory is absent: #{dir.to_rel}" unless File.exist?(dir)
46
+ start = Time.now
46
47
  impex = Judges::Impex.new(@loog, args[1])
47
48
  fb = impex.import(strict: false)
48
49
  fb = Factbase::Looged.new(fb, @loog) if opts['log']
@@ -82,6 +83,7 @@ class Judges::Update
82
83
  f.what = 'judges-summary'
83
84
  f.when = Time.now
84
85
  f.version = Judges::VERSION
86
+ f.seconds = Time.now - start
85
87
  f.cycles = c
86
88
  f.added = churn.added.size
87
89
  f.removed = churn.removed.size
data/lib/judges/impex.rb CHANGED
@@ -24,6 +24,7 @@ require 'factbase'
24
24
  require 'fileutils'
25
25
  require_relative '../judges'
26
26
  require_relative '../judges/to_rel'
27
+ require_relative '../judges/elapsed'
27
28
 
28
29
  # Import/Export of factbases.
29
30
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
@@ -38,8 +39,10 @@ class Judges::Impex
38
39
  def import(strict: true)
39
40
  fb = Factbase.new
40
41
  if File.exist?(@file)
41
- fb.import(File.binread(@file))
42
- @loog.info("The factbase imported from #{@file.to_rel} (#{File.size(@file)} bytes, #{fb.size} facts)")
42
+ elapsed(@loog) do
43
+ fb.import(File.binread(@file))
44
+ throw :"The factbase imported from #{@file.to_rel} (#{File.size(@file)} bytes, #{fb.size} facts)"
45
+ end
43
46
  else
44
47
  raise "The factbase is absent at #{@file.to_rel}" if strict
45
48
  @loog.info("Nothing to import from #{@file.to_rel} (file not found)")
@@ -49,13 +52,17 @@ class Judges::Impex
49
52
 
50
53
  def import_to(fb)
51
54
  raise "The factbase is absent at #{@file.to_rel}" unless File.exist?(@file)
52
- fb.import(File.binread(@file))
53
- @loog.info("The factbase loaded from #{@file.to_rel} (#{File.size(@file)} bytes, #{fb.size} facts)")
55
+ elapsed(@loog) do
56
+ fb.import(File.binread(@file))
57
+ throw :"The factbase loaded from #{@file.to_rel} (#{File.size(@file)} bytes, #{fb.size} facts)"
58
+ end
54
59
  end
55
60
 
56
61
  def export(fb)
57
- FileUtils.mkdir_p(File.dirname(@file))
58
- File.binwrite(@file, fb.export)
59
- @loog.info("Factbase exported to #{@file.to_rel} (#{File.size(@file)} bytes, #{fb.size} facts)")
62
+ elapsed(@loog) do
63
+ FileUtils.mkdir_p(File.dirname(@file))
64
+ File.binwrite(@file, fb.export)
65
+ throw :"Factbase exported to #{@file.to_rel} (#{File.size(@file)} bytes, #{fb.size} facts)"
66
+ end
60
67
  end
61
68
  end
data/lib/judges/judge.rb CHANGED
@@ -45,7 +45,7 @@ class Judges::Judge
45
45
  $loog = @loog
46
46
  $global = global
47
47
  $local = local
48
- $valve = FakeValve.new if $valve.nil?
48
+ $valve = FakeValve.new unless defined?($valve)
49
49
  unless @lib.nil?
50
50
  raise "Lib dir #{@lib.to_rel} is absent" unless File.exist?(@lib)
51
51
  raise "Lib #{@lib.to_rel} is not a directory" unless File.directory?(@lib)
@@ -81,7 +81,7 @@ class Judges::Judge
81
81
 
82
82
  # Fake valve.
83
83
  class FakeValve
84
- def enter(_)
84
+ def enter(_badge, _why: '')
85
85
  yield
86
86
  end
87
87
  end
data/lib/judges.rb CHANGED
@@ -25,5 +25,5 @@
25
25
  # Copyright:: Copyright (c) 2024 Yegor Bugayenko
26
26
  # License:: MIT
27
27
  module Judges
28
- VERSION = '0.15.3'
28
+ VERSION = '0.15.5'
29
29
  end
@@ -92,8 +92,9 @@ class TestUpdate < Minitest::Test
92
92
  fb.import(File.binread(file))
93
93
  sums = fb.query('(eq what "judges-summary")').each.to_a
94
94
  assert_equal(1, sums.size)
95
- f = sums.first
96
- assert(f.error.include?('unexpected global variable'), f.error)
95
+ sum = sums.first
96
+ assert(sum.error.include?('unexpected global variable'), sum.error)
97
+ assert(!sum.seconds.nil?)
97
98
  end
98
99
  end
99
100
  end
data/test/test_baza.rb CHANGED
@@ -23,6 +23,8 @@
23
23
  require 'minitest/autorun'
24
24
  require 'webmock/minitest'
25
25
  require 'loog'
26
+ require 'socket'
27
+ require 'random-port'
26
28
  require_relative '../lib/judges'
27
29
  require_relative '../lib/judges/baza'
28
30
 
@@ -44,9 +46,9 @@ class TestBaza < Minitest::Test
44
46
 
45
47
  def test_simple_recent_check
46
48
  WebMock.disable_net_connect!
47
- stub_request(:get, 'https://example.org/recent/simple.txt').to_return(
48
- status: 200, body: '42'
49
- )
49
+ stub_request(:get, 'https://example.org/recent/simple.txt')
50
+ .with(body: '', headers: { 'User-Agent' => /^judges .*$/ })
51
+ .to_return(status: 200, body: '42')
50
52
  assert_equal(
51
53
  42,
52
54
  Judges::Baza.new('example.org', 443, '000').recent('simple')
@@ -72,4 +74,26 @@ class TestBaza < Minitest::Test
72
74
  Judges::Baza.new('example.org', 443, '000').pull(333).start_with?('hello')
73
75
  )
74
76
  end
77
+
78
+ def test_real_http
79
+ WebMock.enable_net_connect!
80
+ req = []
81
+ host = '127.0.0.1'
82
+ RandomPort::Pool::SINGLETON.acquire do |port|
83
+ server = TCPServer.new(host, port)
84
+ t = Thread.new do
85
+ socket = server.accept
86
+ loop do
87
+ line = socket.gets
88
+ break if line == "\r\n"
89
+ req << line
90
+ end
91
+ socket.puts "HTTP/1.1 200 OK\r\nContent-Length: 3\r\n\r\nyes"
92
+ socket.close
93
+ end
94
+ Judges::Baza.new(host, port, '0000', ssl: false, timeout: 1).name_exists?('simple')
95
+ t.join
96
+ end
97
+ assert(req.include?("User-Agent: judges #{Judges::VERSION}\r\n"))
98
+ end
75
99
  end
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: judges
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.15.3
4
+ version: 0.15.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yegor Bugayenko
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-07-03 00:00:00.000000000 Z
11
+ date: 2024-07-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: backtrace
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '0.3'
19
+ version: '0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '0.3'
26
+ version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: concurrent-ruby
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -42,16 +42,16 @@ dependencies:
42
42
  name: factbase
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '0.0'
47
+ version: '0'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: '0.0'
54
+ version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: gli
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -70,30 +70,30 @@ dependencies:
70
70
  name: iri
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - "~>"
73
+ - - ">="
74
74
  - !ruby/object:Gem::Version
75
- version: '0.8'
75
+ version: '0'
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - "~>"
80
+ - - ">="
81
81
  - !ruby/object:Gem::Version
82
- version: '0.8'
82
+ version: '0'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: loog
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - "~>"
87
+ - - ">="
88
88
  - !ruby/object:Gem::Version
89
- version: '0.2'
89
+ version: '0'
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - "~>"
94
+ - - ">="
95
95
  - !ruby/object:Gem::Version
96
- version: '0.2'
96
+ version: '0'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: moments
99
99
  requirement: !ruby/object:Gem::Requirement
@@ -126,44 +126,44 @@ dependencies:
126
126
  name: others
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
- - - "~>"
129
+ - - ">="
130
130
  - !ruby/object:Gem::Version
131
- version: '0.0'
131
+ version: '0'
132
132
  type: :runtime
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
- - - "~>"
136
+ - - ">="
137
137
  - !ruby/object:Gem::Version
138
- version: '0.0'
138
+ version: '0'
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: retries
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
- - - "~>"
143
+ - - ">="
144
144
  - !ruby/object:Gem::Version
145
- version: '0.0'
145
+ version: '0'
146
146
  type: :runtime
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
- - - "~>"
150
+ - - ">="
151
151
  - !ruby/object:Gem::Version
152
- version: '0.0'
152
+ version: '0'
153
153
  - !ruby/object:Gem::Dependency
154
154
  name: tago
155
155
  requirement: !ruby/object:Gem::Requirement
156
156
  requirements:
157
- - - "~>"
157
+ - - ">="
158
158
  - !ruby/object:Gem::Version
159
- version: '0.0'
159
+ version: '0'
160
160
  type: :runtime
161
161
  prerelease: false
162
162
  version_requirements: !ruby/object:Gem::Requirement
163
163
  requirements:
164
- - - "~>"
164
+ - - ">="
165
165
  - !ruby/object:Gem::Version
166
- version: '0.0'
166
+ version: '0'
167
167
  - !ruby/object:Gem::Dependency
168
168
  name: typhoeus
169
169
  requirement: !ruby/object:Gem::Requirement