clogger 2.2.1 → 2.4.0

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: 97fb2f9fb82bfc33a07ee55de5b946830c6562dc9fc9d11f5c75d89323f3543e
4
- data.tar.gz: 96062fd19c193f6b9a5418ebf237b2425966f56f23133ad389c19bf1de1ebcd1
3
+ metadata.gz: f07e1211c59e3f7ab5272febd94b6f19cc384d9add4043a2fc1815a3d3579518
4
+ data.tar.gz: bf4af6f34c84c24542831150a159fc4f89f5bbccf39f8b35f81cf0b2fcb1658d
5
5
  SHA512:
6
- metadata.gz: '019753504c2aa28353ed40da5b4612ed9c6e8f94daa91fcfdc7090a7486d45a18448ae03cd75519f79a557b8e7dd576f0939f6e62ef1a65d928c5e9844aed503'
7
- data.tar.gz: b4c50eafffa057ccfae3dc9473a19f33a7f1efddf534dd73623002e2d4545daae19a4ea2e1156b539a5d32df56afac3eda351524eb49007a46ae50b936981a1b
6
+ metadata.gz: 47a615c6cb5ad51d3b391dbd2fccfe8c0413d8301cef29789394d06be886a66343ef448e8f6746a651fe17118e807530242fca6cc67b3dac1e41f9a8f03b37be
7
+ data.tar.gz: 7167c4bd8881f5452e15852e6c51f8e898bdf548d967c322957c31cdf127f9e7fbf8e8ec31f7439b1be398faf629a1ae7d7513a82299717f7a144c05c6f5a607
data/.olddoc.yml CHANGED
@@ -1,13 +1,15 @@
1
1
  ---
2
- rdoc_url: https://yhbt.net/clogger/
3
- cgit_url: https://yhbt.net/clogger.git
4
- git_url: git://yhbt.net/clogger.git
5
- public_email: clogger-public@yhbt.net
2
+ rdoc_url: https://YHBT.net/clogger/
3
+ cgit_url: https://YHBT.net/clogger.git
4
+ git_url: https://YHBT.net/clogger.git
5
+ public_email: clogger-public@YHBT.net
6
6
  ml_url:
7
- - https://yhbt.net/clogger-public/
8
- - http://ou63pmih66umazou.onion/clogger-public/
9
- - nntp://news.public-inbox.org/inbox.comp.lang.ruby.clogger
7
+ - https://YHBT.net/clogger-public/
8
+ - http://7fh6tueqddpjyxjmgtdiueylzoqt6pt7hec3pukyptlmohoowvhde4yd.onion/clogger-public/
9
+ - imaps://YHBT.net/inbox.comp.lang.ruby.clogger.0
10
+ - imap://7fh6tueqddpjyxjmgtdiueylzoqt6pt7hec3pukyptlmohoowvhde4yd.onion/inbox.comp.lang.ruby.clogger.0
11
+ - nntps://news.public-inbox.org/inbox.comp.lang.ruby.clogger
12
+ - nntp://7fh6tueqddpjyxjmgtdiueylzoqt6pt7hec3pukyptlmohoowvhde4yd.onion/inbox.comp.lang.ruby.clogger
10
13
  source_code:
11
- - git clone git://yhbt.net/clogger.git
12
- - git clone https://yhbt.net/clogger.git
13
- - torsocks git clone http://ou63pmih66umazou.onion/clogger.git
14
+ - git clone https://YHBT.net/clogger.git
15
+ - torsocks git clone http://7fh6tueqddpjyxjmgtdiueylzoqt6pt7hec3pukyptlmohoowvhde4yd.onion/clogger.git
data/GIT-VERSION-FILE CHANGED
@@ -1 +1 @@
1
- GIT_VERSION = 2.2.1
1
+ GIT_VERSION = 2.4.0
data/GIT-VERSION-GEN CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/bin/sh
2
2
 
3
3
  GVF=GIT-VERSION-FILE
4
- DEF_VER=v2.2.1
4
+ DEF_VER=v2.4.0
5
5
 
6
6
  LF='
7
7
  '
data/GNUmakefile CHANGED
@@ -1,5 +1,5 @@
1
1
  all::
