fbe 0.23.1 → 0.23.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: afcbfa40757e9ab45bbae7c083105904ebb9079aa821c256c68969c19e3e4e25
4
- data.tar.gz: 0416c452b5e217f0fe35ed76676960e751f31229fdca52b5225f7d072c0f5350
3
+ metadata.gz: 8c12118d96ea30271b8b724c90d498eb3cc34a679bbef6be04153a53eec96e8e
4
+ data.tar.gz: 45363b59481ccff7b37d367acbabba81e7bddf0a649c204ac4e87559d9622729
5
5
  SHA512:
6
- metadata.gz: 3fa6f95c316fabbdfe259ef0b49622dbc8480125e3d3c280ef55878148a4b97646d7857f91c447fd592d46a09a59622347e1157c6193d513b820add777abfd78
7
- data.tar.gz: 03d2f412f3983ce6e759d40858b2a03d7ba70de2907f6990bcd66d4bc86df77defc65e46e977e9830ba633281c5680a0276a7a8b4a24e59e48c4b33a2efffbe2
6
+ metadata.gz: 04f4c500161bbb87de44b25e1c160c2c03276c4f4737589dea8691c76f0a4a24824b74d4b278db5ac777e306d8c01b7879434ced44ee28b9efcd0cf96c4b0ea9
7
+ data.tar.gz: 1f75a0011d1be3518a72b99d8ffd5e6e4746b4a0a130d3e6507c145b389197419e788a2b0eb7e09fce0ba913ef0621be2754fcfa2000babb03bf58d0250b9748
data/Gemfile.lock CHANGED
@@ -5,6 +5,7 @@ PATH
5
5
  backtrace (~> 0.4)
6
6
  baza.rb (~> 0.5)
7
7
  decoor (~> 0.0)
8
+ ellipsized (~> 0.3)
8
9
  factbase (~> 0.11)
9
10
  faraday (~> 2.0)
10
11
  faraday-http-cache (~> 2.5)
@@ -12,6 +13,7 @@ PATH
12
13
  faraday-retry (~> 2.3)
13
14
  filesize (~> 0.2)
14
15
  graphql-client (~> 0.26)
16
+ intercepted (~> 0.2)
15
17
  judges (~> 0.46)
16
18
  liquid (~> 5.5)
17
19
  loog (~> 0.6)
@@ -114,6 +116,7 @@ GEM
114
116
  hashdiff (1.2.0)
115
117
  i18n (1.14.7)
116
118
  concurrent-ruby (~> 1.0)
119
+ intercepted (0.2.0)
117
120
  iri (0.11.2)
118
121
  json (2.12.2)
119
122
  judges (0.50.5)
data/fbe.gemspec CHANGED
@@ -25,6 +25,7 @@ Gem::Specification.new do |s|
25
25
  s.add_dependency 'backtrace', '~>0.4'
26
26
  s.add_dependency 'baza.rb', '~>0.5'
27
27
  s.add_dependency 'decoor', '~>0.0'
28
+ s.add_dependency 'ellipsized', '~>0.3'
28
29
  s.add_dependency 'factbase', '~>0.11'
29
30
  s.add_dependency 'faraday', '~>2.0'
30
31
  s.add_dependency 'faraday-http-cache', '~>2.5'
@@ -32,6 +33,7 @@ Gem::Specification.new do |s|
32
33
  s.add_dependency 'faraday-retry', '~>2.3'
33
34
  s.add_dependency 'filesize', '~>0.2'
34
35
  s.add_dependency 'graphql-client', '~>0.26'
36
+ s.add_dependency 'intercepted', '~>0.2'
35
37
  s.add_dependency 'judges', '~>0.46'
36
38
  s.add_dependency 'liquid', '~>5.5'
37
39
  s.add_dependency 'loog', '~>0.6'
@@ -31,11 +31,9 @@ class Fbe::Middleware::Trace < Faraday::Middleware
31
31
  #
32
32
  # @param [Object] app The next middleware in the stack
33
33
  # @param [Array] trace The array to store trace entries
34
- # @param [Boolean] all Print ALL requests, even very fast?
35
- def initialize(app, trace, all: true)
34
+ def initialize(app, trace)
36
35
  super(app)
37
36
  @trace = trace
