rails-response-dumper 6.2.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: 73dcaa40fd7df83e967942ad22721fc066a08f624b694363edfffbd191765bbc
4
- data.tar.gz: dc938ffbf89617b146af39061fcebe5a85d0d428f24947b1d652ded64e99fbcb
3
+ metadata.gz: b8c34317cf334351116255b3598e642eae81b92ff4495a0d4bbaa0c1fe93e6df
4
+ data.tar.gz: 9a4c62261212c2d78aa2fe9d4ccc8512712b78b3331c6e14566a395ac787162a
5
5
  SHA512:
6
- metadata.gz: c78f1ae041fc130039eee769bb00f1e936fc257458fc156ecbeca7b2ec4db8e2e7c25effbbd3c8476486f913be722087005b7ea6b959355041caefe9e4a482c7
7
- data.tar.gz: 6ba7ea3b302bea3a5d8bca08e0d1d2b62f065b73a238a7f21f4044dbcb1ce40ba2b92fcc1cc8fd06f8cb5e5fa2a503cd242d050227668927827c215d85b109ef
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
@@ -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
@@ -99,14 +103,12 @@ 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
 
@@ -115,6 +117,8 @@ module RailsResponseDumper
115
117
  dump[:timestamp] = timestamp.iso8601 unless options[:exclude_timestamp]
116
118
 
117
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')
118
122
  end
119
123
 
120
124
  RailsResponseDumper.print_color('.', :green)
@@ -134,21 +138,36 @@ module RailsResponseDumper
134
138
  end
135
139
 
136
140
  puts
137
- return if errors.blank?
138
141
 
139
- puts
140
- errors.each do |error|
141
- RailsResponseDumper.print_color(
142
- "#{error[:dumper_location]} #{error[:name]} received #{error[:exception]}\n",
143
- :red
144
- )
145
- error[:exception].full_message(highlight: RailsResponseDumper::COLORIZE).lines do |line|
146
- 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
147
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
+
148
167
  puts
149
168
  end
150
169
 
151
- exit(false)
170
+ exit(errors.blank?)
152
171
  end
153
172
 
154
173
  private
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.2.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-31 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.3.7
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: []