2
- RSYNC_DEST := yhbt.net:/srv/yhbt/clogger/
2
+ RSYNC_DEST := YHBT.net:/srv/yhbt/clogger/
3
3
  rfpackage := clogger
4
4
  include pkg.mk
5
5
  test-ext:
data/LATEST CHANGED
@@ -1,9 +1,9 @@
1
- === clogger 2.2.1 - move away from .org TLD / 2020-01-08 09:46 UTC
1
+ === clogger 2.4.0 / 2022-06-16 16:53 UTC
2
2
 
3
- Just doc and website updates to point our email address
4
- and website to yhbt.net because bogomips.org won't be
5
- affordable due to extortionists, soon.
3
+ Only 2 code changes, neither of which is really relevant for 99% of
4
+ users using the C extension and strict HTTP parsers.
6
5
 
7
- doc: switch to dark216 for website
8
- doc: replace bogomips.org with yhbt.net
6
+ escape env['REQUEST_METHOD'] for non-strict HTTP servers
7
+ pure: fix time.rb incompatibility in Ruby 3.1+
8
+ doc: drop git:// URLs, use shorter domain for IMAP links
9
9
 
data/NEWS CHANGED
@@ -1,3 +1,36 @@
1
+ === clogger 2.4.0 / 2022-06-16 16:53 UTC
2
+
3
+ Only 2 code changes, neither of which is really relevant for 99% of
4
+ users using the C extension and strict HTTP parsers.
5
+
6
+ escape env['REQUEST_METHOD'] for non-strict HTTP servers
7
+ pure: fix time.rb incompatibility in Ruby 3.1+
8
+ doc: drop git:// URLs, use shorter domain for IMAP links
9
+
10
+ === clogger 2.3.1 / 2021-05-25 23:39 UTC
11
+
12
+ This release fixes compatibility with GC.compact on Ruby 3.x.
13
+ Thanks to Ngan Pham for the patch and Aaron Patterson for the
14
+ feedback for the (obsolete) kgio RubyGem:
15
+
16
+ https://yhbt.net/kgio-public/CAAvYYt5Z5f2rMuXO5DMpR1-6uRvu_gXKDvqcyoZ+oNcLiTH39g@mail.gmail.com/T/
17
+
18
+ === clogger 2.3.0 - $request_time{POWER,PRECISION} support / 2020-08-10 23:01 UTC
19
+
20
+ The $request_time can now be multiplied by a power-of-10,
21
+ allowing up to nanosecond resolution without decimals.
22
+
23
+ Thanks to Josh Natanson for contributing this feature:
24
+
25
+ https://yhbt.net/clogger-public/CAPdx2swO4eaOWaqL4-rMLq1H7pH6w-i760vPJTb92tyKfcc01Q@mail.gmail.com/
26
+ https://yhbt.net/clogger-public/CAPdx2szjqUuFjUtrgoeXXwmz0HzfdnWe+2h2Sp_ywDkTDVL0-g@mail.gmail.com/T/
27
+
28
+ There's also some minor fixes and doc updates:
29
+
30
+ clogger: fix _BSD_SOURCE and _SVID_SOURCE deprecation warnings
31
+ doc: update with IMAPS, NNTPS, and .onion mail archive URLs
32
+ doc: document Fiber.current
33
+
1
34
  === clogger 2.2.1 - move away from .org TLD / 2020-01-08 09:46 UTC
2
35
 
3
36
  Just doc and website updates to point our email address
data/README CHANGED
@@ -69,10 +69,12 @@ that receives a "<<" method:
69
69
  * $request_uri - the URI requested ($path_info?$query_string)
70
70
  * $request - the first line of the HTTP request
71
71
  ($request_method $request_uri $http_version)
72
- * $request_time, $request_time{PRECISION} - time taken for request
73
- (including response body iteration). PRECISION defaults to 3
74
- (milliseconds) if not specified but may be specified anywhere from
75
- 0(seconds) to 6(microseconds).
72
+ * $request_time, $request_time{PRECISION}, $request_time{POWER,PRECISION} -
73
+ time taken for request (including response body iteration). PRECISION
74
+ defaults to 3 (milliseconds) if not specified but may be specified
75
+ anywhere from 0(seconds) to 6(microseconds). POWER will raise the time to
76
+ the provided power of 10, useful for converting to micro- or nanoseconds.
77
+ POWER defaults to 0 if not specified but may be specified any from 0 to 9
76
78
  * $time_iso8601 - current local time in ISO 8601 format,
