h1p 0.6.1 → 1.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: 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: []