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 +4 -4
- data/lib/rails_response_dumper/option_parser.rb +8 -0
- data/lib/rails_response_dumper/runner.rb +37 -16
- data/lib/response_dumper.rb +1 -1
- metadata +7 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b8c34317cf334351116255b3598e642eae81b92ff4495a0d4bbaa0c1fe93e6df
|
4
|
+
data.tar.gz: 9a4c62261212c2d78aa2fe9d4ccc8512712b78b3331c6e14566a395ac787162a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
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
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
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(
|
170
|
+
exit(errors.blank?)
|
150
171
|
end
|
151
172
|
|
152
173
|
private
|
data/lib/response_dumper.rb
CHANGED
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:
|
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:
|
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.
|
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: []
|