agoo 2.15.13 → 2.15.14

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: 1d25af07a365bf540edf65b600f250c8a6ae25b0aef09f9ad96dfe8be43a1dd8
4
- data.tar.gz: b460cc434a4b18a05d040b5771c2c4031a3c40ead1d3759e0b92d26756e76ccf
3
+ metadata.gz: 12e12e3428c92bdb7c5426a20a481935f89a7759a59ae9e7b66da2d49ecc4129
4
+ data.tar.gz: 342b51f1de8b8d6a589ff36717d84ed4e0e8a9898d1ff0b2439749a9b26e327e
5
5
  SHA512:
6
- metadata.gz: 9eb4d926cca9cd7c613ce395299b3d82ad5cfedc3187956193de90b0aac4909dd89202982f4d3d3820515ccaa5f385725cdc767144eaca0e568091935336aaee
7
- data.tar.gz: e80520cd9ab1d0f7dc9535938113165735164b63942cd89e16881051d9edef3ff828a51771824ac127f078d71e3f9d3f6de17ccef5ae01092bffb0091fd6e9ba
6
+ metadata.gz: d0d8a64a93f955a5dd89d5b69e82b3c4aef9454aedda197227e79f6d3892c1650a7a766b8025a648e865f6350331642a754dc29ce4c5643c6d8a1ad42f2a0e23
7
+ data.tar.gz: dfad2c83a41d4a44e1af4181caa6556f4e0fa67c46f23066365f7a97460fb8561191770750f35f41226e4f3b66fb41596b8c4eb50980a485935d8e7fbd5dc98c
data/CHANGELOG.md CHANGED
@@ -2,6 +2,12 @@
2
2
 
3
3
  All changes to the Agoo gem are documented here. Releases follow semantic versioning.
4
4
 
5
+ ## [2.15.14] - 2025-09-24
6
+
7
+ ### Fixed
8
+
9
+ - HTTP DELETE requests can now include a body.
10
+
5
11
  ## [2.15.13] - 2024-10-20
6
12
 
7
13
  ### Fixed
