api_hammer 0.19.1 → 0.19.2

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: 822c3220d1b6c07c850f3b0c66a5f18c6026bfd6415b059ff3c18569af48939b
4
- data.tar.gz: 3ef1009398f37e4322809a381ccaa23072e3dbb2a32396012ba4f6754ec81d8d
3
+ metadata.gz: 431eb2a642aea887bd47826572e0631ebc6e18daa0714c430d6b0c690bb68ea3
4
+ data.tar.gz: dd74fb4768fb9f51dcb139fe3ba7cf61e9f949b96ec3013cfbde0f41534ced12
5
5
  SHA512:
6
- metadata.gz: 87b589dc7d2228051c011483ac37738f32b82d2761d6a43b72a86cad0711ce214126657fee707ff3a2ef3d1f872f58e8b664be0786cfa1df4f4791cbb0b5940b
7
- data.tar.gz: 61f839239d5997277a7ea88e47b20109b6fd2bb0ee81e54520da2f784088a592f8c3d35d91108455efd1b93a331849ccda861077ce884f9c1e94ea7682b1c73c
6
+ metadata.gz: 22aa57cf47a015dc1c62053c21bff79e549ebcf7cc7d3c2702224fdcd1dd86f037186419525dbb4143c75f9ae9ce639df91af621bd7ce6b5d12b6435e200bdad
7
+ data.tar.gz: c136b0b42e7256bcbb9c8b6498a1a52307d116fcf0d8f0f2f8bb41991842912b3b32a95e86f8442ce36ccb42e8563ca2cac17ad969f177d3567c4b627140039e
data/api_hammer.gemspec CHANGED
@@ -29,10 +29,9 @@ Gem::Specification.new do |spec|
29
29
  spec.require_paths = ['lib']
30
30
 
31
31
  spec.add_dependency 'rack'
32
- spec.add_dependency 'faraday', '~> 1.0'
32
+ spec.add_dependency 'faraday'
33
33
  spec.add_dependency 'term-ansicolor'
34
34
  spec.add_dependency 'json'
35
- spec.add_dependency 'json_pure'
36
35
  spec.add_dependency 'addressable'
37
36
  spec.add_dependency 'coderay'
38
37
  spec.add_dependency 'i18n'
@@ -12,17 +12,23 @@ module ApiHammer
12
12
  # parses the body to an object
13
13
  def object
14
14
  instance_variable_defined?(:@object) ? @object : @object = begin
15
- if media_type == 'application/json'
15
+ if body.nil?
16
+ nil
17
+ elsif media_type == 'application/json'
16
18
  JSON.parse(body) rescue nil
17
19
  elsif media_type == 'application/x-www-form-urlencoded'
18
- CGI.parse(body).map { |k, vs| {k => vs.last} }.inject({}, &:update)
20
+ Addressable::URI.form_unencode(body).group_by(&:first).transform_values do |kvs|
21
+ kvs.map(&:last).inject(nil) { |c, v| c ? v ? "#{c},#{v}" : c : v }
22
+ end
19
23
  end
20
24
  end
21
25
  end
22
26
 
23
27
  def filtered(options)
24
28
  @filtered ||= Body.new(begin
25
- if media_type == 'application/json'
29
+ if body.nil?
30
+ nil
31
+ elsif media_type == 'application/json'
26
32
  begin
27
33
  ApiHammer::Filtration::Json.new(body, options).filter
28
34
  rescue JSON::ParserError
@@ -15,7 +15,7 @@ module ApiHammer
15
15
 
16
16
  def filter
17
17
  reset
18
- obj = ''
18
+ obj = +''
19
19
  while !eos? && scan_result(obj, IGNORE)
20
20
  end
21
21
  if eos?
@@ -57,7 +57,7 @@ module ApiHammer
57
57
  end
58
58
 
59
59
  def filter_array
60
- result = ''
60
+ result = +''
61
61
  delim = false
62
62
  until eos?
63
63
  if (value = filter_value) != UNPARSED
@@ -86,7 +86,7 @@ module ApiHammer
86
86
  FILTERED_JSON = JSON.generate("[FILTERED]", :quirks_mode => true)
87
87
 
88
88
  def filter_object
89
- result = ''
89
+ result = +''
90
90
  delim = false
91
91
  until eos?
92
92
  if (string = filter_string) != UNPARSED
@@ -53,14 +53,18 @@ module ApiHammer
53
53
  super(app, logger)
54
54
  end
55
55
 
56
+ Headers = ::Rack.const_defined?(:Headers) ? ::Rack::Headers : ::Rack::Utils::HeaderHash
57
+
56
58
  def call(env)
57
59
  began_at = Time.now
58
60
  began_ns = Process.clock_gettime(Process::CLOCK_MONOTONIC, :nanosecond)
59
61
 
60
62
  # this is closed after the app is called, so read it before
61
- env["rack.input"].rewind
62
- request_body = env["rack.input"].read
63
- env["rack.input"].rewind
63
+ if env["rack.input"]
64
+ env["rack.input"].rewind
65
+ request_body = env["rack.input"].read
66
+ env["rack.input"].rewind
67
+ end
64
68
 
65
69
  if @logger && @logger.formatter.respond_to?(:current_tags)
66
70
  log_tags = @logger.formatter.current_tags.dup
@@ -76,7 +80,7 @@ module ApiHammer
76
80
  )
