You need to sign in or sign up before continuing.

historiographer 4.4.3 → 4.4.4

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 (38) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +14 -0
  3. data/VERSION +1 -1
  4. data/historiographer.gemspec +26 -13
  5. data/lib/historiographer.rb +5 -0
  6. data/spec/db/migrate/20250827000000_create_templates.rb +9 -0
  7. data/spec/db/migrate/20250827000001_create_template_histories.rb +9 -0
  8. data/spec/db/migrate/20250827000002_create_websites.rb +9 -0
  9. data/spec/db/migrate/20250827000003_create_website_histories.rb +9 -0
  10. data/spec/db/migrate/20250827000004_create_template_files.rb +15 -0
  11. data/spec/db/migrate/20250827000005_create_template_file_histories.rb +9 -0
  12. data/spec/db/migrate/20250827000006_create_website_files.rb +15 -0
  13. data/spec/db/migrate/20250827000007_create_website_file_histories.rb +9 -0
  14. data/spec/db/migrate/20250827000008_create_code_files_view.rb +62 -0
  15. data/spec/db/schema.rb +126 -1
  16. data/spec/examples.txt +71 -0
  17. data/spec/internal/log/development.log +0 -0
  18. data/spec/internal/log/test.log +1479 -0
  19. data/spec/models/code_file.rb +16 -0
  20. data/spec/models/template.rb +6 -0
  21. data/spec/models/template_file.rb +5 -0
  22. data/spec/models/template_file_history.rb +3 -0
  23. data/spec/models/template_history.rb +3 -0
  24. data/spec/models/website.rb +7 -0
  25. data/spec/models/website_file.rb +5 -0
  26. data/spec/models/website_file_history.rb +3 -0
  27. data/spec/models/website_history.rb +3 -0
  28. data/spec/view_backed_model_spec.rb +166 -0
  29. metadata +24 -11
  30. data/.document +0 -5
  31. data/.rspec +0 -1
  32. data/.ruby-version +0 -1
  33. data/.standalone_migrations +0 -6
  34. data/Gemfile.lock +0 -355
  35. data/historiographer-4.1.12.gem +0 -0
  36. data/historiographer-4.1.13.gem +0 -0
  37. data/historiographer-4.1.14.gem +0 -0
  38. data/historiographer-4.3.0.gem +0 -0
