rails-response-dumper 5.2.0 → 6.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: 06cd448e735f58a98621946c8469f104ed6d732a12d7434e5e35a702b95f30f0
4
- data.tar.gz: e77dcfbeca89d6f0379a4e52e31fea8bd6229eb83546dabff2af014810c7be34
3
+ metadata.gz: 788b942da1a65cd0b19a82d33f23bba37cb4a260319f37f17c558f71d33e44b8
4
+ data.tar.gz: af367f3c8103532b4ab7f9ccfb9942b458a0b48c8a31d5cec3ce79c4a6515c5a
5
5
  SHA512:
6
- metadata.gz: fb2761d033cb2ddf080f79417139b6515e5586e41511e0c030dd346577f7df41bb80281cfc837683f9cdf2c5f24ac4c4fa30b818ce3d5e83dc9fae2ae057d350
7
- data.tar.gz: 3534eb64a93627900862d6bd9d58b878b865b7d384b42b56f140301840aa72134d120c66a84c6a7d355a5d831bc9471a3c99eabea086681a4bee49e176f3ffff
6
+ metadata.gz: 3558c86a4f92d736449a14b5a24074759c686eb98b0ef57386412d45a081c4a184470b2dec61f527e2cb5fa34e9163fb6a0cbc72e2b043b4f05c19d0b328de06
7
+ data.tar.gz: 5998a7c43305baa14faaa4e6591aa3cc1b6fea49c4f567ad3551694011d9c6592b2a35457915790f38a5bb245a78e61f44808a38d832dcb6378986856ef38db3
@@ -4,14 +4,42 @@ require 'optparse'
4
4
 
5
5
  module RailsResponseDumper
6
6
  def self.parse_options!
7
- options = {}
7
+ options = { 'dumps-dir' => Rails.root.join('dumps') }
8
8
 
9
9
  OptionParser.new do |opts|
10
+ opts.banner += ' [glob]'
11
+
12
+ opts.separator ''
13
+ opts.separator 'Filtering:'
14
+ opts.separator 'Run for specific files or globs:'
15
+ opts.separator ' rails-response-dumper path/to/a_dumper.rb'
16
+
17
+ opts.separator ''
18
+ opts.separator 'Options:'
19
+
20
+ opts.on('--dumps-dir PATH', 'Output dumps to this directory.') do |v|
21
+ options['dumps-dir'] = v
22
+ end
23
+
10
24
  opts.on('--fail-fast', 'Abort the run after first failure.') do |v|
11
25
  options[:fail_fast] = v
12
26
  end
27
+
28
+ opts.on('--verbose', 'Output dumper and dump block names.') do |v|
29
+ options[:verbose] = v
30
+ end
31
+
32
+ opts.on('--order TYPE', 'Run dumps by the specified order type.') do |v|
33
+ options[:order] = v
34
+ end
35
+
36
+ opts.on('--exclude-response-headers', 'Do not output response headers.') do |v|
37
+ options[:exclude_response_headers] = v
38
+ end
13
39
  end.parse!
14
40
 
41
+ options[:filenames] = ARGV
42
+
15
43
  options.freeze
16
44
  end
17
45
  end
@@ -12,16 +12,53 @@ module RailsResponseDumper
12
12
  end
13
13
 
14
14
  def run_dumps
15
- dumps_dir = Rails.root.join('dumps')
16
- FileUtils.rm_rf dumps_dir
15
+ dumps_dir = options['dumps-dir']
16
+
17
+ if options[:filenames].present?
18
+ globs = options[:filenames]
19
+ else
20
+ globs = ['dumpers/**/*.rb']
21
+ FileUtils.rm_rf dumps_dir
22
+ end
23
+
17
24
  FileUtils.mkdir_p dumps_dir
18
25
 
19
- Dir[Rails.root.join('dumpers/**/*.rb')].each { |f| require f }
26
+ globs.each do |glob|
27
+ Dir[Rails.root.join(glob)].each { |f| require f }
28
+ end
20
29
 
21
30
  errors = []
22
31
 
23
- RailsResponseDumper::Defined.dumpers.each do |defined|
24
- defined.blocks.each do |dump_block|
32
+ dumper_blocks = RailsResponseDumper::Defined.dumpers.flat_map do |defined|
33
+ if options[:filenames].present?
34
+ # clear previous dumps for that file in case removed from updated dump file
35
+ FileUtils.rm_rf "#{dumps_dir}/#{defined.name.underscore}/"
36
+ end
37
+
38
+ defined.blocks.map do |dump_block|
39
+ [defined, dump_block]
40
+ end
41
+ end
42
+
43
+ if options[:order].present?
44
+ seed = if options[:order] == 'random'
45
+ Random.new_seed
46
+ else
47
+ Integer(options[:order])
48
+ end
49
+
50
+ puts "Randomized with seed #{seed}"
51
+
52
+ random = Random.new(seed)
53
+ dumper_blocks.shuffle!(random: random)
54
+ end
55
+
56
+ catch :fail_fast do
57
+ dumper_blocks.each do |(defined, dump_block)|
58
+ name = "#{defined.name}.#{dump_block.name}"
59
+
60
+ print "#{name} " if options[:verbose]
61
+
25
62
  defined.reset_models!
26
63
  dumper = defined.klass.new
27
64
  dumper.mock_setup
@@ -58,6 +95,7 @@ module RailsResponseDumper
58
95
  end
59
96
 
60
97
  request = response.request
98
+
61
99
  dump = {
62
100
  request: {
63
101
  method: request.method,
@@ -66,25 +104,30 @@ module RailsResponseDumper
66
104
  },
67
105
  response: {
68
106
  status: response.status,
69
- status_text: response.status_message,
107
+ statusText: response.status_message,
70
108
  headers: response.headers,
71
109
  body: response.body
72
110
  }
73
111
  }
112
+
113
+ dump[:response].delete(:headers) if options[:exclude_response_headers]
114
+
74
115
  File.write("#{dumper_dir}/#{index}.json", JSON.pretty_generate(dump))
75
116
  end
76
117
 
77
118
  RailsResponseDumper.print_color('.', :green)
119
+ print("\n") if options[:verbose]
78
120
  rescue StandardError => e
79
121
  errors << {
80
122
  dumper_location: dump_block.block.source_location.join(':'),
81
- name: "#{defined.name}.#{dump_block.name}",
123
+ name: name,
82
124
  exception: e
83
125
  }
84
126
 
85
127
  RailsResponseDumper.print_color('F', :red)
128
+ print("\n") if options[:verbose]
86
129
 
87
- break if options[:fail_fast]
130
+ throw :fail_fast if options[:fail_fast]
88
131
  end
89
132
  end
90
133
 
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: 5.2.0
4
+ version: 6.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pioneer Valley Books
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-01-24 00:00:00.000000000 Z
11
+ date: 2023-04-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails