scenic-cascade 0.1.0 → 0.1.2
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/.ruby-version +1 -1
- data/CHANGELOG.md +30 -2
- data/Dockerfile +3 -3
- data/Gemfile +11 -1
- data/Gemfile.lock +77 -46
- data/README.md +4 -2
- data/Steepfile +4 -1
- data/lib/generators/scenic/view/cascade/cascade_generator.rb +21 -7
- data/lib/scenic/cascade/definition_finder.rb +16 -5
- data/lib/scenic/cascade/dependency_finder.rb +1 -1
- data/lib/scenic/cascade/dependent_finder.rb +1 -1
- data/lib/scenic/cascade/version.rb +1 -1
- data/lib/scenic/cascade/view_with_version.rb +2 -0
- data/lib/scenic/cascade.rb +2 -0
- data/rbs_collection.lock.yaml +124 -24
- data/rbs_collection.yaml +3 -1
- data/sig/generators/scenic/view/cascade/cascade_generator.rbs +4 -0
- data/sig/generators/scenic/view/view_generator.rbs +8 -3
- data/sig/scenic/cascade/definition_finder.rbs +1 -1
- data/sig/scenic/cascade/view.rbs +2 -0
- data/sig/scenic/cascade/view_with_version.rbs +4 -0
- data/sig/scenic/cascade.rbs +1 -1
- data/sig/scenic/definition.rbs +1 -1
- metadata +3 -6
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 9d210342197b949abc4156e8fcdc63ad74b04f1fde40fb207e35dc15b13e1efd
|
|
4
|
+
data.tar.gz: 60c19c6113bc29ebc57c068ef16d744661f33f9bdd06a763807b807e41d3f66f
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 9040765c0fdadb9778139f634883a09466ddf80d8b63bf28c8b358150e0d4e6eb45556bb3d926c9e458c7e3fd8bf9deb7b8863d6a80694163f6b73643654ee09
|
|
7
|
+
data.tar.gz: 05ea8516e444b9c07cba0a8813af3985295897ce11c90790ca407eb5aa81d5d250e937d334269f5b87c797ee932a2ae7e1e09cff92d82c9a7041f89c35cbd06e
|
data/.ruby-version
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
3.
|
|
1
|
+
3.4.12
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,33 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project are documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
|
+
and this project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
1
8
|
## [Unreleased]
|
|
2
9
|
|
|
3
|
-
## [0.1.
|
|
10
|
+
## [0.1.2] - 2026-11-01
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
|
|
14
|
+
- Select the latest existing dependent view definition when SQL version numbers have gaps.
|
|
15
|
+
- Report noncanonical numeric view definition filenames instead of silently selecting an older definition.
|
|
16
|
+
- Leave view definition files untouched when a dependent view has no Scenic definition.
|
|
17
|
+
|
|
18
|
+
## [0.1.1] - 2026-10-30
|
|
19
|
+
|
|
20
|
+
### Fixed
|
|
21
|
+
|
|
22
|
+
- Restore cascading migrations for deep dependency chains and views reached through multiple paths.
|
|
23
|
+
|
|
24
|
+
## [0.1.0] - 2023-12-11
|
|
25
|
+
|
|
26
|
+
### Added
|
|
27
|
+
|
|
28
|
+
- Initial release of the cascading Scenic view migration generator.
|
|
4
29
|
|
|
5
|
-
-
|
|
30
|
+
[Unreleased]: https://github.com/akiomik/scenic-cascade/compare/v0.1.2...HEAD
|
|
31
|
+
[0.1.2]: https://github.com/akiomik/scenic-cascade/compare/v0.1.1...v0.1.2
|
|
32
|
+
[0.1.1]: https://github.com/akiomik/scenic-cascade/compare/v0.1.0...v0.1.1
|
|
33
|
+
[0.1.0]: https://github.com/akiomik/scenic-cascade/releases/tag/v0.1.0
|
data/Dockerfile
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
FROM ruby:3.
|
|
1
|
+
FROM ruby:3.4-alpine
|
|
2
2
|
WORKDIR /scenic-cascade
|
|
3
|
-
RUN apk add --no-cache bash gcc git libc6-compat make musl-dev postgresql-dev tzdata
|
|
3
|
+
RUN apk add --no-cache bash gcc git libc6-compat linux-headers make musl-dev postgresql-dev tzdata yaml-dev
|
|
4
4
|
COPY . .
|
|
5
5
|
RUN bin/setup
|
|
6
|
-
CMD ["rake"]
|
|
6
|
+
CMD ["bundle", "exec", "rake"]
|
data/Gemfile
CHANGED
|
@@ -7,13 +7,23 @@ gemspec
|
|
|
7
7
|
|
|
8
8
|
gem 'rake', '~> 13.0'
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
# type checking
|
|
11
|
+
# Steep 2.x drops Ruby 3.1, which remains in the CI matrix.
|
|
12
|
+
gem 'steep', '~> 1.10', require: false
|
|
11
13
|
|
|
14
|
+
# testing
|
|
15
|
+
gem 'activerecord', '~> 7.1.0'
|
|
12
16
|
gem 'ammeter', '~> 1.1'
|
|
13
17
|
gem 'database_cleaner-active_record', '~> 2.0'
|
|
18
|
+
# Nokogiri 1.19 drops Ruby 3.1, which remains in the CI matrix.
|
|
19
|
+
gem 'nokogiri', '~> 1.18.0'
|
|
14
20
|
gem 'pg', '~> 1.0'
|
|
21
|
+
gem 'railties', '~> 7.1.0'
|
|
15
22
|
gem 'rspec', '~> 3.0'
|
|
23
|
+
gem 'simplecov', require: false
|
|
24
|
+
gem 'simplecov-cobertura', '~> 3.2', require: false
|
|
16
25
|
|
|
26
|
+
# linting
|
|
17
27
|
gem 'rubocop', '~> 1.21', require: false
|
|
18
28
|
gem 'rubocop-performance', '~> 1.14', require: false
|
|
19
29
|
gem 'rubocop-rake', '~> 0.6', require: false
|
data/Gemfile.lock
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
scenic-cascade (0.1.
|
|
4
|
+
scenic-cascade (0.1.2)
|
|
5
5
|
scenic (~> 1.0)
|
|
6
6
|
|
|
7
7
|
GEM
|
|
8
8
|
remote: https://rubygems.org/
|
|
9
9
|
specs:
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
10
|
+
actionpack (7.1.6)
|
|
11
|
+
actionview (= 7.1.6)
|
|
12
|
+
activesupport (= 7.1.6)
|
|
13
|
+
cgi
|
|
14
14
|
nokogiri (>= 1.8.5)
|
|
15
15
|
racc
|
|
16
16
|
rack (>= 2.2.4)
|
|
@@ -18,27 +18,31 @@ GEM
|
|
|
18
18
|
rack-test (>= 0.6.3)
|
|
19
19
|
rails-dom-testing (~> 2.2)
|
|
20
20
|
rails-html-sanitizer (~> 1.6)
|
|
21
|
-
actionview (7.1.
|
|
22
|
-
activesupport (= 7.1.
|
|
21
|
+
actionview (7.1.6)
|
|
22
|
+
activesupport (= 7.1.6)
|
|
23
23
|
builder (~> 3.1)
|
|
24
|
+
cgi
|
|
24
25
|
erubi (~> 1.11)
|
|
25
26
|
rails-dom-testing (~> 2.2)
|
|
26
27
|
rails-html-sanitizer (~> 1.6)
|
|
27
|
-
activemodel (7.1.
|
|
28
|
-
activesupport (= 7.1.
|
|
29
|
-
activerecord (7.1.
|
|
30
|
-
activemodel (= 7.1.
|
|
31
|
-
activesupport (= 7.1.
|
|
28
|
+
activemodel (7.1.6)
|
|
29
|
+
activesupport (= 7.1.6)
|
|
30
|
+
activerecord (7.1.6)
|
|
31
|
+
activemodel (= 7.1.6)
|
|
32
|
+
activesupport (= 7.1.6)
|
|
32
33
|
timeout (>= 0.4.0)
|
|
33
|
-
activesupport (7.1.
|
|
34
|
+
activesupport (7.1.6)
|
|
34
35
|
base64
|
|
36
|
+
benchmark (>= 0.3)
|
|
35
37
|
bigdecimal
|
|
36
38
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
|
37
39
|
connection_pool (>= 2.2.5)
|
|
38
40
|
drb
|
|
39
41
|
i18n (>= 1.6, < 2)
|
|
42
|
+
logger (>= 1.4.2)
|
|
40
43
|
minitest (>= 5.1)
|
|
41
44
|
mutex_m
|
|
45
|
+
securerandom (>= 0.3)
|
|
42
46
|
tzinfo (~> 2.0)
|
|
43
47
|
ammeter (1.1.6)
|
|
44
48
|
activesupport (>= 3.0)
|
|
@@ -46,22 +50,27 @@ GEM
|
|
|
46
50
|
rspec-rails (>= 2.2)
|
|
47
51
|
ast (2.4.2)
|
|
48
52
|
base64 (0.2.0)
|
|
53
|
+
benchmark (0.5.0)
|
|
49
54
|
bigdecimal (3.1.4)
|
|
50
55
|
builder (3.2.4)
|
|
51
|
-
|
|
56
|
+
cgi (0.5.2)
|
|
57
|
+
concurrent-ruby (1.3.7)
|
|
52
58
|
connection_pool (2.4.1)
|
|
53
|
-
crass (1.0.
|
|
54
|
-
csv (3.
|
|
59
|
+
crass (1.0.8)
|
|
60
|
+
csv (3.3.7)
|
|
55
61
|
database_cleaner-active_record (2.1.0)
|
|
56
62
|
activerecord (>= 5.a)
|
|
57
63
|
database_cleaner-core (~> 2.0.0)
|
|
58
64
|
database_cleaner-core (2.0.1)
|
|
59
65
|
diff-lcs (1.5.0)
|
|
66
|
+
docile (1.4.0)
|
|
60
67
|
drb (2.2.0)
|
|
61
68
|
ruby2_keywords
|
|
62
69
|
erubi (1.12.0)
|
|
63
|
-
ffi (1.
|
|
64
|
-
|
|
70
|
+
ffi (1.17.4-aarch64-linux-musl)
|
|
71
|
+
ffi (1.17.4-arm64-darwin)
|
|
72
|
+
ffi (1.17.4-x86_64-linux-gnu)
|
|
73
|
+
fileutils (1.8.1)
|
|
65
74
|
i18n (1.14.1)
|
|
66
75
|
concurrent-ruby (~> 1.0)
|
|
67
76
|
io-console (0.6.0)
|
|
@@ -69,28 +78,29 @@ GEM
|
|
|
69
78
|
rdoc
|
|
70
79
|
reline (>= 0.3.8)
|
|
71
80
|
json (2.7.1)
|
|
72
|
-
language_server-protocol (3.17.0.
|
|
73
|
-
listen (3.
|
|
81
|
+
language_server-protocol (3.17.0.6)
|
|
82
|
+
listen (3.10.1)
|
|
83
|
+
logger
|
|
74
84
|
rb-fsevent (~> 0.10, >= 0.10.3)
|
|
75
85
|
rb-inotify (~> 0.9, >= 0.9.10)
|
|
76
86
|
logger (1.6.0)
|
|
77
|
-
loofah (2.
|
|
87
|
+
loofah (2.25.2)
|
|
78
88
|
crass (~> 1.0.2)
|
|
79
89
|
nokogiri (>= 1.12.0)
|
|
80
90
|
minitest (5.20.0)
|
|
81
|
-
mutex_m (0.
|
|
82
|
-
nokogiri (1.
|
|
91
|
+
mutex_m (0.3.0)
|
|
92
|
+
nokogiri (1.18.10-aarch64-linux-musl)
|
|
83
93
|
racc (~> 1.4)
|
|
84
|
-
nokogiri (1.
|
|
94
|
+
nokogiri (1.18.10-arm64-darwin)
|
|
85
95
|
racc (~> 1.4)
|
|
86
|
-
nokogiri (1.
|
|
96
|
+
nokogiri (1.18.10-x86_64-linux-gnu)
|
|
87
97
|
racc (~> 1.4)
|
|
88
98
|
parallel (1.23.0)
|
|
89
99
|
parser (3.2.2.4)
|
|
90
100
|
ast (~> 2.4.1)
|
|
91
101
|
racc
|
|
92
102
|
pg (1.5.4)
|
|
93
|
-
psych (5.1.
|
|
103
|
+
psych (5.1.2)
|
|
94
104
|
stringio
|
|
95
105
|
racc (1.7.3)
|
|
96
106
|
rack (3.0.8)
|
|
@@ -108,27 +118,30 @@ GEM
|
|
|
108
118
|
rails-html-sanitizer (1.6.0)
|
|
109
119
|
loofah (~> 2.21)
|
|
110
120
|
nokogiri (~> 1.14)
|
|
111
|
-
railties (7.1.
|
|
112
|
-
actionpack (= 7.1.
|
|
113
|
-
activesupport (= 7.1.
|
|
121
|
+
railties (7.1.6)
|
|
122
|
+
actionpack (= 7.1.6)
|
|
123
|
+
activesupport (= 7.1.6)
|
|
124
|
+
cgi
|
|
114
125
|
irb
|
|
115
126
|
rackup (>= 1.0.0)
|
|
116
127
|
rake (>= 12.2)
|
|
117
128
|
thor (~> 1.0, >= 1.2.2)
|
|
129
|
+
tsort (>= 0.2)
|
|
118
130
|
zeitwerk (~> 2.6)
|
|
119
131
|
rainbow (3.1.1)
|
|
120
132
|
rake (13.1.0)
|
|
121
133
|
rb-fsevent (0.11.2)
|
|
122
|
-
rb-inotify (0.
|
|
134
|
+
rb-inotify (0.11.1)
|
|
123
135
|
ffi (~> 1.0)
|
|
124
|
-
rbs (3.
|
|
125
|
-
|
|
126
|
-
|
|
136
|
+
rbs (3.10.4)
|
|
137
|
+
logger
|
|
138
|
+
tsort
|
|
139
|
+
rdoc (6.6.3.1)
|
|
127
140
|
psych (>= 4.0.0)
|
|
128
141
|
regexp_parser (2.8.3)
|
|
129
142
|
reline (0.4.1)
|
|
130
143
|
io-console (~> 0.5)
|
|
131
|
-
rexml (3.
|
|
144
|
+
rexml (3.4.4)
|
|
132
145
|
rspec (3.12.0)
|
|
133
146
|
rspec-core (~> 3.12.0)
|
|
134
147
|
rspec-expectations (~> 3.12.0)
|
|
@@ -178,35 +191,48 @@ GEM
|
|
|
178
191
|
rubocop-factory_bot (~> 2.22)
|
|
179
192
|
ruby-progressbar (1.13.0)
|
|
180
193
|
ruby2_keywords (0.0.5)
|
|
181
|
-
scenic (1.
|
|
194
|
+
scenic (1.9.0)
|
|
182
195
|
activerecord (>= 4.0.0)
|
|
183
196
|
railties (>= 4.0.0)
|
|
184
197
|
securerandom (0.3.0)
|
|
185
|
-
|
|
198
|
+
simplecov (0.22.0)
|
|
199
|
+
docile (~> 1.1)
|
|
200
|
+
simplecov-html (~> 0.11)
|
|
201
|
+
simplecov_json_formatter (~> 0.1)
|
|
202
|
+
simplecov-cobertura (3.2.0)
|
|
203
|
+
rexml
|
|
204
|
+
simplecov (~> 0.19)
|
|
205
|
+
simplecov-html (0.12.3)
|
|
206
|
+
simplecov_json_formatter (0.1.4)
|
|
207
|
+
steep (1.10.0)
|
|
186
208
|
activesupport (>= 5.1)
|
|
187
209
|
concurrent-ruby (>= 1.1.10)
|
|
188
210
|
csv (>= 3.0.9)
|
|
189
211
|
fileutils (>= 1.1.0)
|
|
190
212
|
json (>= 2.1.0)
|
|
191
|
-
language_server-protocol (>= 3.
|
|
213
|
+
language_server-protocol (>= 3.17.0.4, < 4.0)
|
|
192
214
|
listen (~> 3.0)
|
|
193
215
|
logger (>= 1.3.0)
|
|
216
|
+
mutex_m (>= 0.3.0)
|
|
194
217
|
parser (>= 3.1)
|
|
195
218
|
rainbow (>= 2.2.2, < 4.0)
|
|
196
|
-
rbs (
|
|
219
|
+
rbs (~> 3.9)
|
|
197
220
|
securerandom (>= 0.1)
|
|
198
221
|
strscan (>= 1.0.0)
|
|
199
|
-
terminal-table (>= 2, <
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
222
|
+
terminal-table (>= 2, < 5)
|
|
223
|
+
uri (>= 0.12.0)
|
|
224
|
+
stringio (3.2.0)
|
|
225
|
+
strscan (3.1.8)
|
|
226
|
+
terminal-table (4.0.0)
|
|
227
|
+
unicode-display_width (>= 1.1.1, < 4)
|
|
228
|
+
thor (1.4.0)
|
|
205
229
|
timeout (0.4.1)
|
|
230
|
+
tsort (0.2.0)
|
|
206
231
|
tzinfo (2.0.6)
|
|
207
232
|
concurrent-ruby (~> 1.0)
|
|
208
233
|
unicode-display_width (2.5.0)
|
|
209
|
-
|
|
234
|
+
uri (1.1.2)
|
|
235
|
+
webrick (1.8.2)
|
|
210
236
|
zeitwerk (2.6.12)
|
|
211
237
|
|
|
212
238
|
PLATFORMS
|
|
@@ -215,9 +241,12 @@ PLATFORMS
|
|
|
215
241
|
x86_64-linux
|
|
216
242
|
|
|
217
243
|
DEPENDENCIES
|
|
244
|
+
activerecord (~> 7.1.0)
|
|
218
245
|
ammeter (~> 1.1)
|
|
219
246
|
database_cleaner-active_record (~> 2.0)
|
|
247
|
+
nokogiri (~> 1.18.0)
|
|
220
248
|
pg (~> 1.0)
|
|
249
|
+
railties (~> 7.1.0)
|
|
221
250
|
rake (~> 13.0)
|
|
222
251
|
rspec (~> 3.0)
|
|
223
252
|
rubocop (~> 1.21)
|
|
@@ -225,7 +254,9 @@ DEPENDENCIES
|
|
|
225
254
|
rubocop-rake (~> 0.6)
|
|
226
255
|
rubocop-rspec (~> 2.12)
|
|
227
256
|
scenic-cascade!
|
|
228
|
-
|
|
257
|
+
simplecov
|
|
258
|
+
simplecov-cobertura (~> 3.2)
|
|
259
|
+
steep (~> 1.10)
|
|
229
260
|
|
|
230
261
|
BUNDLED WITH
|
|
231
262
|
2.4.22
|
data/README.md
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
# scenic-cascade
|
|
2
2
|
|
|
3
|
+
[](https://badge.fury.io/rb/scenic-cascade)
|
|
3
4
|
[](https://github.com/akiomik/scenic-cascade/actions/workflows/ci.yml)
|
|
5
|
+
[](https://codecov.io/gh/akiomik/scenic-cascade)
|
|
4
6
|
|
|
5
7
|
`scenic-cascade` is a [scenic](https://github.com/scenic-views/scenic) migration file generator that supports cascading view updates.
|
|
6
8
|
|
|
@@ -82,9 +84,9 @@ end
|
|
|
82
84
|
|
|
83
85
|
## Development
|
|
84
86
|
|
|
85
|
-
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
|
87
|
+
After checking out the repo, run `bin/setup` to install dependencies. Then, run `bundle exec rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
|
86
88
|
|
|
87
|
-
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update
|
|
89
|
+
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update `version.rb`, `Gemfile.lock`, and `CHANGELOG.md`, then publish a GitHub Release with a matching `vX.Y.Z` tag. The [publish workflow](.github/workflows/publish.yml) builds and pushes the gem to [rubygems.org](https://rubygems.org).
|
|
88
90
|
|
|
89
91
|
## Contributing
|
|
90
92
|
|
data/Steepfile
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require 'generators/scenic/view/view_generator'
|
|
4
|
+
require 'scenic/cascade'
|
|
5
|
+
require 'scenic/cascade/view_with_version'
|
|
4
6
|
|
|
5
7
|
module Scenic
|
|
6
8
|
module Generators
|
|
@@ -9,6 +11,11 @@ module Scenic
|
|
|
9
11
|
class CascadeGenerator < Scenic::Generators::ViewGenerator
|
|
10
12
|
source_root File.expand_path('templates', __dir__ || '.')
|
|
11
13
|
|
|
14
|
+
def create_view_definition
|
|
15
|
+
dependents unless destroying? || creating_new_view?
|
|
16
|
+
super
|
|
17
|
+
end
|
|
18
|
+
|
|
12
19
|
def create_migration_file
|
|
13
20
|
if creating_new_view? || destroying_initial_view?
|
|
14
21
|
migration_template('db/migrate/create_view.rb.erb',
|
|
@@ -22,15 +29,22 @@ module Scenic
|
|
|
22
29
|
private
|
|
23
30
|
|
|
24
31
|
def dependents
|
|
25
|
-
|
|
32
|
+
cached_dependents = @dependents
|
|
33
|
+
return cached_dependents unless cached_dependents.nil?
|
|
26
34
|
|
|
27
35
|
deps = Scenic::Cascade.view_dependents_of(plural_name, recursive: true)
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
36
|
+
views = deps.map { |dep| view_with_version_for(dep) }
|
|
37
|
+
# The last visit follows every prerequisite, even when names sort in the opposite order.
|
|
38
|
+
@dependents = views.reverse.uniq { |view| [view.name, view.version, view.materialized?] }.reverse
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def view_with_version_for(dep)
|
|
42
|
+
name = dep.from.name
|
|
43
|
+
definition = Scenic::Cascade.find_definitions_of(name).last
|
|
44
|
+
raise ArgumentError, "Dependent view #{name} has no Scenic definition file" if definition.nil?
|
|
45
|
+
|
|
46
|
+
version = definition.version.to_i
|
|
47
|
+
Scenic::Cascade::ViewWithVersion.new(name: name, version: version, materialized: dep.from.materialized?)
|
|
34
48
|
end
|
|
35
49
|
end
|
|
36
50
|
end
|
|
@@ -14,7 +14,13 @@ module Scenic
|
|
|
14
14
|
# Provides class methods to injected class
|
|
15
15
|
module ClassMethods
|
|
16
16
|
def find_definitions_of(view_name)
|
|
17
|
-
|
|
17
|
+
first_path = Scenic::Definition.new(view_name, 1).full_path
|
|
18
|
+
directory = first_path.dirname
|
|
19
|
+
return [] unless directory.directory?
|
|
20
|
+
|
|
21
|
+
prefix = first_path.basename.to_s.sub(/\d+\.sql\z/, '')
|
|
22
|
+
directory.children.map { |path| definition_at(path, view_name, prefix) }
|
|
23
|
+
.compact.sort_by { |definition| definition.version.to_i }
|
|
18
24
|
end
|
|
19
25
|
|
|
20
26
|
def find_latest_definition_of(view_name)
|
|
@@ -29,11 +35,16 @@ module Scenic
|
|
|
29
35
|
|
|
30
36
|
private
|
|
31
37
|
|
|
32
|
-
def
|
|
33
|
-
|
|
34
|
-
|
|
38
|
+
def definition_at(path, view_name, prefix)
|
|
39
|
+
return unless path.file?
|
|
40
|
+
|
|
41
|
+
match = /\A#{Regexp.escape(prefix)}(?<version>\d+)\.sql\z/.match(path.basename.to_s)
|
|
42
|
+
return unless match && match[:version].to_i.positive?
|
|
43
|
+
|
|
44
|
+
definition = Scenic::Definition.new(view_name, match[:version].to_i)
|
|
45
|
+
return definition if definition.full_path == path
|
|
35
46
|
|
|
36
|
-
|
|
47
|
+
raise ArgumentError, "Noncanonical view definition #{path}; expected #{definition.full_path}"
|
|
37
48
|
end
|
|
38
49
|
end
|
|
39
50
|
end
|
data/lib/scenic/cascade.rb
CHANGED
data/rbs_collection.lock.yaml
CHANGED
|
@@ -6,7 +6,7 @@ gems:
|
|
|
6
6
|
source:
|
|
7
7
|
type: git
|
|
8
8
|
name: ruby/gem_rbs_collection
|
|
9
|
-
revision:
|
|
9
|
+
revision: 9e17daa08b1710667699a208981cffd21dbf15f6
|
|
10
10
|
remote: https://github.com/ruby/gem_rbs_collection.git
|
|
11
11
|
repo_dir: gems
|
|
12
12
|
- name: actionview
|
|
@@ -14,47 +14,67 @@ gems:
|
|
|
14
14
|
source:
|
|
15
15
|
type: git
|
|
16
16
|
name: ruby/gem_rbs_collection
|
|
17
|
-
revision:
|
|
17
|
+
revision: 9e17daa08b1710667699a208981cffd21dbf15f6
|
|
18
18
|
remote: https://github.com/ruby/gem_rbs_collection.git
|
|
19
19
|
repo_dir: gems
|
|
20
20
|
- name: activemodel
|
|
21
|
-
version: '
|
|
21
|
+
version: '7.1'
|
|
22
22
|
source:
|
|
23
23
|
type: git
|
|
24
24
|
name: ruby/gem_rbs_collection
|
|
25
|
-
revision:
|
|
25
|
+
revision: 9e17daa08b1710667699a208981cffd21dbf15f6
|
|
26
26
|
remote: https://github.com/ruby/gem_rbs_collection.git
|
|
27
27
|
repo_dir: gems
|
|
28
28
|
- name: activerecord
|
|
29
|
-
version: '
|
|
29
|
+
version: '7.1'
|
|
30
30
|
source:
|
|
31
31
|
type: git
|
|
32
32
|
name: ruby/gem_rbs_collection
|
|
33
|
-
revision:
|
|
33
|
+
revision: 9e17daa08b1710667699a208981cffd21dbf15f6
|
|
34
34
|
remote: https://github.com/ruby/gem_rbs_collection.git
|
|
35
35
|
repo_dir: gems
|
|
36
36
|
- name: activesupport
|
|
37
|
-
version: '
|
|
37
|
+
version: '7.0'
|
|
38
38
|
source:
|
|
39
39
|
type: git
|
|
40
40
|
name: ruby/gem_rbs_collection
|
|
41
|
-
revision:
|
|
41
|
+
revision: 9e17daa08b1710667699a208981cffd21dbf15f6
|
|
42
42
|
remote: https://github.com/ruby/gem_rbs_collection.git
|
|
43
43
|
repo_dir: gems
|
|
44
44
|
- name: base64
|
|
45
|
+
version: '0.1'
|
|
46
|
+
source:
|
|
47
|
+
type: git
|
|
48
|
+
name: ruby/gem_rbs_collection
|
|
49
|
+
revision: 9e17daa08b1710667699a208981cffd21dbf15f6
|
|
50
|
+
remote: https://github.com/ruby/gem_rbs_collection.git
|
|
51
|
+
repo_dir: gems
|
|
52
|
+
- name: benchmark
|
|
45
53
|
version: '0'
|
|
46
54
|
source:
|
|
47
55
|
type: stdlib
|
|
48
56
|
- name: bigdecimal
|
|
49
|
-
version: '
|
|
57
|
+
version: '3.1'
|
|
50
58
|
source:
|
|
51
|
-
type:
|
|
59
|
+
type: git
|
|
60
|
+
name: ruby/gem_rbs_collection
|
|
61
|
+
revision: 9e17daa08b1710667699a208981cffd21dbf15f6
|
|
62
|
+
remote: https://github.com/ruby/gem_rbs_collection.git
|
|
63
|
+
repo_dir: gems
|
|
64
|
+
- name: cgi
|
|
65
|
+
version: '0.5'
|
|
66
|
+
source:
|
|
67
|
+
type: git
|
|
68
|
+
name: ruby/gem_rbs_collection
|
|
69
|
+
revision: 9e17daa08b1710667699a208981cffd21dbf15f6
|
|
70
|
+
remote: https://github.com/ruby/gem_rbs_collection.git
|
|
71
|
+
repo_dir: gems
|
|
52
72
|
- name: concurrent-ruby
|
|
53
73
|
version: '1.1'
|
|
54
74
|
source:
|
|
55
75
|
type: git
|
|
56
76
|
name: ruby/gem_rbs_collection
|
|
57
|
-
revision:
|
|
77
|
+
revision: 9e17daa08b1710667699a208981cffd21dbf15f6
|
|
58
78
|
remote: https://github.com/ruby/gem_rbs_collection.git
|
|
59
79
|
repo_dir: gems
|
|
60
80
|
- name: connection_pool
|
|
@@ -62,7 +82,7 @@ gems:
|
|
|
62
82
|
source:
|
|
63
83
|
type: git
|
|
64
84
|
name: ruby/gem_rbs_collection
|
|
65
|
-
revision:
|
|
85
|
+
revision: 9e17daa08b1710667699a208981cffd21dbf15f6
|
|
66
86
|
remote: https://github.com/ruby/gem_rbs_collection.git
|
|
67
87
|
repo_dir: gems
|
|
68
88
|
- name: date
|
|
@@ -73,6 +93,26 @@ gems:
|
|
|
73
93
|
version: '0'
|
|
74
94
|
source:
|
|
75
95
|
type: stdlib
|
|
96
|
+
- name: delegate
|
|
97
|
+
version: '0'
|
|
98
|
+
source:
|
|
99
|
+
type: stdlib
|
|
100
|
+
- name: diff-lcs
|
|
101
|
+
version: '1.5'
|
|
102
|
+
source:
|
|
103
|
+
type: git
|
|
104
|
+
name: ruby/gem_rbs_collection
|
|
105
|
+
revision: 9e17daa08b1710667699a208981cffd21dbf15f6
|
|
106
|
+
remote: https://github.com/ruby/gem_rbs_collection.git
|
|
107
|
+
repo_dir: gems
|
|
108
|
+
- name: digest
|
|
109
|
+
version: '0'
|
|
110
|
+
source:
|
|
111
|
+
type: stdlib
|
|
112
|
+
- name: erb
|
|
113
|
+
version: '0'
|
|
114
|
+
source:
|
|
115
|
+
type: stdlib
|
|
76
116
|
- name: fileutils
|
|
77
117
|
version: '0'
|
|
78
118
|
source:
|
|
@@ -82,7 +122,7 @@ gems:
|
|
|
82
122
|
source:
|
|
83
123
|
type: git
|
|
84
124
|
name: ruby/gem_rbs_collection
|
|
85
|
-
revision:
|
|
125
|
+
revision: 9e17daa08b1710667699a208981cffd21dbf15f6
|
|
86
126
|
remote: https://github.com/ruby/gem_rbs_collection.git
|
|
87
127
|
repo_dir: gems
|
|
88
128
|
- name: io-console
|
|
@@ -94,25 +134,33 @@ gems:
|
|
|
94
134
|
source:
|
|
95
135
|
type: stdlib
|
|
96
136
|
- name: minitest
|
|
97
|
-
version: '
|
|
137
|
+
version: '5.25'
|
|
98
138
|
source:
|
|
99
|
-
type:
|
|
139
|
+
type: git
|
|
140
|
+
name: ruby/gem_rbs_collection
|
|
141
|
+
revision: 9e17daa08b1710667699a208981cffd21dbf15f6
|
|
142
|
+
remote: https://github.com/ruby/gem_rbs_collection.git
|
|
143
|
+
repo_dir: gems
|
|
100
144
|
- name: monitor
|
|
101
145
|
version: '0'
|
|
102
146
|
source:
|
|
103
147
|
type: stdlib
|
|
104
148
|
- name: mutex_m
|
|
105
|
-
version:
|
|
149
|
+
version: 0.3.0
|
|
106
150
|
source:
|
|
107
|
-
type:
|
|
151
|
+
type: rubygems
|
|
108
152
|
- name: nokogiri
|
|
109
153
|
version: '1.11'
|
|
110
154
|
source:
|
|
111
155
|
type: git
|
|
112
156
|
name: ruby/gem_rbs_collection
|
|
113
|
-
revision:
|
|
157
|
+
revision: 9e17daa08b1710667699a208981cffd21dbf15f6
|
|
114
158
|
remote: https://github.com/ruby/gem_rbs_collection.git
|
|
115
159
|
repo_dir: gems
|
|
160
|
+
- name: openssl
|
|
161
|
+
version: '0'
|
|
162
|
+
source:
|
|
163
|
+
type: stdlib
|
|
116
164
|
- name: pathname
|
|
117
165
|
version: '0'
|
|
118
166
|
source:
|
|
@@ -125,12 +173,20 @@ gems:
|
|
|
125
173
|
version: '0'
|
|
126
174
|
source:
|
|
127
175
|
type: stdlib
|
|
176
|
+
- name: racc
|
|
177
|
+
version: '1.8'
|
|
178
|
+
source:
|
|
179
|
+
type: git
|
|
180
|
+
name: ruby/gem_rbs_collection
|
|
181
|
+
revision: 9e17daa08b1710667699a208981cffd21dbf15f6
|
|
182
|
+
remote: https://github.com/ruby/gem_rbs_collection.git
|
|
183
|
+
repo_dir: gems
|
|
128
184
|
- name: rack
|
|
129
|
-
version: 2.2
|
|
185
|
+
version: '2.2'
|
|
130
186
|
source:
|
|
131
187
|
type: git
|
|
132
188
|
name: ruby/gem_rbs_collection
|
|
133
|
-
revision:
|
|
189
|
+
revision: 9e17daa08b1710667699a208981cffd21dbf15f6
|
|
134
190
|
remote: https://github.com/ruby/gem_rbs_collection.git
|
|
135
191
|
repo_dir: gems
|
|
136
192
|
- name: rails-dom-testing
|
|
@@ -138,7 +194,15 @@ gems:
|
|
|
138
194
|
source:
|
|
139
195
|
type: git
|
|
140
196
|
name: ruby/gem_rbs_collection
|
|
141
|
-
revision:
|
|
197
|
+
revision: 9e17daa08b1710667699a208981cffd21dbf15f6
|
|
198
|
+
remote: https://github.com/ruby/gem_rbs_collection.git
|
|
199
|
+
repo_dir: gems
|
|
200
|
+
- name: rails-html-sanitizer
|
|
201
|
+
version: '1.6'
|
|
202
|
+
source:
|
|
203
|
+
type: git
|
|
204
|
+
name: ruby/gem_rbs_collection
|
|
205
|
+
revision: 9e17daa08b1710667699a208981cffd21dbf15f6
|
|
142
206
|
remote: https://github.com/ruby/gem_rbs_collection.git
|
|
143
207
|
repo_dir: gems
|
|
144
208
|
- name: railties
|
|
@@ -146,7 +210,7 @@ gems:
|
|
|
146
210
|
source:
|
|
147
211
|
type: git
|
|
148
212
|
name: ruby/gem_rbs_collection
|
|
149
|
-
revision:
|
|
213
|
+
revision: 9e17daa08b1710667699a208981cffd21dbf15f6
|
|
150
214
|
remote: https://github.com/ruby/gem_rbs_collection.git
|
|
151
215
|
repo_dir: gems
|
|
152
216
|
- name: rake
|
|
@@ -154,23 +218,39 @@ gems:
|
|
|
154
218
|
source:
|
|
155
219
|
type: git
|
|
156
220
|
name: ruby/gem_rbs_collection
|
|
157
|
-
revision:
|
|
221
|
+
revision: 9e17daa08b1710667699a208981cffd21dbf15f6
|
|
158
222
|
remote: https://github.com/ruby/gem_rbs_collection.git
|
|
159
223
|
repo_dir: gems
|
|
160
224
|
- name: rdoc
|
|
161
225
|
version: '0'
|
|
162
226
|
source:
|
|
163
227
|
type: stdlib
|
|
228
|
+
- name: securerandom
|
|
229
|
+
version: '0'
|
|
230
|
+
source:
|
|
231
|
+
type: stdlib
|
|
164
232
|
- name: singleton
|
|
165
233
|
version: '0'
|
|
166
234
|
source:
|
|
167
235
|
type: stdlib
|
|
236
|
+
- name: socket
|
|
237
|
+
version: '0'
|
|
238
|
+
source:
|
|
239
|
+
type: stdlib
|
|
240
|
+
- name: stringio
|
|
241
|
+
version: '0'
|
|
242
|
+
source:
|
|
243
|
+
type: stdlib
|
|
244
|
+
- name: tempfile
|
|
245
|
+
version: '0'
|
|
246
|
+
source:
|
|
247
|
+
type: stdlib
|
|
168
248
|
- name: thor
|
|
169
249
|
version: '1.2'
|
|
170
250
|
source:
|
|
171
251
|
type: git
|
|
172
252
|
name: ruby/gem_rbs_collection
|
|
173
|
-
revision:
|
|
253
|
+
revision: 9e17daa08b1710667699a208981cffd21dbf15f6
|
|
174
254
|
remote: https://github.com/ruby/gem_rbs_collection.git
|
|
175
255
|
repo_dir: gems
|
|
176
256
|
- name: time
|
|
@@ -185,4 +265,24 @@ gems:
|
|
|
185
265
|
version: '0'
|
|
186
266
|
source:
|
|
187
267
|
type: stdlib
|
|
268
|
+
- name: tzinfo
|
|
269
|
+
version: '2.0'
|
|
270
|
+
source:
|
|
271
|
+
type: git
|
|
272
|
+
name: ruby/gem_rbs_collection
|
|
273
|
+
revision: 9e17daa08b1710667699a208981cffd21dbf15f6
|
|
274
|
+
remote: https://github.com/ruby/gem_rbs_collection.git
|
|
275
|
+
repo_dir: gems
|
|
276
|
+
- name: uri
|
|
277
|
+
version: '0'
|
|
278
|
+
source:
|
|
279
|
+
type: stdlib
|
|
280
|
+
- name: zeitwerk
|
|
281
|
+
version: '2.8'
|
|
282
|
+
source:
|
|
283
|
+
type: git
|
|
284
|
+
name: ruby/gem_rbs_collection
|
|
285
|
+
revision: 9e17daa08b1710667699a208981cffd21dbf15f6
|
|
286
|
+
remote: https://github.com/ruby/gem_rbs_collection.git
|
|
287
|
+
repo_dir: gems
|
|
188
288
|
gemfile_lock_path: Gemfile.lock
|
data/rbs_collection.yaml
CHANGED
|
@@ -2,7 +2,9 @@
|
|
|
2
2
|
sources:
|
|
3
3
|
- name: ruby/gem_rbs_collection
|
|
4
4
|
remote: https://github.com/ruby/gem_rbs_collection.git
|
|
5
|
-
|
|
5
|
+
# To refresh upstream signatures, update this SHA, then run:
|
|
6
|
+
# bundle exec rbs collection update && bundle exec rbs collection install
|
|
7
|
+
revision: 9e17daa08b1710667699a208981cffd21dbf15f6
|
|
6
8
|
repo_dir: gems
|
|
7
9
|
|
|
8
10
|
# A directory to install the downloaded RBSs
|
|
@@ -2,11 +2,15 @@ module Scenic
|
|
|
2
2
|
module Generators
|
|
3
3
|
module View
|
|
4
4
|
class CascadeGenerator < Scenic::Generators::ViewGenerator
|
|
5
|
+
@dependents: Array[Scenic::Cascade::ViewWithVersion]?
|
|
6
|
+
|
|
7
|
+
def create_view_definition: -> void
|
|
5
8
|
def create_migration_file: -> void
|
|
6
9
|
|
|
7
10
|
private
|
|
8
11
|
|
|
9
12
|
def dependents: -> Array[Scenic::Cascade::ViewWithVersion]
|
|
13
|
+
def view_with_version_for: (Scenic::Cascade::Dependency) -> Scenic::Cascade::ViewWithVersion
|
|
10
14
|
end
|
|
11
15
|
end
|
|
12
16
|
end
|
|
@@ -2,13 +2,18 @@ module Scenic
|
|
|
2
2
|
module Generators
|
|
3
3
|
class ViewGenerator
|
|
4
4
|
def self.source_root: (String?) -> void
|
|
5
|
-
def plural_name: -> String
|
|
6
|
-
def plural_file_name: -> String
|
|
7
5
|
def migration_template: (String, String) -> void
|
|
8
6
|
|
|
7
|
+
def create_view_definition: -> void
|
|
8
|
+
def version: -> Integer
|
|
9
|
+
|
|
10
|
+
private
|
|
11
|
+
|
|
12
|
+
def plural_name: -> String
|
|
13
|
+
def plural_file_name: -> String
|
|
9
14
|
def creating_new_view?: -> bool
|
|
15
|
+
def destroying?: -> bool
|
|
10
16
|
def destroying_initial_view?: -> bool
|
|
11
|
-
def version: -> String
|
|
12
17
|
end
|
|
13
18
|
end
|
|
14
19
|
end
|
data/sig/scenic/cascade/view.rbs
CHANGED
data/sig/scenic/cascade.rbs
CHANGED
|
@@ -2,7 +2,7 @@ module Scenic
|
|
|
2
2
|
module Cascade
|
|
3
3
|
VERSION: String
|
|
4
4
|
|
|
5
|
-
def self.find_definitions_of: (String) -> Scenic::Definition
|
|
5
|
+
def self.find_definitions_of: (String) -> Array[Scenic::Definition]
|
|
6
6
|
def self.find_latest_definition_of: (String) -> Scenic::Definition
|
|
7
7
|
|
|
8
8
|
def self.view_dependents_of: (String, ?recursive: bool) -> Array[Dependency]
|
data/sig/scenic/definition.rbs
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: scenic-cascade
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Akiomi Kamakura
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: exe
|
|
10
9
|
cert_chain: []
|
|
11
|
-
date:
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
12
11
|
dependencies:
|
|
13
12
|
- !ruby/object:Gem::Dependency
|
|
14
13
|
name: scenic
|
|
@@ -79,7 +78,6 @@ metadata:
|
|
|
79
78
|
source_code_uri: https://github.com/akiomik/scenic-cascade
|
|
80
79
|
changelog_uri: https://github.com/akiomik/scenic-cascade/blob/main/CHANGELOG.md
|
|
81
80
|
rubygems_mfa_required: 'true'
|
|
82
|
-
post_install_message:
|
|
83
81
|
rdoc_options: []
|
|
84
82
|
require_paths:
|
|
85
83
|
- lib
|
|
@@ -94,8 +92,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
94
92
|
- !ruby/object:Gem::Version
|
|
95
93
|
version: '0'
|
|
96
94
|
requirements: []
|
|
97
|
-
rubygems_version: 3.
|
|
98
|
-
signing_key:
|
|
95
|
+
rubygems_version: 3.6.9
|
|
99
96
|
specification_version: 4
|
|
100
97
|
summary: A migration scenic file generator that supports cascading view updates
|
|
101
98
|
test_files: []
|