rails-response-dumper 1.0.0 → 2.1.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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/bin/rails-response-dumper +58 -21
  3. metadata +29 -9
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 128dc602db14db13c5fbfaf4b5baa317ff28bbb8907a698c6006b38eeb240e9d
4
- data.tar.gz: 740b654ff4838c1979c9e3498ef580a0ea7ea1c260933b717592e5896da66e3e
3
+ metadata.gz: 5d60e4df92e8fd8339624f1fa9244ace8b901368b64278579027bf9d824d4185
4
+ data.tar.gz: 796e5b8b849ea40a02657078a7d324c2846fabdc29c31bf36fee50a362d48395
5
5
  SHA512:
6
- metadata.gz: 9f43fe15f24e03916e29ee87b7c8958c2a1676fd5d10468118502e2768e944175823fbf22c060f6356420b181131d9a719ccf5bbee4c2767b4dc7c1fb4e49269
7
- data.tar.gz: 721bee79824fde20d7899ba96d7a60c83d7cb61a6f15a670977da9490a8fb0738be8f9fa2d58aafc952ac56a38ef01bb59be4772c277a96895708e0304cbcdcc
6
+ metadata.gz: 12ed413c69767aa0936b88f7e526c2ec419cdc435707390272a370c5f41c3dcbcaa845685c039b8dbe148110044d7aedb9e19916658aab59c2ffb365ec9024f5
7
+ data.tar.gz: 8afe7bd7ba82df75de81a97576bdebb967fc116c42ddd37c36965d9ad027ac03b998b95994d9483c2a383ba76d96986ab2dffb68ee28ea6b6a970aae460a9650
@@ -3,12 +3,14 @@
3
3
 
4
4
  require 'fileutils'
5
5
  require 'mime/types'
6
+ require 'rspec/mocks'
6
7
 
7
8
  ENV['RAILS_ENV'] ||= 'test'
8
9
  require "#{Dir.pwd}/config/environment"
9
10
 
10
11
  class ResponseDumper
11
12
  include ActionDispatch::Integration::Runner
13
+ include RSpec::Mocks::ExampleMethods
12
14
 
13
15
  attr_reader :expected_status_code
14
16
 
@@ -40,6 +42,36 @@ class ResponseDumper
40
42
  def expect_status_code!(status_code)
41
43
  @expected_status_code = Rack::Utils::SYMBOL_TO_STATUS_CODE[status_code]
42
44
  end
45
+
46
+ def responses
47
+ @responses ||= []
48
+ end
49
+
50
+ def mock_setup
51
+ RSpec::Mocks.setup
52
+ end
53
+
54
+ def mock_teardown
55
+ RSpec::Mocks.verify
56
+ ensure
57
+ RSpec::Mocks.teardown
58
+ end
59
+
60
+ [:get, :post, :patch, :put, :head, :delete].each do |method|
61
+ module_eval <<~RUBY, __FILE__, __LINE__ + 1
62
+ def #{method}(...)
63
+ result = super
64
+ self.responses << response
65
+ result
66
+ end
67
+ RUBY
68
+ end
69
+
70
+ # The list of methods is too long to be useful so shorten to just the class
71
+ # name.
72
+ def inspect
73
+ "#<#{self.class.name}>"
74
+ end
43
75
  end
44
76
 
45
77
  def run_dumps
@@ -50,34 +82,39 @@ def run_dumps
50
82
  Dir[Rails.root.join('dumpers/**/*.rb')].each { |f| require f }
51
83
 
52
84
  ResponseDumper.dumpers.each do |klass|
53
- klass_path = klass.name.underscore
54
- dumper_dir = "#{dumps_dir}/#{klass_path}"
55
- FileUtils.mkdir_p dumper_dir
56
-
57
- dumper = klass.new
58
- dumper.methods.each do |method|
85
+ klass.instance_methods.each do |method|
59
86
  next unless method.start_with?('dump_')
60
87
 
61
88
  klass.reset_models!
62
89
 
63
- ActiveRecord::Base.transaction do
64
- dumper.expect_status_code!(:ok)
65
- dumper.send(method)
66
- raise ActiveRecord::Rollback
90
+ dumper = klass.new
91
+ dumper.mock_setup
92
+ begin
93
+ ActiveRecord::Base.transaction do
94
+ dumper.expect_status_code!(:ok)
95
+ dumper.send(method)
96
+ raise ActiveRecord::Rollback
97
+ end
98
+ ensure
99
+ dumper.mock_teardown
67
100
  end
68
101
 
69
- response = dumper.response
70
-
71
- unless response.status == dumper.expected_status_code
72
- raise <<~ERROR.squish
73
- Dumped response has unexpected status code #{response.status} #{response.status_message}
74
- (expected #{dumper.expected_status_code})
75
- ERROR
102
+ klass_path = klass.name.underscore
103
+ dumper_dir = "#{dumps_dir}/#{klass_path}/#{method}"
104
+ FileUtils.mkdir_p dumper_dir
105
+
106
+ dumper.responses.each_with_index do |response, index|
107
+ unless response.status == dumper.expected_status_code
108
+ raise <<~ERROR.squish
109
+ Dumped response has unexpected status code #{response.status} #{response.status_message}
110
+ (expected #{dumper.expected_status_code})
111
+ ERROR
112
+ end
113
+
114
+ mime = response.content_type.split(/ *; */).first
115
+ extension = MIME::Types[mime].first.preferred_extension
116
+ File.write("#{dumper_dir}/#{index}.#{extension}", response.body)
76
117
  end
77
-
78
- mime = response.content_type.split(/ *; */).first
79
- extension = MIME::Types[mime].first.preferred_extension
80
- File.write("#{dumper_dir}/#{method}.#{extension}", response.body)
81
118
  end
82
119
  end
83
120
  end
metadata CHANGED
@@ -1,34 +1,54 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails-response-dumper
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 2.1.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: 2021-12-17 00:00:00.000000000 Z
11
+ date: 2022-03-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '6.1'
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '8'
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
- - - "~>"
27
+ - - ">="
25
28
  - !ruby/object:Gem::Version
26
29
  version: '6.1'
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '8'
33
+ - !ruby/object:Gem::Dependency
34
+ name: rspec-mocks
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ type: :runtime
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
27
47
  description: |
28
48
  Rails Response Dumper is a library and command line tool to dump HTTP
29
49
  responses from a Rails application to the file system. These responses can
30
50
  then be consumed by other tools for testing and verification purposes.
31
- email:
51
+ email:
32
52
  executables:
33
53
  - rails-response-dumper
34
54
  extensions: []
@@ -40,7 +60,7 @@ licenses:
40
60
  - MIT
41
61
  metadata:
42
62
  rubygems_mfa_required: 'true'
43
- post_install_message:
63
+ post_install_message:
44
64
  rdoc_options: []
45
65
  require_paths:
46
66
  - lib
@@ -55,8 +75,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
55
75
  - !ruby/object:Gem::Version
56
76
  version: '0'
57
77
  requirements: []
58
- rubygems_version: 3.2.22
59
- signing_key:
78
+ rubygems_version: 3.3.3
79
+ signing_key:
60
80
  specification_version: 4
61
81
  summary: Dump HTTP responses from a Rails application to the file system
62
82
  test_files: []