77
81
 
78
82
  status, response_headers, response_body = @app.call(env)
79
- response_headers = ::Rack::Utils::HeaderHash.new(response_headers)
83
+ response_headers = Headers.new.merge(response_headers)
80
84
  body_proxy = ::Rack::BodyProxy.new(response_body) do
81
85
  log(env, request_uri, request_body, status, response_headers, response_body, began_at, began_ns, log_tags)
82
86
  end
@@ -135,7 +139,9 @@ module ApiHammer
135
139
  parsed_body = ApiHammer::Body.new(body, content_type)
136
140
  content_type_attrs = ApiHammer::ContentTypeAttrs.new(content_type)
137
141
  if content_type_attrs.text?
138
- if (400..599).include?(status.to_i) || body.size < LARGE_BODY_SIZE
142
+ if body.nil?
143
+ data[role]['body'] = body
144
+ elsif (400..599).include?(status.to_i) || body.size < LARGE_BODY_SIZE
139
145
  # log bodies if they are not large, or if there was an error (either client or server)
140
146
  data[role]['body'] = parsed_body.filtered(@options.reject { |k,v| ![:filter_keys].include?(k) }).jsonifiable.body
141
147
  else
@@ -29,8 +29,10 @@ module ApiHammer
29
29
  _, content_type = headers.detect { |(k,_)| k =~ /\Acontent.type\z/i }
30
30
  if env['REQUEST_METHOD'].downcase != 'head' && ApiHammer::ContentTypeAttrs.new(content_type).text?
31
31
  body = TNLBodyProxy.new(body){}
32
- if headers["Content-Length"]
33
- headers["Content-Length"] = body.map(&:bytesize).inject(0, &:+).to_s
32
+ headers.each_key do |k|
33
+ if "content-length".casecmp?(k)
34
+ headers[k] = body.map(&:bytesize).inject(0, &:+).to_s
35
+ end
34
36
  end
35
37
  end
36
38
  [status, headers, body]
@@ -1,3 +1,3 @@
1
1
  module ApiHammer
2
- VERSION = "0.19.1"
2
+ VERSION = "0.19.2"
3
3
  end
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: api_hammer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.19.1
4
+ version: 0.19.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ethan
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2024-11-20 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: rack
@@ -26,20 +25,6 @@ dependencies:
26
25
  version: '0'
27
26
  - !ruby/object:Gem::Dependency
28
27
  name: faraday
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: '1.0'
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: '1.0'
41
- - !ruby/object:Gem::Dependency
42
- name: term-ansicolor
43
28
  requirement: !ruby/object:Gem::Requirement
44
29
  requirements:
45
30
  - - ">="
@@ -53,7 +38,7 @@ dependencies:
53
38
  - !ruby/object:Gem::Version
54
39
  version: '0'
55
40
  - !ruby/object:Gem::Dependency
56
- name: json
41
+ name: term-ansicolor
57
42
  requirement: !ruby/object:Gem::Requirement
58
43
  requirements:
59
44
  - - ">="
@@ -67,7 +52,7 @@ dependencies:
67
52
  - !ruby/object:Gem::Version
68
53
  version: '0'
69
54
  - !ruby/object:Gem::Dependency
70
- name: json_pure
55
+ name: json
71
56
  requirement: !ruby/object:Gem::Requirement
72
57
  requirements:
73
58
  - - ">="
@@ -175,7 +160,6 @@ homepage: https://github.com/notEthan/api_hammer
175
160
  licenses:
176
161
  - MIT
177
162
  metadata: {}
178
- post_install_message:
179
163
  rdoc_options: []
180
164
  require_paths:
181
165
  - lib
@@ -190,8 +174,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
190
174
  - !ruby/object:Gem::Version
191
175
  version: '0'
192
176
  requirements: []
193
- rubygems_version: 3.5.0.dev
194
- signing_key:
177
+ rubygems_version: 4.0.5
195
178
  specification_version: 4
196
179
  summary: an API tool
197
180
  test_files: []