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.
- checksums.yaml +4 -4
- data/Rakefile +14 -0
- data/VERSION +1 -1
- data/historiographer.gemspec +26 -13
- data/lib/historiographer.rb +5 -0
- data/spec/db/migrate/20250827000000_create_templates.rb +9 -0
- data/spec/db/migrate/20250827000001_create_template_histories.rb +9 -0
- data/spec/db/migrate/20250827000002_create_websites.rb +9 -0
- data/spec/db/migrate/20250827000003_create_website_histories.rb +9 -0
- data/spec/db/migrate/20250827000004_create_template_files.rb +15 -0
- data/spec/db/migrate/20250827000005_create_template_file_histories.rb +9 -0
- data/spec/db/migrate/20250827000006_create_website_files.rb +15 -0
- data/spec/db/migrate/20250827000007_create_website_file_histories.rb +9 -0
- data/spec/db/migrate/20250827000008_create_code_files_view.rb +62 -0
- data/spec/db/schema.rb +126 -1
- data/spec/examples.txt +71 -0
- data/spec/internal/log/development.log +0 -0
- data/spec/internal/log/test.log +1479 -0
- data/spec/models/code_file.rb +16 -0
- data/spec/models/template.rb +6 -0
- data/spec/models/template_file.rb +5 -0
- data/spec/models/template_file_history.rb +3 -0
- data/spec/models/template_history.rb +3 -0
- data/spec/models/website.rb +7 -0
- data/spec/models/website_file.rb +5 -0
- data/spec/models/website_file_history.rb +3 -0
- data/spec/models/website_history.rb +3 -0
- data/spec/view_backed_model_spec.rb +166 -0
- metadata +24 -11
- data/.document +0 -5
- data/.rspec +0 -1
- data/.ruby-version +0 -1
- data/.standalone_migrations +0 -6
- data/Gemfile.lock +0 -355
- data/historiographer-4.1.12.gem +0 -0
- data/historiographer-4.1.13.gem +0 -0
- data/historiographer-4.1.14.gem +0 -0
- 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,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.
|
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-
|
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
data/.rspec
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
--color
|
data/.ruby-version
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
3.0.2
|
data/.standalone_migrations
DELETED
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
|