rails-response-dumper 6.1.0 → 7.0.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: 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: []