77
79
  e.g. "1970-01-01T00:00:00+00:00"
78
80
  * $time_local - current local time in Apache log format,
@@ -87,7 +89,7 @@ that receives a "<<" method:
87
89
  * $ip - X-Forwarded-For request header if available, $remote_addr if not
88
90
  * $pid - process ID of the current process
89
91
  * $e{Thread.current} - Thread processing the request
90
- * $e{Actor.current} - Actor processing the request (Revactor or Rubinius)
92
+ * $e{Fiber.current} - Fiber processing the request
91
93
  * $env{variable_name} - any Rack environment variable (e.g. rack.url_scheme)
92
94
 
93
95
  == REQUIREMENTS
@@ -98,28 +100,40 @@ that receives a "<<" method:
98
100
 
99
101
  The latest development happens in git and is published to the following:
100
102
 
101
- git clone https://yhbt.net/clogger.git
102
- git clone git://repo.or.cz/clogger.git
103
+ git clone https://YHBT.net/clogger.git
104
+ git clone https://repo.or.cz/clogger.git
103
105
 
104
106
  You may also browse and download snapshot tarballs:
105
107
 
106
- * https://yhbt.net/clogger.git
107
- * http://repo.or.cz/w/clogger.git (gitweb)
108
+ * https://YHBT.net/clogger.git
109
+ * https://repo.or.cz/w/clogger.git (gitweb)
108
110
 
109
- The mailing list (see below) is central for coordination and
110
- development. Patches should always be sent inline
111
- (git format-patch -M + git send-email) so we can reply to them inline.
111
+ We use email for coordination and development, see below:
112
112
 
113
113
  == CONTACT
114
114
 
115
115
  All feedback (bug reports, user/development discussion, patches, pull
116
- requests) go to the public mailing list.
116
+ requests) is done via publicly-archived email:
117
117
 
118
- * mailto:clogger-public@yhbt.net
118
+ * https://YHBT.net/clogger-public/
119
+ * imaps://YHBT.net/inbox.comp.lang.ruby.clogger.0
120
+ * nntps://news.public-inbox.org/inbox.comp.lang.ruby.clogger
119
121
 
120
- Do not send HTML mail or attachments. Do not top post.
122
+ Tor users may also access HTTP, IMAP, and NNTP archives via .onion:
121
123
 
122
- Homepage: https://yhbt.net/clogger/
124
+ * http://7fh6tueqddpjyxjmgtdiueylzoqt6pt7hec3pukyptlmohoowvhde4yd.onion/clogger-public/
125
+ * imap://7fh6tueqddpjyxjmgtdiueylzoqt6pt7hec3pukyptlmohoowvhde4yd.onion/inbox.comp.lang.ruby.clogger.0
126
+ * nntp://7fh6tueqddpjyxjmgtdiueylzoqt6pt7hec3pukyptlmohoowvhde4yd.onion/inbox.comp.lang.ruby.clogger
127
+
128
+ AUTH=ANONYMOUS is supported for IMAP and IMAPS, and any
129
+ username + password will work.
130
+
131
+ No subscription or real names will ever be required to email us.
132
+ Do not send HTML email, do not top post.
133
+
134
+ * mailto:clogger-public@YHBT.net
135
+
136
+ Homepage: https://YHBT.net/clogger/
123
137
 
124
138
  == INSTALL
125
139
 
data/clogger.gemspec CHANGED
@@ -3,12 +3,12 @@ manifest = File.exist?('.manifest') ?
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = %q{clogger}
6
- s.version = (ENV['VERSION'] || '2.1.0').dup
7
- s.homepage = 'https://yhbt.net/clogger/'
6
+ s.version = (ENV['VERSION'] || '2.4.0').dup
7
+ s.homepage = 'https://YHBT.net/clogger/'
8
8
  s.authors = ["cloggers"]
9
9
  s.summary = 'configurable request logging for Rack'
10
10
  s.description = File.read('README').split("\n\n")[1]