@@ -0,0 +1,16 @@
1
+ class CodeFile < ApplicationRecord
2
+ # This is a read-only model backed by a database view
3
+ # The view merges template_files and website_files
4
+
5
+ self.table_name = 'code_files'
6
+ self.primary_key = nil # View doesn't have a primary key
7
+
8
+ belongs_to :website
9
+
10
+ # Default ordering since the view has no primary key
11
+ default_scope { order(created_at: :desc, path: :asc) }
12
+
13
+ def readonly?
14
+ true
15
+ end
16
+ end
@@ -0,0 +1,6 @@
1
+ class Template < ApplicationRecord
2
+ include Historiographer
3
+
4
+ has_many :template_files, dependent: :destroy
5
+ has_many :websites
6
+ end
@@ -0,0 +1,5 @@
1
+ class TemplateFile < ApplicationRecord
2
+ include Historiographer
3
+
4
+ belongs_to :template
5
+ end
@@ -0,0 +1,3 @@
1
+ class TemplateFileHistory < ApplicationRecord
2
+ include Historiographer::History
3
+ end
@@ -0,0 +1,3 @@
1
+ class TemplateHistory < ApplicationRecord
2
+ include Historiographer::History
3
+ end
@@ -0,0 +1,7 @@
1
+ class Website < ApplicationRecord
2
+ include Historiographer
3
+
4
+ belongs_to :template, optional: true
5
+ has_many :website_files, dependent: :destroy
6
+ has_many :code_files
7
+ end
@@ -0,0 +1,5 @@
1
+ class WebsiteFile < ApplicationRecord
2
+ include Historiographer
3
+
4
+ belongs_to :website
5
+ end
@@ -0,0 +1,3 @@
1
+ class WebsiteFileHistory < ApplicationRecord
2
+ include Historiographer::History
3
+ end
@@ -0,0 +1,3 @@
1
+ class WebsiteHistory < ApplicationRecord
2
+ include Historiographer::History
3
+ end
@@ -0,0 +1,166 @@
1
+ require 'spec_helper'
2
+
3
+ # Load model classes
4
+ require_relative 'models/template'
5
+ require_relative 'models/template_history'
6
+ require_relative 'models/website'
7
+ require_relative 'models/website_history'
8
+ require_relative 'models/template_file'
9
+ require_relative 'models/template_file_history'
10
+ require_relative 'models/website_file'
11
+ require_relative 'models/website_file_history'
12
+ require_relative 'models/code_file'
13
+
14
+ describe 'View-backed model snapshotting' do
15
+ describe 'Website with code_files association (view-backed)' do
16
+ let(:template) {
17
+ Template.create!(
18
+ name: 'Base Template',
19
+ description: 'A base template',
20
+ history_user_id: 1
21
+ )
22
+ }
23
+ let(:website) {
24
+ Website.create!(
25
+ domain: 'example.com',
26
+ template: template,
27
+ history_user_id: 1
28
+ )
29
+ }
30
+
31
+ before do
32
+ # Create template files
33
+ @template_file1 = TemplateFile.create!(
34
+ template: template,
35
+ path: 'index.html',
36
+ content: '<h1>Template Index</h1>',
37
+ shasum: 'abc123',
38
+ history_user_id: 1
39
+ )
40
+
41
+ @template_file2 = TemplateFile.create!(
42
+ template: template,
43
+ path: 'about.html',
44
+ content: '<h1>Template About</h1>',
45
+ shasum: 'def456',
46
+ history_user_id: 1
47
+ )
48
+
49
+ # Create website file that overrides one template file
50
+ @website_file = WebsiteFile.create!(
51
+ website: website,
52
+ path: 'index.html',
53
+ content: '<h1>Custom Index</h1>',
54
+ shasum: 'ghi789',
55
+ history_user_id: 1
56
+ )
57
+ end
58
+
59
+ it 'has code_files that are backed by a view' do
60
+ # Verify that code_files exist
61
+ expect(website.code_files.count).to eq(2)
62
+
63
+ # Verify that CodeFile has no primary key
64
+ expect(CodeFile.primary_key).to be_nil
65
+
66
+ # Verify that CodeFile instances are read-only
67
+ code_file = website.code_files.first
68
+ expect(code_file.readonly?).to be true
69
+ end
70
+
71
+ it 'returns correct merged data from the view' do
72
+ code_files = website.code_files.order(:path)
73
+
74
+ # Should have about.html from template and index.html from website override
75
+ expect(code_files.map(&:path)).to match_array(['about.html', 'index.html'])
76
+
77
+ index_file = code_files.find { |cf| cf.path == 'index.html' }
78
+ about_file = code_files.find { |cf| cf.path == 'about.html' }
79
+
80
+ # index.html should come from website_files (override)
81
+ expect(index_file.content).to eq('<h1>Custom Index</h1>')
82
+ expect(index_file.source_type).to eq('WebsiteFile')
83
+ expect(index_file.source_id).to eq(@website_file.id)
84
+
85
+ # about.html should come from template_files
86
+ expect(about_file.content).to eq('<h1>Template About</h1>')
87
+ expect(about_file.source_type).to eq('TemplateFile')
88
+ expect(about_file.source_id).to eq(@template_file2.id)
89
+ end
90
+
91
+ context 'when snapshotting a model with view-backed associations' do
92
+ it 'creates snapshot for the main model but handles view-backed associations gracefully' do
93
+ # Create a snapshot of the website
94
+ expect { website.snapshot }.not_to raise_error
95
+
96
+ # Verify that website history was created
97
+ expect(WebsiteHistory.where(website_id: website.id)).not_to be_empty
98
+ website_snapshot = WebsiteHistory.where(website_id: website.id).last
99
+ expect(website_snapshot.snapshot_id).not_to be_nil
100
+
101
+ # Verify that associated models with primary keys have histories
102
+ expect(TemplateHistory.where(template_id: template.id)).not_to be_empty
103
+ expect(WebsiteFileHistory.where(website_file_id: @website_file.id)).not_to be_empty
104
+ expect(TemplateFileHistory.where(template_file_id: @template_file1.id)).not_to be_empty
105
+ end
106
+
107
+ it 'does not attempt to create history for view-backed models' do
108
+ # Snapshot should succeed without trying to snapshot code_files
109
+ expect { website.snapshot }.not_to raise_error
110
+
111
+ # Verify snapshot was created
112
+ snapshot = WebsiteHistory.where(website_id: website.id).where.not(snapshot_id: nil).last
113
+ expect(snapshot).not_to be_nil
114
+
115
+ # There should be no CodeFileHistory table/model
116
+ expect { CodeFileHistory }.to raise_error(NameError)
117
+ end
118
+
119
+ it 'correctly identifies models without primary keys' do
120
+ # CodeFile should not have a primary key
121
+ expect(CodeFile.primary_key).to be_nil
122
+
123
+ # Regular models should have primary keys
124
+ expect(Website.primary_key).to eq('id')
125
+ expect(WebsiteFile.primary_key).to eq('id')
126
+ expect(TemplateFile.primary_key).to eq('id')
127
+ end
128
+
129
+ it 'allows snapshot to complete even with view associations present' do
130
+ # Add more associations to make the test more complex
131
+ website2 = Website.create!(domain: 'example2.com', template: template, history_user_id: 1)
132
+ WebsiteFile.create!(
133
+ website: website2,
134
+ path: 'custom.html',
135
+ content: '<h1>Custom Page</h1>',
136
+ shasum: 'xyz999',
137
+ history_user_id: 1
138
+ )
139
+
140
+ # Both websites should snapshot successfully
141
+ expect { website.snapshot }.not_to raise_error
142
+ expect { website2.snapshot }.not_to raise_error
143
+
144
+ # Verify both have history records
145
+ expect(WebsiteHistory.where(website_id: website.id)).not_to be_empty
146
+ expect(WebsiteHistory.where(website_id: website2.id)).not_to be_empty
147
+ end
148
+ end
149
+ end
150
+
151
+ describe 'Error handling for view-backed models' do
152
+ it 'should log a warning when attempting to snapshot a model without a primary key' do
153
+ # We'll need to patch the snapshot method to detect and skip models without primary keys
154
+ # This test verifies the expected behavior once the fix is implemented
155
+
156
+ website = Website.create!(domain: 'test.com', history_user_id: 1)
157
+
158
+ # Expect snapshot to complete successfully
159
+ expect { website.snapshot }.not_to raise_error
160
+
161
+ # The view-backed association should not have created any history
162
+ # (since there's no history table for views)
163
+ expect(WebsiteHistory.where(website_id: website.id).count).to eq(1)
164
+ end
165
+ end
166
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: historiographer
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.4.3
4
+ version: 4.4.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - brettshollenberger
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-08-22 00:00:00.000000000 Z
11
+ date: 2025-09-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -219,13 +219,8 @@ extra_rdoc_files:
219
219
  - LICENSE.txt
