rails-response-dumper 4.0.0 → 5.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: 22c747acb9c14801e9dcb12be0d5dc1031932f8b5111620b8599903294116b1d
4
- data.tar.gz: 5c97ba8bc6bdab090c0b6e93f01fede4638fe3e16f3e52abe9b1c0020bee7c9d
3
+ metadata.gz: bfe1595c9662696463fa4e649f35a69a186c905a76938b25fea441626b83aa71
4
+ data.tar.gz: 77318d3db4e2be51449859b86b13b384b9215307a51e5d70b672c42fe887c4b8
5
5
  SHA512:
6
- metadata.gz: ae56654d82cd2dae48600ca54fcb4f07a9b2b2e02656f16db68326ed8c01b378b5b7ad2dc82202cdb6cb393d63037144068c12245fe80f02995448015bbd699f
7
- data.tar.gz: b2f9e80a7069deec3e36d182bf3c4ed2e45838a3909c5633951e7bb1a728425d72e9533c6d7befe12caca9e84da55326913c2317ea03493f4a18d3901aaa7a7b
6
+ metadata.gz: f8c59e64e7a1d88e6475f3b8705eed1e667cbf1297ac110c7cf706f590b67aecc9cd2e18ad214eed484a70fe6ee13fdfd906445e76d667ed44de4916f5a00948
7
+ data.tar.gz: 5e5bb5ea43bbecdc5eca986b087fdf87e36efd3208b679df4bfec35cc02a85b963a510dc142043b27c0167c7a348f071c9aab1357441291d1a2328ef03ea74eb
@@ -6,6 +6,7 @@ require_relative 'dump_block'
6
6
  module RailsResponseDumper
7
7
  class Defined
8
8
  attr_accessor :name, :klass
9
+ attr_reader :before_block, :after_block
9
10
 
10
11
  delegate :include, to: :klass
11
12
 
@@ -30,6 +31,14 @@ module RailsResponseDumper
30
31
  )
31
32
  end
32
33
 
34
+ def before(&block)
35
+ @before_block = block
36
+ end
37
+
38
+ def after(&block)
39
+ @after_block = block
40
+ end
41
+
33
42
  def blocks
34
43
  @blocks ||= []
35
44
  end
@@ -1,6 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'mime/types'
4
3
  require_relative 'defined'
5
4
 
6
5
  module RailsResponseDumper
@@ -12,15 +11,21 @@ module RailsResponseDumper
12
11
 
13
12
  Dir[Rails.root.join('dumpers/**/*.rb')].each { |f| require f }
14
13
 
14
+ errors = []
15
+
15
16
  RailsResponseDumper::Defined.dumpers.each do |defined|
16
17
  defined.blocks.each do |dump_block|
17
18
  defined.reset_models!
18
-
19
19
  dumper = defined.klass.new
20
20
  dumper.mock_setup
21
21
  begin
22
22
  rollback_after do
23
- dumper.instance_eval(&dump_block.block)
23
+ dumper.instance_eval(&defined.before_block) if defined.before_block
24
+ begin
25
+ dumper.instance_eval(&dump_block.block)
26
+ ensure
27
+ dumper.instance_eval(&defined.after_block) if defined.after_block
28
+ end
24
29
  end
25
30
  ensure
26
31
  dumper.mock_teardown
@@ -28,7 +33,6 @@ module RailsResponseDumper
28
33
 
29
34
  unless dumper.responses.count == dump_block.expected_status_codes.count
30
35
  raise <<~ERROR.squish
31
- #{defined.name}.#{dump_block.name} received
32
36
  #{dumper.responses.count} responses
33
37
  (expected #{dump_block.expected_status_codes.count})
34
38
  ERROR
@@ -41,22 +45,48 @@ module RailsResponseDumper
41
45
  dumper.responses.each_with_index do |response, index|
42
46
  unless response.status == dump_block.expected_status_codes[index]
43
47
  raise <<~ERROR.squish
44
- #{defined.name}.#{dump_block.name} has unexpected status
45
- code #{response.status} #{response.status_message}
48
+ unexpected status code #{response.status} #{response.status_message}
46
49
  (expected #{dump_block.expected_status_codes[index]})
47
50
  ERROR
48
51
  end
49
52
 
50
- if response.content_type
51
- mime = response.content_type.split(/ *; */).first
52
- extension = ".#{MIME::Types[mime].first.preferred_extension}"
53
- else
54
- extension = ''
55
- end
56
- File.write("#{dumper_dir}/#{index}#{extension}", response.body)
53
+ request = response.request
54
+ dump = {
55
+ request: {
56
+ method: request.method,
57
+ url: request.url
58
+ },
59
+ response: {
60
+ status: response.status,
61
+ headers: response.headers,
62
+ body: response.body
63
+ }
64
+ }
65
+ File.write("#{dumper_dir}/#{index}.json", JSON.pretty_generate(dump))
57
66
  end
67
+
68
+ print '.'
69
+ rescue StandardError => e
70
+ errors << {
71
+ dumper_location: dump_block.block.source_location.join(':'),
72
+ name: "#{defined.name}.#{dump_block.name}",
73
+ message: e.exception.message,
74
+ backtrace: e.cause&.backtrace || e.exception.backtrace
75
+ }
76
+
77
+ print 'F'
58
78
  end
59
79
  end
80
+
81
+ puts
82
+ return if errors.blank?
83
+
84
+ errors.each do |error|
85
+ $stderr.print "#{error[:dumper_location]} #{error[:name]} received #{error[:message]}\n"
86
+ $stderr.print "#{error[:backtrace][0]}\n\n"
87
+ end
88
+
89
+ exit(false)
60
90
  end
61
91
 
62
92
  private
metadata CHANGED
@@ -1,29 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails-response-dumper
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.0
4
+ version: 5.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: 2022-06-06 00:00:00.000000000 Z
11
+ date: 2022-12-05 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: mime-types
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: '3.0'
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: '3.0'
27
13
  - !ruby/object:Gem::Dependency
28
14
  name: rails
29
15
  requirement: !ruby/object:Gem::Requirement