38
- @all = all
39
37
  end
40
38
 
41
39
  # Processes the HTTP request and records trace information.
@@ -51,12 +49,10 @@ class Fbe::Middleware::Trace < Faraday::Middleware
51
49
  @app.call(env).on_complete do |response_env|
52
50
  finished = Time.now
53
51
  duration = finished - entry[:started_at]
54
- if duration > 0.01 || @all
55
- entry[:status] = response_env.status
56
- entry[:finished_at] = finished
57
- entry[:duration] = duration
58
- @trace << entry
59
- end
52
+ entry[:status] = response_env.status
53
+ entry[:finished_at] = finished
54
+ entry[:duration] = duration
55
+ @trace << entry
60
56
  end
61
57
  end
62
58
  end
data/lib/fbe/octo.rb CHANGED
@@ -3,22 +3,25 @@
3
3
  # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Zerocracy
4
4
  # SPDX-License-Identifier: MIT
5
5
 
6
- require 'json'
7
6
  require 'decoor'
7
+ require 'ellipsized'
8
8
  require 'faraday/http_cache'
9
9
  require 'faraday/retry'
10
10
  require 'filesize'
11
+ require 'intercepted'
12
+ require 'json'
11
13
  require 'loog'
12
14
  require 'obk'
13
15
  require 'octokit'
14
16
  require 'others'
17
+ require 'tago'
15
18
  require 'uri'
16
19
  require 'verbose'
17
20
  require_relative '../fbe'
18
21
  require_relative 'middleware'
19
22
  require_relative 'middleware/formatter'
20
- require_relative 'middleware/trace'
21
23
  require_relative 'middleware/sqlite_store'
24
+ require_relative 'middleware/trace'
22
25
 
23
26
  # Makes a call to the GitHub API.
24
27
  #
@@ -104,7 +107,7 @@ def Fbe.octo(options: $options, global: $global, loog: $loog)
104
107
  end
105
108
  builder.use(Octokit::Response::RaiseError)
106
109
  builder.use(Faraday::Response::Logger, loog, formatter: Fbe::Middleware::Formatter)
107
- builder.use(Fbe::Middleware::Trace, trace, all: false)
110
+ builder.use(Fbe::Middleware::Trace, trace)
108
111
  builder.adapter(Faraday.default_adapter)
109
112
  end
110
113
  o.middleware = stack
@@ -121,18 +124,29 @@ def Fbe.octo(options: $options, global: $global, loog: $loog)
121
124
  end
122
125
  o =
123
126
  decoor(o, loog:, trace:) do
124
- def print_trace!
127
+ def print_trace!(all: false, max: 5)
125
128
  if @trace.empty?
126
129
  @loog.debug('GitHub API trace is empty')
127
130
  else
128
131
  grouped =
129
- @trace.group_by do |entry|
132
+ @trace.select { |e| e[:duration] > 0.05 || all }.group_by do |entry|
130
133
  uri = URI.parse(entry[:url])
131
- "#{uri.scheme}://#{uri.host}#{uri.path}"
134
+ query = uri.query
135
+ query = "?#{query.ellipsized(40)}" if query
136
+ "#{uri.scheme}://#{uri.host}#{uri.path}#{query}"
132
137
  end
133
138
  message = grouped
134
139
  .sort_by { |_path, entries| -entries.count }