220
220
  - README.md
221
221
  files:
222
- - ".document"
223
- - ".rspec"
224
- - ".ruby-version"
225
- - ".standalone_migrations"
226
222
  - DEVELOPMENT.md
227
223
  - Gemfile
228
- - Gemfile.lock
229
224
  - Guardfile
230
225
  - LICENSE.txt
231
226
  - README.md
@@ -236,10 +231,6 @@ files:
236
231
  - bin/test
237
232
  - bin/test-all
238
233
  - bin/test-rails
239
- - historiographer-4.1.12.gem
240
- - historiographer-4.1.13.gem
241
- - historiographer-4.1.14.gem
242
- - historiographer-4.3.0.gem
243
234
  - historiographer.gemspec
244
235
  - init.rb
245
236
  - instructions/implementation.md
@@ -282,7 +273,17 @@ files:
282
273
  - spec/db/migrate/20250826000001_create_test_user_histories.rb
283
274
  - spec/db/migrate/20250826000002_create_test_websites.rb
284
275
  - spec/db/migrate/20250826000003_create_test_website_histories.rb
276
+ - spec/db/migrate/20250827000000_create_templates.rb
277
+ - spec/db/migrate/20250827000001_create_template_histories.rb
278
+ - spec/db/migrate/20250827000002_create_websites.rb
279
+ - spec/db/migrate/20250827000003_create_website_histories.rb
280
+ - spec/db/migrate/20250827000004_create_template_files.rb
281
+ - spec/db/migrate/20250827000005_create_template_file_histories.rb
282
+ - spec/db/migrate/20250827000006_create_website_files.rb
283
+ - spec/db/migrate/20250827000007_create_website_file_histories.rb
284
+ - spec/db/migrate/20250827000008_create_code_files_view.rb
285
285
  - spec/db/schema.rb
