rails-response-dumper 1.0.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 +7 -0
  2. data/bin/rails-response-dumper +88 -0
  3. metadata +62 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 128dc602db14db13c5fbfaf4b5baa317ff28bbb8907a698c6006b38eeb240e9d
4
+ data.tar.gz: 740b654ff4838c1979c9e3498ef580a0ea7ea1c260933b717592e5896da66e3e
5
+ SHA512:
6
+ metadata.gz: 9f43fe15f24e03916e29ee87b7c8958c2a1676fd5d10468118502e2768e944175823fbf22c060f6356420b181131d9a719ccf5bbee4c2767b4dc7c1fb4e49269
7
+ data.tar.gz: 721bee79824fde20d7899ba96d7a60c83d7cb61a6f15a670977da9490a8fb0738be8f9fa2d58aafc952ac56a38ef01bb59be4772c277a96895708e0304cbcdcc
@@ -0,0 +1,88 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'fileutils'
5
+ require 'mime/types'
6
+
7
+ ENV['RAILS_ENV'] ||= 'test'
8
+ require "#{Dir.pwd}/config/environment"
9
+
10
+ class ResponseDumper
11
+ include ActionDispatch::Integration::Runner
12
+
13
+ attr_reader :expected_status_code
14
+
15
+ def self.inherited(subclass)
16
+ super
17
+ dumpers << subclass
18
+ end
19
+
20
+ def self.dumpers
21
+ @dumpers ||= []
22
+ end
23
+
24
+ def self.reset_models(*models)
25
+ @reset_models ||= []
26
+ @reset_models += models
27
+ end
28
+
29
+ def self.reset_models!
30
+ reset_models.each do |model|
31
+ model.connection.exec_query "TRUNCATE #{model.quoted_table_name} RESTART IDENTITY CASCADE"
32
+ end
33
+ end
34
+
35
+ # Delegates to `Rails.application`.
36
+ def app
37
+ Rails.application
38
+ end
39
+
40
+ def expect_status_code!(status_code)
41
+ @expected_status_code = Rack::Utils::SYMBOL_TO_STATUS_CODE[status_code]
42
+ end
43
+ end
44
+
45
+ def run_dumps
46
+ dumps_dir = Rails.root.join('dumps')
47
+ FileUtils.rm_rf dumps_dir
48
+ FileUtils.mkdir_p dumps_dir
49
+
50
+ Dir[Rails.root.join('dumpers/**/*.rb')].each { |f| require f }
51
+
52
+ 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|
59
+ next unless method.start_with?('dump_')
60
+
61
+ klass.reset_models!
62
+
63
+ ActiveRecord::Base.transaction do
64
+ dumper.expect_status_code!(:ok)
65
+ dumper.send(method)
66
+ raise ActiveRecord::Rollback
67
+ end
68
+
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
76
+ 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
+ end
82
+ end
83
+ end
84
+
85
+ # Prevent database truncation if the environment is production.
86
+ abort 'The Rails environment is running in production mode!' if Rails.env.production?
87
+ ActiveRecord::Migration.maintain_test_schema!
88
+ run_dumps
metadata ADDED
@@ -0,0 +1,62 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rails-response-dumper
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Pioneer Valley Books
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2021-12-17 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '6.1'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '6.1'
27
+ description: |
28
+ Rails Response Dumper is a library and command line tool to dump HTTP
29
+ responses from a Rails application to the file system. These responses can
30
+ then be consumed by other tools for testing and verification purposes.
31
+ email:
32
+ executables:
33
+ - rails-response-dumper
34
+ extensions: []
35
+ extra_rdoc_files: []
36
+ files:
37
+ - bin/rails-response-dumper
38
+ homepage: https://github.com/Pioneer-Valley-Books/rails-response-dumper
39
+ licenses:
40
+ - MIT
41
+ metadata:
42
+ rubygems_mfa_required: 'true'
43
+ post_install_message:
44
+ rdoc_options: []
45
+ require_paths:
46
+ - lib
47
+ required_ruby_version: !ruby/object:Gem::Requirement
48
+ requirements:
49
+ - - ">="
50
+ - !ruby/object:Gem::Version
51
+ version: '3.0'
52
+ required_rubygems_version: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: '0'
57
+ requirements: []
58
+ rubygems_version: 3.2.22
59
+ signing_key:
60
+ specification_version: 4
61
+ summary: Dump HTTP responses from a Rails application to the file system
62
+ test_files: []