135
- .map { |path, entries| " #{path.gsub(%r{^https://api.github.com/}, '/')}: #{entries.count}" }
140
+ .map do |path, entries|
141
+ [
142
+ ' ',
143
+ path.gsub(%r{^https://api.github.com/}, '/'),
144
+ ': ',
145
+ entries.count,
146
+ " (#{entries.sum { |e| e[:duration] }.seconds})"
147
+ ].join
148
+ end
149
+ .take(max)
136
150
  .join("\n")
137
151
  @loog.info(
138
152
  "GitHub API trace (#{grouped.count} URLs vs #{@trace.count} requests, " \
@@ -180,11 +194,10 @@ def Fbe.octo(options: $options, global: $global, loog: $loog)
180
194
  end
181
195
  end
182
196
  o =
183
- others(o:) do |*args|
184
- if args.first != :off_quota? && args.first != :print_trace! && @o.off_quota?
185
- raise "We are off-quota (remaining: #{@o.rate_limit.remaining})"
197
+ intercepted(o) do |e, m, _args, _r|
198
+ if e == :before && m != :off_quota? && m != :print_trace! && m != :rate_limit && o.off_quota?
199
+ raise "We are off-quota (remaining: #{o.rate_limit.remaining}), can't do #{name}()"
186
200
  end
187
- @o.__send__(*args)
188
201
  end
189
202
  o
190
203
  end
@@ -692,10 +705,14 @@ class Fbe::FakeOctokit
692
705
  repo: {
693
706
  full_name: repo
694
707
  },
708
+ user: { login: 'yegor256', id: 526_301, type: 'User' },
709
+ head: { ref: 'master', sha: '6dcb09b5b57875f334f61aebed695e2e4193db5e' },
695
710
  additions: 12,
696
711
  deletions: 5,
697
712
  changed_files: 3,
698
- review_comments: 2
713
+ comments: 2,
714
+ review_comments: 2,
715
+ created_at: Time.parse('2024-09-20 19:00:00 UTC')
699
716
  }
700
717
  end
701
718
 
data/lib/fbe.rb CHANGED
@@ -10,5 +10,5 @@
10
10
  # License:: MIT
11
11
  module Fbe
12
12
  # Current version of the gem (changed by +.rultor.yml+ on every release)
13
- VERSION = '0.23.1' unless const_defined?(:VERSION)
13
+ VERSION = '0.23.3' unless const_defined?(:VERSION)
14
14
  end
@@ -367,7 +367,6 @@ class TestOcto < Fbe::Test
367
367
  { body: '{}', headers: { 'X-RateLimit-Remaining' => '222' } }
368
368
  )
369
369
  stub_request(:get, 'https://api.github.com/user/123').to_return do
370
- sleep(0.02)
371
370
  {
372
371
  status: 200,
373
372
  body: '{"id":123,"login":"test"}',
@@ -375,7 +374,6 @@ class TestOcto < Fbe::Test
375
374
  }
376
375
  end
377
376
  stub_request(:get, 'https://api.github.com/repos/foo/bar').to_return do
378
- sleep(0.02)
379
377
  {
380
378
  status: 200,
381
379
  body: '{"id":456,"full_name":"foo/bar"}',
@@ -386,9 +384,9 @@ class TestOcto < Fbe::Test
386
384
  octo.user(123)
387
385
  octo.repository('foo/bar')
388
386
  octo.repository('foo/bar')
389
- octo.print_trace!
387
+ octo.print_trace!(all: true, max: 9_999)
390
388
  output = loog.to_s
391
- assert_includes output, '2 URLs vs 3 requests'
389
+ assert_includes output, '3 URLs vs 4 requests'
392
390
  assert_includes output, '222 quota left'
393
391
  assert_includes output, '/user/123: 1'
394
392
  assert_includes output, '/repos/foo/bar: 2'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fbe
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.23.1
4
+ version: 0.23.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yegor Bugayenko
@@ -51,6 +51,20 @@ dependencies:
51
51
  - - "~>"
52
52
  - !ruby/object:Gem::Version
53
53
  version: '0.0'
54
+ - !ruby/object:Gem::Dependency
55
+ name: ellipsized
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '0.3'
61
+ type: :runtime
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '0.3'
54
68
  - !ruby/object:Gem::Dependency
55
69
  name: factbase
56
70
  requirement: !ruby/object:Gem::Requirement
@@ -149,6 +163,20 @@ dependencies:
149
163
  - - "~>"
150
164
  - !ruby/object:Gem::Version
151
165
  version: '0.26'
166
+ - !ruby/object:Gem::Dependency
167
+ name: intercepted
168
+ requirement: !ruby/object:Gem::Requirement
169
+ requirements:
170
+ - - "~>"
171
+ - !ruby/object:Gem::Version
172
+ version: '0.2'
173
+ type: :runtime
174
+ prerelease: false
175
+ version_requirements: !ruby/object:Gem::Requirement
176
+ requirements:
177
+ - - "~>"
178
+ - !ruby/object:Gem::Version
179
+ version: '0.2'
152
180
  - !ruby/object:Gem::Dependency
153
181
  name: judges
154
182
  requirement: !ruby/object:Gem::Requirement