qeweney 0.21 → 0.22

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: baa39524e0bdc014c08314c0363b14ed8eeb793609db855d1a1d5a43536d434c
4
- data.tar.gz: 9bd4393c88b9258e9ead6b88fffa1f7d8d19a78169530ef8021824994c097916
3
+ metadata.gz: 83fd3aeea3a2ab2fff17ca871189e60098168523583b801423a6d2ecd21d5a9f
4
+ data.tar.gz: 53dcc37653949d20a6324d5e24df1f5b827a56ce134dd69c168369242917f825
5
5
  SHA512:
6
- metadata.gz: b0e073653b72c942f54caad5b63f7352d63093b0ea58922fedf38fd8626b2eb2fae99b2af0737cd78a5e8f3a043370ebe842f06045ec15fbe80464d1ba7736e9
7
- data.tar.gz: 85cedcf3e0bf3ae98f751735d495c0f0818b4ed17928c9db7c71d5524a8eb4a0e64e41786f6dd4933f9c0766f59f24d92471102f132906ac178edd233bbe1a6d
6
+ metadata.gz: 3cee5ee51f356cddcff578d2cd2e582ea0f293ce2d898e43022fe9ab83d0e812423473f047701306796f70ac53833818b125f7308a438c6a05d18a00465e9e93
7
+ data.tar.gz: 6de0f052bc1077e665d5c5bd3f6fc8de59442e5944ddc68c3b9ceca873cfdd2e6ed47880bb5e0a89dbb36cbfc802936f3f15c121e82e59922515f000bd5d7b31
data/CHANGELOG.md CHANGED
@@ -1,6 +1,11 @@
1
+ ## 0.22 2025-08-28
2
+
3
+ - Improve form data parsing.
4
+ - Add `Qeweney::BadRequestError` exception class.
5
+
1
6
  ## 0.20 2025-01-09
2
7
 
3
- - Improve `Qeweney::MockAdapter`
8
+ - Improve `Qeweney::MockAdapter`.
4
9
 
5
10
  ## 0.18 2022-02-16
6
11
 
data/TODO.md CHANGED
@@ -1,3 +1,7 @@
1
+ ## Immediate
2
+
3
+ - [ ] Tests for `#parse_form_data`!
4
+
1
5
  ## Serve files / arbitrary content
2
6
 
3
7
  - `#serve_file(path, opts)`
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Qeweney
4
+ class BadRequestError < StandardError
5
+ end
6
+ end
@@ -35,4 +35,4 @@ module Qeweney
35
35
  end
36
36
  end
37
37
  end
38
- end
38
+ end
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'qeweney'
4
+
3
5
  module Qeweney
4
6
  class MockAdapter
5
7
  attr_reader :body, :headers, :calls
@@ -115,4 +115,4 @@ module Qeweney
115
115
  (headers[':rx'] || 0) + (headers[':tx'] || 0)
116
116
  end
117
117
  end
118
- end
118
+ end
@@ -3,6 +3,8 @@
3
3
  require 'uri'
4
4
  require 'escape_utils'
5
5
 
6
+ require_relative './errors'
7
+
6
8
  module Qeweney
7
9
  module RequestInfoMethods
8
10
  def host
@@ -126,12 +128,13 @@ module Qeweney
126
128
  when /^application\/x-www-form-urlencoded/
127
129
  parse_urlencoded_form_data(body)
128
130
  else
129
- raise "Unsupported form data content type: #{content_type}"
131
+ raise BadRequestError, "Unsupported form data content type: #{content_type}"
130
132
  end
131
133
  end
132
134
 
133
135
  def parse_multipart_form_data(body, boundary)
134
136
  parts = body.split(boundary)
137
+ raise BadRequestError, 'Invalid form data' if parts.size < 2
135
138
  parts.each_with_object({}) do |p, h|
136
139
  next if p.empty? || p == "--\r\n"
137
140
 
@@ -174,7 +177,7 @@ module Qeweney
174
177
  [part, headers]
175
178
  end
176
179
 
177
- PARAMETER_RE = /^(.+)=(.*)$/.freeze
180
+ PARAMETER_RE = /^([^=]+)(?:=(.*))?$/.freeze
178
181
  MAX_PARAMETER_NAME_SIZE = 256
179
182
  MAX_PARAMETER_VALUE_SIZE = 2**20 # 1MB
180
183
 
@@ -183,15 +186,15 @@ module Qeweney
183
186
 
184
187
  body.force_encoding(Encoding::UTF_8) unless body.encoding == Encoding::UTF_8
185
188
  body.split('&').each_with_object({}) do |i, m|
186
- raise 'Invalid parameter format' unless i =~ PARAMETER_RE
189
+ raise BadRequestError, 'Invalid parameter format' unless i =~ PARAMETER_RE
187
190
 
188
191
  k = Regexp.last_match(1)
189
- raise 'Invalid parameter size' if k.size > MAX_PARAMETER_NAME_SIZE
192
+ raise BadRequestError, 'Invalid parameter size' if k.size > MAX_PARAMETER_NAME_SIZE
190
193
 
191
194
  v = Regexp.last_match(2)
192
- raise 'Invalid parameter size' if v.size > MAX_PARAMETER_VALUE_SIZE
195
+ raise BadRequestError, 'Invalid parameter size' if v && v.size > MAX_PARAMETER_VALUE_SIZE
193
196
 
194
- m[EscapeUtils.unescape_uri(k)] = EscapeUtils.unescape_uri(v)
197
+ m[EscapeUtils.unescape_uri(k)] = v ? EscapeUtils.unescape_uri(v) : true
195
198
  end
196
199
  end
197
200
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Qeweney
4
- VERSION = '0.21'
4
+ VERSION = '0.22'
5
5
  end
data/lib/qeweney.rb CHANGED
@@ -3,5 +3,6 @@
3
3
  module Qeweney
4
4
  end
5
5
 
6
- require_relative 'qeweney/request.rb'
7
- require_relative 'qeweney/status.rb'
6
+ require_relative 'qeweney/errors'
7
+ require_relative 'qeweney/request'
8
+ require_relative 'qeweney/status'
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: qeweney
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.21'
4
+ version: '0.22'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sharon Rosner
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2025-01-09 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: escape_utils
@@ -96,6 +96,7 @@ files:
96
96
  - TODO.md
97
97
  - examples/routing_benchmark.rb
98
98
  - lib/qeweney.rb
99
+ - lib/qeweney/errors.rb
99
100
  - lib/qeweney/mime_types.rb
100
101
  - lib/qeweney/mock_adapter.rb
101
102
  - lib/qeweney/rack.rb
@@ -136,7 +137,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
136
137
  - !ruby/object:Gem::Version
137
138
  version: '0'
138
139
  requirements: []
139
- rubygems_version: 3.6.2
140
+ rubygems_version: 3.6.9
140
141
  specification_version: 4
141
142
  summary: Qeweney - cross library HTTP request / response API
142
143
  test_files: []