11
- s.email = %q{clogger-public@yhbt.net}
11
+ s.email = %q{clogger-public@YHBT.net}
12
12
  s.extra_rdoc_files = IO.readlines('.document').map!(&:chomp!).keep_if do |f|
13
13
  File.exist?(f)
14
14
  end
@@ -1,3 +1,6 @@
1
+ /* quiet deprecation for _BSD_SOURCE and _SVID_SOURCE: */
2
+ #define _DEFAULT_SOURCE 1
3
+
1
4
  #include <ruby.h>
2
5
  #ifdef HAVE_RUBY_IO_H
3
6
  # include <ruby/io.h>
@@ -374,12 +377,40 @@ static void append_ts(struct clogger *c, VALUE op, struct timespec *ts)
374
377
  rb_str_buf_cat(c->log_buf, buf, nr);
375
378
  }
376
379
 
380
+ #define NANO_PER_SEC (1000 * 1000 * 1000)
377
381
  static void append_request_time_fmt(struct clogger *c, VALUE op)
378
382
  {
379
383
  struct timespec now;
384
+ unsigned long ipow = NUM2ULONG(rb_ary_entry(op, 3));
380
385
 
381
386
  clock_gettime(hopefully_CLOCK_MONOTONIC, &now);
382
387
  clock_diff(&now, &c->ts_start);
388
+ if (ipow) {
389
+ struct timespec prev;
390
+ unsigned long adj = 1;
391
+ /*
392
+ * n.b. timespec.tv_sec may not be time_t on some platforms,
393
+ * so we use a full timespec struct instead of time_t:
394
+ */
395
+ prev.tv_sec = now.tv_sec;
396
+ do { adj *= 10; } while (--ipow);
397
+ now.tv_sec *= adj;
398
+ now.tv_nsec *= adj;
399
+ if (now.tv_nsec >= NANO_PER_SEC) {
400
+ int64_t add = now.tv_nsec / NANO_PER_SEC;
401
+ now.tv_sec += add;
402
+ now.tv_nsec %= NANO_PER_SEC;
403
+ }
404
+ if (now.tv_sec < prev.tv_sec) { /* overflowed */
405
+ now.tv_nsec = NANO_PER_SEC - 1;
406
+ /*
407
+ * some platforms may use unsigned .tv_sec, but
408
+ * they're not worth supporting, so keep unsigned:
409
+ */
410
+ now.tv_sec = (time_t)(sizeof(now.tv_sec) == 4 ?
411
+ INT_MAX : LONG_MAX);
412
+ }
413
+ }
383
414
  append_ts(c, op, &now);
384
415
  }
385
416
 
@@ -416,10 +447,11 @@ static void append_request(struct clogger *c)
416
447
  {
417
448
  VALUE tmp;
418
449
 
419
- /* REQUEST_METHOD doesn't need escaping, Rack::Lint governs it */
420
450
  tmp = rb_hash_aref(c->env, g_REQUEST_METHOD);
421
- if (!NIL_P(tmp))
451
+ if (!NIL_P(tmp)) {
452
+ tmp = byte_xs(tmp);
422
453
  rb_str_buf_append(c->log_buf, tmp);
454
+ }
423
455
 
424
456
  rb_str_buf_append(c->log_buf, g_space);
425
457
 
@@ -1073,6 +1105,7 @@ void Init_clogger_ext(void)
1073
1105
  tmp = rb_const_get(rb_cObject, rb_intern("Rack"));
1074
1106
  tmp = rb_const_get(tmp, rb_intern("Utils"));
1075
1107
  cHeaderHash = rb_const_get(tmp, rb_intern("HeaderHash"));
1108
+ rb_ary_push(mark_ary, cHeaderHash);
1076
1109
 
1077
1110
  rb_obj_freeze(mark_ary);
1078
1111
  }
data/lib/clogger/pure.rb CHANGED
@@ -118,8 +118,7 @@ private
118
118
  version = env['HTTP_VERSION'] and version = " #{byte_xs(version)}"
119
119
  qs = env['QUERY_STRING']
120
120
  qs.empty? or qs = "?#{byte_xs(qs)}"
121
- "#{env['REQUEST_METHOD']} " \
122
- "#{request_uri(env)}#{version}"
121
+ "#{byte_xs(env['REQUEST_METHOD'] || '')} #{request_uri(env)}#{version}"
123
122
  when :request_uri
