h1p 0.6.1 → 1.0

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: 96197142deeb30d27fe9b3fc9de21a07ed1de8f0a1d3db9b8d967310056bdd12
4
- data.tar.gz: aa71893e95f7a7e8ba8de8123987445262edd6dbcad7efba12337091a2421d14
3
+ metadata.gz: 2d2493b6fc11d7deb1231f9a2d0bf1c6dc59b00a01065da7086e8c65326f74df
4
+ data.tar.gz: e30bf2c5a3213a4744a66a412e2db34a2b26b05baa8073409a18c7e0bd314de3
5
5
  SHA512:
6
- metadata.gz: 9380e218a2433f61a88676fb807ecb742391dff2c6d7e4937d24ff1385839ed897eaf81eb3d8d1f916bcf53f30cd2fd9c31f0c78fcd6c0e35d3753dc1d3a1252
7
- data.tar.gz: 2ce69a5e542390018f779e9ba0a73263b362b3a6d69838494da73d18cb6f84a3262ed98fd086bb098ffa253f264db4d3e1d40e5ae8f9757ca1928c36ce9f02ce
6
+ metadata.gz: 2adc85f461d3a41e7e67f9c199be486b85fd46407e60455329ac065a5779c60d62328a049091bb9d4b7d0be2f1610db38a8744c35f7071b06991ec837235a981
7
+ data.tar.gz: 926acbd38590f74666e8d774b6f54d3b610cbf0570495727049b2c2ba628a80888d30e2e0bd83ac26b3897c9a0875be42ce336a439a9e07a2dfb8160aebc8441
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ ## 1.0 2023-06-07
2
+
3
+ - Add support for array as header value (#2)
4
+
1
5
  ## 0.6.1 2023-05-28
2
6
 
3
7
  - Fix sending response with frozen headers hash
data/Gemfile.lock CHANGED
@@ -1,14 +1,14 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- h1p (0.6.1)
4
+ h1p (1.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
8
8
  specs:
9
- minitest (5.17.0)
9
+ minitest (5.18.0)
10
10
  rake (13.0.6)
11
- rake-compiler (1.2.1)
11
+ rake-compiler (1.2.3)
12
12
  rake
13
13
 
14
14
  PLATFORMS
@@ -16,9 +16,9 @@ PLATFORMS
16
16
 
17
17
  DEPENDENCIES
18
18
  h1p!
19
- minitest (~> 5.17.0)
19
+ minitest (~> 5.18.0)
20
20
  rake (~> 13.0.6)
21
- rake-compiler (= 1.2.1)
21
+ rake-compiler (= 1.2.3)
22
22
 
23
23
  BUNDLED WITH
24
24
  2.2.26
data/ext/h1p/h1p.c CHANGED
@@ -22,6 +22,7 @@ ID ID_call;
22
22
  ID ID_downcase;
23
23
  ID ID_eof_p;
24
24
  ID ID_eq;
25
+ ID ID_join;
25
26
  ID ID_read_method;
26
27
  ID ID_read;
27
28
  ID ID_readpartial;
@@ -56,6 +57,7 @@ VALUE STR_transfer_encoding_capitalized;
56
57
 
57
58
  VALUE STR_CRLF;
58
59
  VALUE STR_EMPTY_CHUNK;
60
+ VALUE STR_COMMA_SPACE;
59
61
 
60
62
  VALUE SYM_backend_read;
61
63
  VALUE SYM_backend_recv;
@@ -1176,12 +1178,24 @@ void send_response_write_status_line(send_response_ctx *ctx, VALUE protocol, VAL
1176
1178
  ctx->buffer_len += partlen + 2;
1177
1179
  }
1178
1180
 
1181
+ inline static VALUE format_comma_separated_header_values(VALUE array) {
1182
+ return rb_funcall(array, ID_join, 1, STR_COMMA_SPACE);
1183
+ }
1184
+
1179
1185
  int send_response_write_header(VALUE key, VALUE val, VALUE arg) {
1180
1186
  if (TYPE(key) != T_STRING) key = rb_funcall(key, ID_to_s, 0);
1181
1187
  char *keyptr = RSTRING_PTR(key);
1182
1188
  if (RSTRING_LEN(key) < 1 || keyptr[0] == ':') return 0;
1183
1189
 
1184
- if (TYPE(val) != T_STRING) val = rb_funcall(val, ID_to_s, 0);
1190
+ switch (TYPE(val)) {
1191
+ case T_STRING:
1192
+ break;
1193
+ case T_ARRAY:
1194
+ val = format_comma_separated_header_values(val);
1195
+ break;
1196
+ default:
1197
+ val = rb_funcall(val, ID_to_s, 0);
1198
+ }
1185
1199
  unsigned int keylen = RSTRING_LEN(key);
1186
1200
  char *valptr = RSTRING_PTR(val);
1187
1201
  unsigned int vallen = RSTRING_LEN(val);
@@ -1377,6 +1391,7 @@ void Init_H1P(void) {
1377
1391
  ID_downcase = rb_intern("downcase");
1378
1392
  ID_eof_p = rb_intern("eof?");
1379
1393
  ID_eq = rb_intern("==");
1394
+ ID_join = rb_intern("join");
1380
1395
  ID_read_method = rb_intern("__read_method__");
1381
1396
  ID_read = rb_intern("read");
1382
1397
  ID_readpartial = rb_intern("readpartial");
@@ -1405,8 +1420,9 @@ void Init_H1P(void) {
1405
1420
  GLOBAL_STR(STR_transfer_encoding, "transfer-encoding");
1406
1421
  GLOBAL_STR(STR_transfer_encoding_capitalized, "Transfer-Encoding");
1407
1422
 
1408
- GLOBAL_STR(STR_CRLF, "\r\n");
1409
- GLOBAL_STR(STR_EMPTY_CHUNK, "0\r\n\r\n");
1423
+ GLOBAL_STR(STR_CRLF, "\r\n");
1424
+ GLOBAL_STR(STR_EMPTY_CHUNK, "0\r\n\r\n");
1425
+ GLOBAL_STR(STR_COMMA_SPACE, ", ");
1410
1426
 
1411
1427
  SYM_backend_read = ID2SYM(ID_backend_read);
1412
1428
  SYM_backend_recv = ID2SYM(ID_backend_recv);
data/h1p.gemspec CHANGED
@@ -18,7 +18,7 @@ Gem::Specification.new do |s|
18
18
  s.require_paths = ["lib"]
19
19
  s.required_ruby_version = '>= 2.7'
20
20
 
21
- s.add_development_dependency 'rake-compiler', '1.2.1'
21
+ s.add_development_dependency 'rake-compiler', '1.2.3'
22
22
  s.add_development_dependency 'rake', '~>13.0.6'
23
- s.add_development_dependency 'minitest', '~>5.17.0'
23
+ s.add_development_dependency 'minitest', '~>5.18.0'
24
24
  end
data/lib/h1p/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module H1P
4
- VERSION = '0.6.1'
4
+ VERSION = '1.0'
5
5
  end
data/test/test_h1p.rb CHANGED
@@ -35,6 +35,14 @@ class SendResponseTest < MiniTest::Test
35
35
  assert_equal "HTTP/1.1 200 OK\r\nFoo: Bar\r\nX-Blah: 123\r\nContent-Length: 0\r\n\r\n", response
36
36
  end
37
37
 
38
+ def test_send_response_multiple_header_values
39
+ i, o = IO.pipe
40
+ H1P.send_response(o, { :Foo => ['Bar', 'Baz'], 'X-Blah' => 123 })
41
+ o.close
42
+ response = i.read
43
+ assert_equal "HTTP/1.1 200 OK\r\nFoo: Bar, Baz\r\nX-Blah: 123\r\nContent-Length: 0\r\n\r\n", response
44
+ end
45
+
38
46
  def test_send_response_with_body
39
47
  i, o = IO.pipe
40
48
  H1P.send_response(o, {}, "foobar")
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: h1p
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.1
4
+ version: '1.0'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sharon Rosner
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-05-28 00:00:00.000000000 Z
11
+ date: 2023-06-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake-compiler
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 1.2.1
19
+ version: 1.2.3
20
20
  type: :development
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: 1.2.1
26
+ version: 1.2.3
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 5.17.0
47
+ version: 5.18.0
48
48
  type: :development
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: 5.17.0
54
+ version: 5.18.0
55
55
  description:
56
56
  email: sharon@noteflakes.com
57
57
  executables: []