rails-response-dumper 6.1.0 → 7.0.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: 59962fdb92a1c349f0261e238a2ed342980353b2a3f51c0f61ec13cae47b42dd
4
- data.tar.gz: 1fbc0d60ce41ed61c956f57d4a473eaa74f88cfe2d66f0198897a8565bb8fd81
3
+ metadata.gz: b8c34317cf334351116255b3598e642eae81b92ff4495a0d4bbaa0c1fe93e6df
4
+ data.tar.gz: 9a4c62261212c2d78aa2fe9d4ccc8512712b78b3331c6e14566a395ac787162a
5
5
  SHA512:
6
- metadata.gz: 8118f205179b4d16c035ecbe371e35f2eba95befe8196d493ad9c7a7461fcd83e241fcfb1b55cc79ac11458e8c7db59dd72203a3703f56776b6371fea5428944
7
- data.tar.gz: fe1aed1e3e48342a9665f16254695ebef5acd64213b43e2afcb222455c7c83e08435a13fc26957a49c520f9b1c4bf22df0251e0325e40e5555002b7245711387
6
+ metadata.gz: f9fcdde55d4e5d59a6949a9530c03db0b41df112bdc8e5b01ca1b55b665d077605910bb0ea23fa41da48c8aa185e6ff78d3f561233ed5cbb064b59af7c51d668
7
+ data.tar.gz: 3359004f505f4c2f5ba83d993a94f707ff7ac482e35b7ef65d97e0e6d85a491ef9b37908cbc5356e5273aff14a4e40bb5f7f58c5f03d85eb390a9d4d7ce252cc
@@ -29,6 +29,10 @@ module RailsResponseDumper
29
29
  options[:verbose] = v
30
30
  end
31
31
 
32
+ opts.on('--profile', 'Enable profiling of dumps and list the slowest.') do |v|
33
+ options[:profile] = v
34
+ end
35
+
32
36
  opts.on('--order TYPE', 'Run dumps by the specified order type.') do |v|
33
37
  options[:order] = v
34
38
  end
@@ -36,6 +40,10 @@ module RailsResponseDumper
36
40
  opts.on('--exclude-response-headers', 'Do not output response headers.') do |v|
37
41
  options[:exclude_response_headers] = v
38
42
  end
43
+
44
+ opts.on('--exclude-timestamp', 'Do not output a timestamp with each dump.') do |v|
45
+ options[:exclude_timestamp] = v
46
+ end
39
47
  end.parse!
40
48
 
41
49
  options[:filenames] = ARGV
@@ -17,7 +17,7 @@ module RailsResponseDumper
17
17
  if options[:filenames].present?
18
18
  globs = options[:filenames]
19
19
  else
20
- globs = ['dumpers/**/*.rb']
20
+ globs = ['dumpers/**/*_dumper.rb']
21
21
  FileUtils.rm_rf dumps_dir
22
22
  end
23
23
 
@@ -53,6 +53,8 @@ module RailsResponseDumper
53
53
  dumper_blocks.shuffle!(random: random)
54
54
  end
55
55
 
56
+ profile = {}
57
+
56
58
  catch :fail_fast do
57
59
  dumper_blocks.each do |(defined, dump_block)|
58
60
  name = "#{defined.name}.#{dump_block.name}"
@@ -64,12 +66,14 @@ module RailsResponseDumper
64
66
  dumper.mock_setup
65
67
  begin
66
68
  rollback_after do
69
+ t0 = Time.now
67
70
  dumper.instance_eval(&defined.before_block) if defined.before_block
68
71
  begin
69
72
  dumper.instance_eval(&dump_block.block)
70
73
  ensure
71
74
  dumper.instance_eval(&defined.after_block) if defined.after_block
72
75
  end
76
+ profile[name] = Time.now - t0
73
77
  end
74
78
  ensure
75
79
  dumper.mock_teardown
@@ -86,7 +90,7 @@ module RailsResponseDumper
86
90
  dumper_dir = "#{dumps_dir}/#{klass_path}/#{dump_block.name}"
87
91
  FileUtils.mkdir_p dumper_dir
88
92
 
89
- dumper.responses.each_with_index do |response, index|
93
+ dumper.responses.each_with_index do |(response, timestamp), index|
90
94
  unless response.status == dump_block.expected_status_codes[index]
91
95
  raise <<~ERROR.squish