124
123
  request_uri(env)
125
124
  when :request_length
@@ -134,17 +133,10 @@ private
134
133
  when :time_iso8601
135
134
  Time.now.iso8601
136
135
  when :time_local
137
- t = Time.now
138
- off = t.utc_offset
139
- sign = off < 0 ? '-' : '+'
140
- sprintf("%02d/%s/%d:%02d:%02d:%02d #{sign}%02d%02d",
141
- t.mday, Time::RFC2822_MONTH_NAME[t.mon - 1],
142
- t.year, t.hour, t.min, t.sec, *(off.abs / 60).divmod(60))
136
+ # %b in Ruby is locale-independent, unlike strftime(3) in C
137
+ Time.now.strftime('%d/%b/%Y:%H:%M:%S %z')
143
138
  when :time_utc
144
- t = Time.now.utc
145
- sprintf("%02d/%s/%d:%02d:%02d:%02d +0000",
146
- t.mday, Time::RFC2822_MONTH_NAME[t.mon - 1],
147
- t.year, t.hour, t.min, t.sec)
139
+ Time.now.utc.strftime('%d/%b/%Y:%H:%M:%S %z')
148
140
  else
149
141
  raise "EDOOFUS #{special_nr}"
150
142
  end
@@ -166,6 +158,7 @@ private
166
158
  when OP_TIME_UTC; Time.now.utc.strftime(op[1])
167
159
  when OP_REQUEST_TIME
168
160
  t = mono_now - start
161
+ t = t * (10 ** op[3])
169
162
  time_format(t.to_i, (t - t.to_i) * 1000000, op[1], op[2])
170
163
  when OP_TIME
171
164
  t = Time.now
data/lib/clogger.rb CHANGED
@@ -51,7 +51,7 @@ private
51
51
 
52
52
  SCAN = /([^$]*)(\$+(?:env\{\w+(?:\.[\w\.]+)?\}|
53
53
  e\{[^\}]+\}|
54
- (?:request_)?time\{\d+\}|
54
+ (?:request_)?time\{\d+(?:,\d+)?\}|
55
55
  time_(?:utc|local)\{[^\}]+\}|
56
56
  \w*))?([^$]*)/x
57
57
 
@@ -92,7 +92,14 @@ private
92
92
  when /\A\$time\{(\d+)\}\z/
93
93
  rv << [ OP_TIME, *usec_conv_pair(tok, $1.to_i) ]
94
94
  when /\A\$request_time\{(\d+)\}\z/
95
- rv << [ OP_REQUEST_TIME, *usec_conv_pair(tok, $1.to_i) ]
95
+ rv << [ OP_REQUEST_TIME, *usec_conv_pair(tok, $1.to_i), 0 ]
96
+ when /\A\$request_time\{(\d+),(\d+)\}\z/
97
+ ipow = $1.to_i
98
+ prec = $2.to_i
99
+ if ipow > 9 # nanosecond precision is the highest POSIX goes
100
+ raise ArgumentError, "#{tok}: too big: #{ipow} (max=9)"
101
+ end
102
+ rv << [ OP_REQUEST_TIME, *usec_conv_pair(tok, prec), ipow ]
96
103
  else
97
104
  tok_sym = tok[1..-1].to_sym
98
105
  if special_code = SPECIAL_VARS[tok_sym]
data/pkg.mk CHANGED
@@ -127,7 +127,8 @@ publish_doc:
127
127
  -git set-file-times
128
128
  $(MAKE) doc
129
129
  $(MAKE) doc_gz
130
- $(RSYNC) -av doc/ $(RSYNC_DEST)/
130
+ $(RSYNC) -av doc/ $(RSYNC_DEST)/ \
131
+ --exclude index.html* --exclude created.rid*
131
132
  git ls-files | xargs touch
132
133
  endif
133
134
 
data/test/test_clogger.rb CHANGED
@@ -167,10 +167,11 @@ class TestClogger < Test::Unit::TestCase
167
167
  ary = compile_format(
168
168
  '$remote_addr - $remote_user [$time_local] ' \
169
169
  '"$request" $status $body_bytes_sent "$http_referer" ' \
170
- '"$http_user_agent" "$http_cookie" $request_time ' \
170
+ '"$http_user_agent" "$http_cookie" $request_time $request_time{6,0} ' \
171
171
  '$env{rack.url_scheme}' \
172
172
  "\n")