data/ext/agoo/con.c CHANGED
@@ -297,6 +297,10 @@ con_header_read(agooCon c, size_t *mlenp) {
297
297
  agooHook hook = NULL;
298
298
  agooPage p;
299
299
  struct _agooErr err = AGOO_ERR_INIT;
300
+ const char *v;
301
+ int vlen = 0;
302
+ char *vend;
303
+
300
304
 
301
305
  if (NULL == hend) {
302
306
  if (sizeof(c->buf) - 1 <= c->bcnt) {
@@ -321,11 +325,7 @@ con_header_read(agooCon c, size_t *mlenp) {
321
325
  }
322
326
  method = AGOO_GET;
323
327
  break;
324
- case 'P': {
325
- const char *v;
326
- int vlen = 0;
327
- char *vend;
328
-
328
+ case 'P':
329
329
  if (3 == b - c->buf && 0 == strncmp("PUT", c->buf, 3)) {
330
330
  method = AGOO_PUT;
331
331
  } else if (4 == b - c->buf && 0 == strncmp("POST", c->buf, 4)) {
@@ -343,12 +343,17 @@ con_header_read(agooCon c, size_t *mlenp) {
343
343
  return bad_request(c, 411, __LINE__);
344
344
  }
345
345
  break;
346
- }
347
346
  case 'D':
348
347
  if (6 != b - c->buf || 0 != strncmp("DELETE", c->buf, 6)) {
349
348
  return bad_request(c, 400, __LINE__);
350
349
  }
351
350
  method = AGOO_DELETE;
351
+ if (NULL != (v = agoo_con_header_value(c->buf, (int)(hend - c->buf), "Content-Length", &vlen))) {
352
+ clen = (size_t)strtoul(v, &vend, 10);
353
+ if (vend != v + vlen) {
354
+ return bad_request(c, 411, __LINE__);
355
+ }
356
+ }
352
357
  break;
353
358
  case 'H':
354
359
  if (4 != b - c->buf || 0 != strncmp("HEAD", c->buf, 4)) {
data/lib/agoo/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
 
2
2
  module Agoo
3
3
  # Agoo version.
4
- VERSION = '2.15.13'
4
+ VERSION = '2.15.14'
5
5
  end
@@ -29,6 +29,11 @@ class BaseHandlerTest < Minitest::Test
29
29
  elsif 'PUT' == req.request_method
30
30
  res.code = 201
31
31
  res.body = req.body
32
+ elsif 'DELETE' == req.request_method
33
+ res.code = 200
34
+ res.body = req.body
35
+
36
+
32
37
  end
33
38
  end
34
39
  end
@@ -66,6 +71,7 @@ class BaseHandlerTest < Minitest::Test
66
71
  Agoo::Server.handle(:PUT, "/makeme", handler)
67
72
  Agoo::Server.handle(:GET, "/wild/*/one", WildHandler.new('one'))
68
73
  Agoo::Server.handle(:GET, "/wild/all/**", WildHandler.new('all'))
74
+ Agoo::Server.handle(:DELETE, "/notme", handler)
69
75
 
70
76
  Agoo::Server.start()
71
77
 
@@ -118,9 +124,9 @@ class BaseHandlerTest < Minitest::Test
118
124
  }
119
125
  expect.each_pair { |k,v|
120
126
  if v.nil?
121
- assert_nil(obj[k], k)
127
+ assert_nil(obj[k], k)
122
128
  else
123
- assert_equal(v, obj[k], k)
129
+ assert_equal(v, obj[k], k)
124
130
  end
125
131
  }
126
132
  end
@@ -155,6 +161,21 @@ class BaseHandlerTest < Minitest::Test
155
161
  assert_equal('hello', res.body)
156
162
  end
157
163
 
164
+ def test_delete
165
+ uri = URI('http://localhost:6470/notme')
166
+ req = Net::HTTP::Delete.new(uri)
167
+ # Set the headers the way we want them.
168
+ req['Accept-Encoding'] = '*'
169
+ req['Accept'] = 'application/json'
170
+ req['User-Agent'] = 'Ruby'
171
+ req.body = 'goodbye'
172
+
173
+ res = Net::HTTP.start(uri.hostname, uri.port) { |h|
174
+ h.request(req)
175
+ }
176
+ assert_equal('goodbye', res.body)
177
+ end
178
+
158
179
  def test_wild_one
159
180
  uri = URI('http://localhost:6470/wild/abc/one')
160
181
  req = Net::HTTP::Get.new(uri)
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: agoo
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.15.13
4
+ version: 2.15.14
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter Ohler
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2024-10-20 00:00:00.000000000 Z
10
+ date: 2025-09-24 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: oj
@@ -38,16 +37,16 @@ executables:
38
37
  extensions:
39
38
  - ext/agoo/extconf.rb
40
39
  extra_rdoc_files:
41
- - README.md
42
40
  - CHANGELOG.md
43
41
  - LICENSE
42
+ - README.md
44
43
  - misc/flymd.md
44
+ - misc/glue-diagram.svg
45
45
  - misc/glue.md
46
46
  - misc/optimize.md
47
47
  - misc/push.md
48
48
  - misc/rails.md
49
49
  - misc/song.md
50
- - misc/glue-diagram.svg
51
50
  files:
52
51
  - CHANGELOG.md
53
52
  - LICENSE
@@ -183,7 +182,6 @@ metadata:
183
182
  documentation_uri: http://www.ohler.com/agoo/index.html
184
183
  source_code_uri: https://github.com/ohler55/agoo
185
184
  homepage: https://github.com/ohler55/agoo
186
- post_install_message:
187
185
  rdoc_options:
188
186
  - "-t"
189
187
  - Agoo
@@ -209,8 +207,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
209
207
  version: '0'
210
208
  requirements:
211
209
  - Linux or macOS
212
- rubygems_version: 3.5.11
213
- signing_key:
210
+ rubygems_version: 3.6.9
214
211
  specification_version: 4
215
212
  summary: An HTTP server
216
213
  test_files: