judges 0.15.3 → 0.15.5

Sign up to get free protection for your applications and to get access to all the features.
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