173
173
  }
174
+
174
175
  expect = [
175
176
  [ Clogger::OP_REQUEST, "REMOTE_ADDR" ],
176
177
  [ Clogger::OP_LITERAL, " - " ],
@@ -190,7 +191,9 @@ class TestClogger < Test::Unit::TestCase
190
191
  [ Clogger::OP_LITERAL, "\" \"" ],
191
192
  [ Clogger::OP_REQUEST, "HTTP_COOKIE" ],
192
193
  [ Clogger::OP_LITERAL, "\" " ],
193
- [ Clogger::OP_REQUEST_TIME, '%d.%03d', 1000 ],
194
+ [ Clogger::OP_REQUEST_TIME, '%d.%03d', 1000, 0],
195
+ [ Clogger::OP_LITERAL, " " ],
196
+ [ Clogger::OP_REQUEST_TIME, '%d', 1, 6],
194
197
  [ Clogger::OP_LITERAL, " " ],
195
198
  [ Clogger::OP_REQUEST, "rack.url_scheme" ],
196
199
  [ Clogger::OP_LITERAL, "\n" ],
@@ -209,6 +212,22 @@ class TestClogger < Test::Unit::TestCase
209
212
  assert_equal "-#{current}-\n", str.string
210
213
  end
211
214
 
215
+ def test_fiber
216
+ begin
217
+ current = Fiber.current.to_s
218
+ rescue NameError => e
219
+ warn "your Ruby does not support fibers #{e}"
220
+ return
221
+ end
222
+ str = StringIO.new
223
+ app = lambda { |env| [ 302, {}, [] ] }
224
+ cl = Clogger.new(app,
225
+ :logger => str,
226
+ :format => "-$e{Fiber.current}-\n")
227
+ status, headers, body = cl.call(@req)
228
+ assert_equal "-#{current}-\n", str.string
229
+ end
230
+
212
231
  def test_pid
213
232
  str = StringIO.new
214
233
  app = lambda { |env| [ 302, {}, [] ] }
@@ -721,6 +740,24 @@ class TestClogger < Test::Unit::TestCase
721
740
  assert s[-1].to_f <= 0.110
722
741
  end
723
742
 
743
+ def test_request_time_with_multiplier
744
+ s = []
745
+ app = lambda { |env| sleep(0.1) ; [302, [], [] ] }
746
+ cl = Clogger.new(app, :logger => s, :format => "$request_time{9,0}")
747
+ status, headers, body = cl.call(@req)
748
+ assert_nothing_raised { body.each { |x| } ; body.close }
749
+ assert s[-1].to_f >= 100000000
750
+ assert s[-1].to_f <= 300000000
751
+ end
752
+
753
+ def test_request_time_with_invalid_multiplier
754
+ s = []
755
+ app = lambda { |env| sleep(0.1) ; [302, [], [] ] }
756
+ assert_raise(ArgumentError) {
757
+ cl = Clogger.new(app, :logger => s, :format => "$request_time{10,0}")
758
+ }
759
+ end
760
+
724
761
  def test_insanely_long_time_format
725
762
  s = []
726
763
  app = lambda { |env| [200, [], [] ] }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: clogger
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.1
4
+ version: 2.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - cloggers
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-01-08 00:00:00.000000000 Z
11
+ date: 2022-06-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack
@@ -47,7 +47,7 @@ dependencies:
47
47
  description: |-
48
48
  clogger is Rack middleware for logging HTTP requests. The log format
49
49
  is customizable so you can specify exactly which fields to log.
50
- email: clogger-public@yhbt.net
50
+ email: clogger-public@YHBT.net
51
51
  executables: []
52
52
  extensions:
53
53
  - ext/clogger_ext/extconf.rb
@@ -85,7 +85,7 @@ files:
85
85
  - setup.rb
86
86
  - test/test_clogger.rb
87
87
  - test/test_clogger_to_path.rb
88
- homepage: https://yhbt.net/clogger/
88
+ homepage: https://YHBT.net/clogger/
89
89
  licenses:
90
90
  - LGPL-2.1+
91
91
  metadata: {}