286
+ - spec/examples.txt
286
287
  - spec/factories/post.rb
287
288
  - spec/historiographer_spec.rb
288
289
  - spec/integration/historiographer_safe_integration_spec.rb
@@ -294,10 +295,13 @@ files:
294
295
  - spec/internal/config/database.yml
295
296
  - spec/internal/config/routes.rb
296
297
  - spec/internal/db/schema.rb
298
+ - spec/internal/log/development.log
299
+ - spec/internal/log/test.log
297
300
  - spec/models/application_record.rb
298
301
  - spec/models/author.rb
299
302
  - spec/models/author_history.rb
300
303
  - spec/models/byline.rb
304
+ - spec/models/code_file.rb
301
305
  - spec/models/comment.rb
302
306
  - spec/models/comment_history.rb
303
307
  - spec/models/easy_ml/column.rb
@@ -312,6 +316,10 @@ files:
312
316
  - spec/models/safe_post_history.rb
313
317
  - spec/models/silent_post.rb
314
318
  - spec/models/silent_post_history.rb
319
+ - spec/models/template.rb
320
+ - spec/models/template_file.rb
321
+ - spec/models/template_file_history.rb
322
+ - spec/models/template_history.rb
315
323
  - spec/models/test_article.rb
316
324
  - spec/models/test_article_history.rb
317
325
  - spec/models/test_category.rb
@@ -324,8 +332,13 @@ files:
324
332
  - spec/models/thing_with_compound_index_history.rb
325
333
  - spec/models/thing_without_history.rb
326
334
  - spec/models/user.rb
335
+ - spec/models/website.rb
336
+ - spec/models/website_file.rb
337
+ - spec/models/website_file_history.rb
338
+ - spec/models/website_history.rb
327
339
  - spec/rails_integration/historiographer_rails_integration_spec.rb
328
340
  - spec/spec_helper.rb
341
+ - spec/view_backed_model_spec.rb
329
342
  homepage: http://github.com/brettshollenberger/historiographer
330
343
  licenses:
331
344
  - MIT
data/.document DELETED
@@ -1,5 +0,0 @@
1
- lib/**/*.rb
2
- bin/*
3
- -
4
- features/**/*.feature
5
- LICENSE.txt
data/.rspec DELETED
@@ -1 +0,0 @@
1
- --color
data/.ruby-version DELETED
@@ -1 +0,0 @@
1
- 3.0.2
@@ -1,6 +0,0 @@
1
- db:
2
- seeds: spec/db/seeds.rb
3
- migrate: spec/db/migrate
4
- schema: spec/db/schema.rb
5
- config:
6
- database: spec/db/database.yml
data/Gemfile.lock DELETED
@@ -1,355 +0,0 @@
1
- GIT
2
- remote: https://github.com/technicalpickles/jeweler
3
- revision: 2ab86309fc2494ba2a4e9c86c514742cd4f681c2
4
- branch: master
5
- specs:
6
- jeweler (2.3.9)
7
- builder
8
- bundler
9
- git (>= 1.2.5)
10
- github_api (~> 0.16.0)
11
- highline (>= 1.6.15)
12
- nokogiri (>= 1.5.10)
13
- psych
14
- rake
15
- rdoc
16
- semver2
17
-
18
- GEM
19
- remote: https://rubygems.org/
20
- specs:
21
- actioncable (7.1.5)
22
- actionpack (= 7.1.5)
23
- activesupport (= 7.1.5)
24
- nio4r (~> 2.0)
25
- websocket-driver (>= 0.6.1)
26
- zeitwerk (~> 2.6)
27
- actionmailbox (7.1.5)
28
- actionpack (= 7.1.5)
29
- activejob (= 7.1.5)
30
- activerecord (= 7.1.5)
31
- activestorage (= 7.1.5)
32
- activesupport (= 7.1.5)
33
- mail (>= 2.7.1)
34
- net-imap
35
- net-pop
36
- net-smtp
37
- actionmailer (7.1.5)
38
- actionpack (= 7.1.5)
39
- actionview (= 7.1.5)
40
- activejob (= 7.1.5)
41
- activesupport (= 7.1.5)
42
- mail (~> 2.5, >= 2.5.4)
43
- net-imap
44
- net-pop
45
- net-smtp
46
- rails-dom-testing (~> 2.2)
47
- actionpack (7.1.5)
48
- actionview (= 7.1.5)
49
- activesupport (= 7.1.5)
50
- nokogiri (>= 1.8.5)
51
- racc
52
- rack (>= 2.2.4)
53
- rack-session (>= 1.0.1)
54
- rack-test (>= 0.6.3)
55
- rails-dom-testing (~> 2.2)
56
- rails-html-sanitizer (~> 1.6)
57
- actiontext (7.1.5)
58
- actionpack (= 7.1.5)
59
- activerecord (= 7.1.5)
60
- activestorage (= 7.1.5)
61
- activesupport (= 7.1.5)
62
- globalid (>= 0.6.0)
63
- nokogiri (>= 1.8.5)
64
- actionview (7.1.5)
65
- activesupport (= 7.1.5)
66
- builder (~> 3.1)
67
- erubi (~> 1.11)
68
- rails-dom-testing (~> 2.2)
69
- rails-html-sanitizer (~> 1.6)
70
- activejob (7.1.5)
71
- activesupport (= 7.1.5)
72
- globalid (>= 0.3.6)
73
- activemodel (7.1.5)
74
- activesupport (= 7.1.5)
75
- activerecord (7.1.5)
76
- activemodel (= 7.1.5)
77
- activesupport (= 7.1.5)
78
- timeout (>= 0.4.0)
79
- activerecord-import (1.8.1)
80
- activerecord (>= 4.2)
81
- activestorage (7.1.5)
82
- actionpack (= 7.1.5)
83
- activejob (= 7.1.5)
84
- activerecord (= 7.1.5)
85
- activesupport (= 7.1.5)
86
- marcel (~> 1.0)
87
- activesupport (7.1.5)
88
- base64
89
- benchmark (>= 0.3)
90
- bigdecimal
91
- concurrent-ruby (~> 1.0, >= 1.0.2)
92
- connection_pool (>= 2.2.5)
93
- drb
94
- i18n (>= 1.6, < 2)
95
- logger (>= 1.4.2)
96
- minitest (>= 5.1)
97
- mutex_m
98
- securerandom (>= 0.3)
99
- tzinfo (~> 2.0)
100
- addressable (2.4.0)
101
- base64 (0.2.0)
102
- benchmark (0.4.0)
103
- bigdecimal (3.1.8)
104
- builder (3.3.0)
105
- coderay (1.1.3)
106
- combustion (1.5.0)
107
- activesupport (>= 3.0.0)
108
- railties (>= 3.0.0)
109
- thor (>= 0.14.6)
110
- concurrent-ruby (1.3.4)
111
- connection_pool (2.4.1)
112
- crass (1.0.6)
113
- database_cleaner (2.1.0)
114
- database_cleaner-active_record (>= 2, < 3)
115
- database_cleaner-active_record (2.2.0)
116
- activerecord (>= 5.a)
117
- database_cleaner-core (~> 2.0.0)
118
- database_cleaner-core (2.0.1)
119
- date (3.4.0)
120
- descendants_tracker (0.0.4)
121
- thread_safe (~> 0.3, >= 0.3.1)
122
- diff-lcs (1.5.1)
123
- docile (1.4.1)
124
- drb (2.2.1)
125
- erubi (1.13.0)
126
- factory_bot (6.5.0)
127
- activesupport (>= 5.0.0)
128
- factory_bot_rails (6.4.4)
129
- factory_bot (~> 6.5)
130
- railties (>= 5.0.0)
131
- faraday (0.9.2)
132
- multipart-post (>= 1.2, < 3)
133
- ffi (1.17.0-arm64-darwin)
134
- ffi (1.17.0-x86_64-darwin)
135
- formatador (1.1.0)
136
- git (1.11.0)
137
- rchardet (~> 1.8)
138
- github_api (0.16.0)
139
- addressable (~> 2.4.0)
140
- descendants_tracker (~> 0.0.4)
141
- faraday (~> 0.8, < 0.10)
142
- hashie (>= 3.4)
143
- mime-types (>= 1.16, < 3.0)
144
- oauth2 (~> 1.0)
145
- globalid (1.2.1)
146
- activesupport (>= 6.1)
147
- guard (2.19.0)
148
- formatador (>= 0.2.4)
149
- listen (>= 2.7, < 4.0)
150
- lumberjack (>= 1.0.12, < 2.0)
151
- nenv (~> 0.1)
152
- notiffany (~> 0.0)
153
- pry (>= 0.13.0)
154
- shellany (~> 0.0)
155
- thor (>= 0.18.1)
156
- guard-compat (1.2.1)
157
- guard-rspec (4.7.3)
158
- guard (~> 2.1)
159
- guard-compat (~> 1.1)
160
- rspec (>= 2.99.0, < 4.0)
161
- hashie (5.0.0)
162
- highline (3.1.1)
163
- reline
164
- i18n (1.14.6)
165
- concurrent-ruby (~> 1.0)
166
- io-console (0.7.2)
167
- irb (1.12.0)
168
- rdoc
169
- reline (>= 0.4.2)
170
- json (1.8.6)
171
- jwt (2.9.3)
172
- base64
173
- listen (3.9.0)
174
- rb-fsevent (~> 0.10, >= 0.10.3)
175
- rb-inotify (~> 0.9, >= 0.9.10)
176
- logger (1.6.1)
177
- loofah (2.23.1)
178
- crass (~> 1.0.2)
179
- nokogiri (>= 1.12.0)
180
- lumberjack (1.2.10)
181
- mail (2.8.1)
182
- mini_mime (>= 0.1.1)
183
- net-imap
184
- net-pop
185
- net-smtp
186
- marcel (1.0.4)
187
- method_source (1.1.0)
188
- mime-types (2.99.3)
189
- mini_mime (1.1.5)
190
- minitest (5.25.1)
191
- multi_json (1.15.0)
192
- multi_xml (0.6.0)
193
- multipart-post (2.4.1)
194
- mutex_m (0.2.0)
195
- mysql2 (0.5.0)
196
- nenv (0.3.0)
197
- net-imap (0.4.18)
198
- date
199
- net-protocol
200
- net-pop (0.1.2)
201
- net-protocol
202
- net-protocol (0.2.2)
203
- timeout
204
- net-smtp (0.5.0)
205
- net-protocol
206
- nio4r (2.7.4)
207
- nokogiri (1.16.7-arm64-darwin)
208
- racc (~> 1.4)
209
- nokogiri (1.16.7-x86_64-darwin)
210
- racc (~> 1.4)
211
- notiffany (0.1.3)
212
- nenv (~> 0.1)
213
- shellany (~> 0.0)
214
- oauth2 (1.4.8)
215
- faraday (>= 0.8, < 3.0)
216
- jwt (>= 1.0, < 3.0)
217
- multi_json (~> 1.3)
218
- multi_xml (~> 0.5)
219
- rack (>= 1.2, < 3)
220
- paranoia (3.0.0)
221
- activerecord (>= 6, < 8.1)
222
- pg (1.5.9)
223
- pry (0.14.2)
224
- coderay (~> 1.1)
225
- method_source (~> 1.0)
226
- psych (5.2.0)
227
- stringio
228
- racc (1.8.1)
229
- rack (2.2.10)
230
- rack-session (1.0.2)
231
- rack (< 3)
232
- rack-test (2.1.0)
233
- rack (>= 1.3)
234
- rackup (1.0.1)
235
- rack (< 3)
236
- webrick
237
- rails (7.1.5)
238
- actioncable (= 7.1.5)
239
- actionmailbox (= 7.1.5)
240
- actionmailer (= 7.1.5)
241
- actionpack (= 7.1.5)
242
- actiontext (= 7.1.5)
243
- actionview (= 7.1.5)
244
- activejob (= 7.1.5)
245
- activemodel (= 7.1.5)
246
- activerecord (= 7.1.5)
247
- activestorage (= 7.1.5)
248
- activesupport (= 7.1.5)
249
- bundler (>= 1.15.0)
250
- railties (= 7.1.5)
251
- rails-dom-testing (2.2.0)
252
- activesupport (>= 5.0.0)
253
- minitest
254
- nokogiri (>= 1.6)
255
- rails-html-sanitizer (1.6.0)
256
- loofah (~> 2.21)
257
- nokogiri (~> 1.14)
258
- railties (7.1.5)
259
- actionpack (= 7.1.5)
260
- activesupport (= 7.1.5)
261
- irb
262
- rackup (>= 1.0.0)
263
- rake (>= 12.2)
264
- thor (~> 1.0, >= 1.2.2)
265
- zeitwerk (~> 2.6)
266
- rake (13.2.1)
267
- rb-fsevent (0.11.2)
268
- rb-inotify (0.11.1)
269
- ffi (~> 1.0)
270
- rchardet (1.8.0)
271
- rdoc (3.12.2)
272
- json (~> 1.4)
273
- reline (0.5.11)
274
- io-console (~> 0.5)
275
- rollbar (3.6.0)
276
- rspec (3.13.0)
277
- rspec-core (~> 3.13.0)
278
- rspec-expectations (~> 3.13.0)
279
- rspec-mocks (~> 3.13.0)
280
- rspec-core (3.13.2)
281
- rspec-support (~> 3.13.0)
282
- rspec-expectations (3.13.3)
283
- diff-lcs (>= 1.2.0, < 2.0)
284
- rspec-support (~> 3.13.0)
285
- rspec-mocks (3.13.2)
286
- diff-lcs (>= 1.2.0, < 2.0)
287
- rspec-support (~> 3.13.0)
288
- rspec-rails (7.1.1)
289
- actionpack (>= 7.0)
290
- activesupport (>= 7.0)
291
- railties (>= 7.0)
292
- rspec-core (~> 3.13)
293
- rspec-expectations (~> 3.13)
294
- rspec-mocks (~> 3.13)
295
- rspec-support (~> 3.13)
296
- rspec-support (3.13.1)
297
- securerandom (0.3.1)
298
- semver2 (3.4.2)
299
- shellany (0.0.1)
300
- simplecov (0.22.0)
301
- docile (~> 1.1)
302
- simplecov-html (~> 0.11)
303
- simplecov_json_formatter (~> 0.1)
304
- simplecov-html (0.13.1)
305
- simplecov_json_formatter (0.1.4)
306
- standalone_migrations (7.2.0)
307
- activerecord (>= 6.0.0, < 8.0)
308
- nokogiri (~> 1.14)
309
- railties (>= 6.0.0, < 8.0)
310
- rake (>= 10.0)
311
- stringio (3.1.2)
312
- thor (1.3.2)
313
- thread_safe (0.3.6)
314
- timecop (0.9.10)
315
- timeout (0.4.2)
316
- tzinfo (2.0.6)
317
- concurrent-ruby (~> 1.0)
318
- webrick (1.9.0)
319
- websocket-driver (0.7.6)
320
- websocket-extensions (>= 0.1.0)
321
- websocket-extensions (0.1.5)
322
- zeitwerk (2.6.18)
323
-
324
- PLATFORMS
325
- arm64-darwin
326
- x86_64-darwin
327
-
328
- DEPENDENCIES
329
- activerecord (>= 6)
330
- activerecord-import
331
- activesupport
332
- combustion (~> 1.3)
333
- database_cleaner
334
- factory_bot_rails
335
- guard
336
- guard-rspec
337
- jeweler!
338
- mysql2 (= 0.5)
339
- paranoia
340
- pg
341
- pry
342
- rails (>= 6)
343
- rdoc (~> 3.12)
344
- rollbar
345
- rspec
346
- rspec-rails
347
- simplecov
348
- standalone_migrations
349
- timecop
350
-
351
- RUBY VERSION
352
- ruby 3.0.2p107
353
-
354
- BUNDLED WITH
355
- 2.5.23