rails-response-dumper 1.0.0 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
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: []