92
96
  unexpected status code #{response.status} #{response.status_message}
@@ -99,20 +103,22 @@ module RailsResponseDumper
99
103
  dump = {
100
104
  request: {
101
105
  method: request.method,
102
- url: request.url,
103
- body: request.body.string
106
+ url: request.url
104
107
  },
105
108
  response: {
106
109
  status: response.status,
107
110
  statusText: response.status_message,
108
- headers: response.headers,
109
- body: response.body
111
+ headers: response.headers
110
112
  }
111
113
  }
112
114
 
113
115
  dump[:response].delete(:headers) if options[:exclude_response_headers]
114
116
 
117
+ dump[:timestamp] = timestamp.iso8601 unless options[:exclude_timestamp]
118
+
115
119
  File.write("#{dumper_dir}/#{index}.json", JSON.pretty_generate(dump))
120
+ File.write("#{dumper_dir}/#{index}.request_body", request.body.string, mode: 'wb')
121
+ File.write("#{dumper_dir}/#{index}.response_body", response.body, mode: 'wb')
116
122
  end
117
123
 
118
124
  RailsResponseDumper.print_color('.', :green)
@@ -132,21 +138,36 @@ module RailsResponseDumper
132
138
  end
133
139
 
134
140
  puts
135
- return if errors.blank?
136
141
 
137
- puts
138
- errors.each do |error|
139
- RailsResponseDumper.print_color(
140
- "#{error[:dumper_location]} #{error[:name]} received #{error[:exception]}\n",
141
- :red
142
- )
143
- error[:exception].full_message(highlight: RailsResponseDumper::COLORIZE).lines do |line|
144
- RailsResponseDumper.print_color(line, :cyan)
142
+ unless errors.blank?
143
+ puts
144
+
145
+ errors.each do |error|
146
+ RailsResponseDumper.print_color(
147
+ "#{error[:dumper_location]} #{error[:name]} received #{error[:exception]}\n",
148
+ :red
149
+ )
150
+ error[:exception].full_message(highlight: RailsResponseDumper::COLORIZE).lines do |line|
151
+ RailsResponseDumper.print_color(line, :cyan)
152
+ end
153
+ puts
145
154
  end
155
+ end
156
+
157
+ if options.include?(:profile)
158
+ puts
159
+
160
+ # Sort in descending order to obtain the 10 slowest dumps.
161
+ timings = profile.to_a.sort_by { |(_key, value)| -value }
162
+ timings.first(10).each do |(dump, time)|
163
+ formatted_time = format('%.2f', time)
164
+ puts "#{dump} #{formatted_time} s"
165
+ end
166
+
146
167
  puts
147
168
  end
148
169
 
149
- exit(false)
170
+ exit(errors.blank?)
150
171
  end
151
172
 
152
173
  private
@@ -35,7 +35,7 @@ class ResponseDumper
35
35
  module_eval <<~RUBY, __FILE__, __LINE__ + 1
36
36
  def #{method}(...)
37
37
  result = super
38
- self.responses << response
38
+ self.responses << [response, Time.zone.now]
39
39
  result
40
40
  end
41
41
  RUBY
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails-response-dumper
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.1.0
4
+ version: 7.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pioneer Valley Books
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-05-25 00:00:00.000000000 Z
11
+ date: 2024-02-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -48,7 +48,7 @@ description: |
48
48
  Rails Response Dumper is a library and command line tool to dump HTTP
49
49
  responses from a Rails application to the file system. These responses can
50
50
  then be consumed by other tools for testing and verification purposes.
51
- email:
51
+ email:
52
52
  executables:
53
53
  - rails-response-dumper
54
54
  extensions: []
@@ -67,7 +67,7 @@ licenses:
67
67
  - MIT
68
68
  metadata:
69
69
  rubygems_mfa_required: 'true'
70
- post_install_message:
70
+ post_install_message:
71
71
  rdoc_options: []
72
72
  require_paths:
73
73
  - lib
@@ -82,8 +82,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
82
82
  - !ruby/object:Gem::Version
83
83
  version: '0'
84
84
  requirements: []
85
- rubygems_version: 3.4.10
86
- signing_key:
85
+ rubygems_version: 3.5.3
86
+ signing_key:
87
87
  specification_version: 4
88
88
  summary: Dump HTTP responses from a Rails application to the file system
89
89
  test_files: []