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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3e010bca8b6f02381affd7c850ede8e7acae433e954eecb9b32ce470a8b7e6b4
4
- data.tar.gz: a94efebeb831520dae0617e239cbbc04d76a2bf534566b425660aaac48a9612c
3
+ metadata.gz: 9d210342197b949abc4156e8fcdc63ad74b04f1fde40fb207e35dc15b13e1efd
4
+ data.tar.gz: 60c19c6113bc29ebc57c068ef16d744661f33f9bdd06a763807b807e41d3f66f
5
5
  SHA512:
6
- metadata.gz: 5bd1f8ea0884e2658f273d0a59f76fa98bafa7c81486a9cae7e9f5ab25637b34b235ba56faa7411febca5b1ddf024f7d23ccb28726bb37604fdff43dfd6936db
7
- data.tar.gz: 4f721cdb87bc744afe6d92f66e3a4456e2a775b6da664b9384c4ae412178417fbc98aebc6d4518aa4c9f454ace61c3a72aa87b9b9c147654a9d9ac4d4cf74cc4
6
+ metadata.gz: 9040765c0fdadb9778139f634883a09466ddf80d8b63bf28c8b358150e0d4e6eb45556bb3d926c9e458c7e3fd8bf9deb7b8863d6a80694163f6b73643654ee09
7
+ data.tar.gz: 05ea8516e444b9c07cba0a8813af3985295897ce11c90790ca407eb5aa81d5d250e937d334269f5b87c797ee932a2ae7e1e09cff92d82c9a7041f89c35cbd06e
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 3.2.2
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.0] - 2022-07-08
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
- - Initial release
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-alpine
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
- gem 'steep', require: false
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.0)
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
- abbrev (0.1.1)
11
- actionpack (7.1.2)
12
- actionview (= 7.1.2)
13
- activesupport (= 7.1.2)
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.2)
22
- activesupport (= 7.1.2)
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.2)
28
- activesupport (= 7.1.2)
29
- activerecord (7.1.2)
30
- activemodel (= 7.1.2)
31
- activesupport (= 7.1.2)
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.2)
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
- concurrent-ruby (1.2.2)
56
+ cgi (0.5.2)
57
+ concurrent-ruby (1.3.7)
52
58
  connection_pool (2.4.1)
53
- crass (1.0.6)
54
- csv (3.2.8)
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.16.3)
64
- fileutils (1.7.2)
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.3)
73
- listen (3.8.0)
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.22.0)
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.2.0)
82
- nokogiri (1.15.5-aarch64-linux)
91
+ mutex_m (0.3.0)
92
+ nokogiri (1.18.10-aarch64-linux-musl)
83
93
  racc (~> 1.4)
84
- nokogiri (1.15.5-arm64-darwin)
94
+ nokogiri (1.18.10-arm64-darwin)
85
95
  racc (~> 1.4)
86
- nokogiri (1.15.5-x86_64-linux)
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.1.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.2)
112
- actionpack (= 7.1.2)
113
- activesupport (= 7.1.2)
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.10.1)
134
+ rb-inotify (0.11.1)
123
135
  ffi (~> 1.0)
124
- rbs (3.3.2)
125
- abbrev
126
- rdoc (6.6.1)
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.2.6)
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.7.0)
194
+ scenic (1.9.0)
182
195
  activerecord (>= 4.0.0)
183
196
  railties (>= 4.0.0)
184
197
  securerandom (0.3.0)
185
- steep (1.6.0)
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.15, < 4.0)
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 (>= 3.1.0)
219
+ rbs (~> 3.9)
197
220
  securerandom (>= 0.1)
198
221
  strscan (>= 1.0.0)
199
- terminal-table (>= 2, < 4)
200
- stringio (3.1.0)
201
- strscan (3.0.7)
202
- terminal-table (3.0.2)
203
- unicode-display_width (>= 1.1.1, < 3)
204
- thor (1.3.0)
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
- webrick (1.8.1)
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
- steep
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
+ [![Gem Version](https://badge.fury.io/rb/scenic-cascade.svg)](https://badge.fury.io/rb/scenic-cascade)
3
4
  [![Ruby](https://github.com/akiomik/scenic-cascade/actions/workflows/ci.yml/badge.svg)](https://github.com/akiomik/scenic-cascade/actions/workflows/ci.yml)
5
+ [![codecov](https://codecov.io/gh/akiomik/scenic-cascade/graph/badge.svg?token=SEHF4ZDZIY)](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 the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
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,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- target :lib
3
+ target :lib do
4
+ signature 'sig'
5
+ check 'lib'
6
+ end
4
7
 
5
8
  # target :test do
6
9
  # signature "sig", "sig-private"
@@ -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
- return @dependents if @dependents.present?
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
- @dependents ||= deps.map do |dep|
29
- name = dep.from.name
30
- version = Scenic::Cascade.find_latest_definition_of(name).version.to_i
31
- is_materialized = dep.from.materialized?
32
- Scenic::Cascade::ViewWithVersion.new(name: name, version: version, materialized: is_materialized)
33
- end.uniq
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
- go(view_name, 1)
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 go(view_name, version)
33
- definition = Scenic::Definition.new(view_name, version)
34
- return [] unless File.exist?(definition.full_path)
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
- [definition, *go(view_name, version + 1)]
47
+ raise ArgumentError, "Noncanonical view definition #{path}; expected #{definition.full_path}"
37
48
  end
38
49
  end
39
50
  end
@@ -42,7 +42,7 @@ module Scenic
42
42
  return dependencies unless recursive
43
43
 
44
44
  dependencies.flat_map do |dependency|
45
- [dependency, *view_dependencies_of(dependency.to.name)]
45
+ [dependency, *view_dependencies_of(dependency.to.name, recursive: true)]
46
46
  end
47
47
  end
48
48
  end
@@ -42,7 +42,7 @@ module Scenic
42
42
  return dependencies unless recursive
43
43
 
44
44
  dependencies.flat_map do |dependency|
45
- [dependency, *view_dependents_of(dependency.from.name)]
45
+ [dependency, *view_dependents_of(dependency.from.name, recursive: true)]
46
46
  end
47
47
  end
48
48
 
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Scenic
4
4
  module Cascade
5
- VERSION = '0.1.0'
5
+ VERSION = '0.1.2'
6
6
  end
7
7
  end
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative 'view'
4
+
3
5
  module Scenic
4
6
  module Cascade
5
7
  # Represents a view with version
@@ -1,6 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'active_record'
4
+ # Scenic 1.9 uses TSort while loading but does not require it.
5
+ require 'tsort'
4
6
  require 'scenic'
5
7
 
6
8
  require_relative 'cascade/version'
@@ -6,7 +6,7 @@ gems:
6
6
  source:
7
7
  type: git
8
8
  name: ruby/gem_rbs_collection
9
- revision: 73137fe17c719cf52eaf099d541c0fbd9192500e
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: 73137fe17c719cf52eaf099d541c0fbd9192500e
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: '6.0'
21
+ version: '7.1'
22
22
  source:
23
23
  type: git
24
24
  name: ruby/gem_rbs_collection
25
- revision: 73137fe17c719cf52eaf099d541c0fbd9192500e
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: '6.1'
29
+ version: '7.1'
30
30
  source:
31
31
  type: git
32
32
  name: ruby/gem_rbs_collection
33
- revision: 73137fe17c719cf52eaf099d541c0fbd9192500e
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: '6.0'
37
+ version: '7.0'
38
38
  source:
39
39
  type: git
40
40
  name: ruby/gem_rbs_collection
41
- revision: 73137fe17c719cf52eaf099d541c0fbd9192500e
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: '0'
57
+ version: '3.1'
50
58
  source:
51
- type: stdlib
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: 20e6e0f0685139dbd29df50e03367e222aa5d1b8
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: 20e6e0f0685139dbd29df50e03367e222aa5d1b8
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: 73137fe17c719cf52eaf099d541c0fbd9192500e
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: '0'
137
+ version: '5.25'
98
138
  source:
99
- type: stdlib
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: '0'
149
+ version: 0.3.0
106
150
  source:
107
- type: stdlib
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: 73137fe17c719cf52eaf099d541c0fbd9192500e
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.2
185
+ version: '2.2'
130
186
  source:
131
187
  type: git
132
188
  name: ruby/gem_rbs_collection
133
- revision: 73137fe17c719cf52eaf099d541c0fbd9192500e
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: 20e6e0f0685139dbd29df50e03367e222aa5d1b8
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: 73137fe17c719cf52eaf099d541c0fbd9192500e
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: 20e6e0f0685139dbd29df50e03367e222aa5d1b8
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: 20e6e0f0685139dbd29df50e03367e222aa5d1b8
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
- revision: main
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
@@ -7,7 +7,7 @@ module Scenic
7
7
 
8
8
  private
9
9
 
10
- def go: (String, Integer) -> Array[Scenic::Definition]
10
+ def definition_at: (Pathname, String, String) -> Scenic::Definition?
11
11
  end
12
12
  end
13
13
  end
@@ -7,10 +7,12 @@ module Scenic
7
7
 
8
8
  class View
9
9
  attr_reader name: String
10
+ @materialized: bool
10
11
 
11
12
  def initialize: (name: String, materialized: bool) -> void
12
13
 
13
14
  def materialized?: -> bool
15
+ def formatted_name: -> String
14
16
 
15
17
  def ==: (_ViewLike) -> bool
16
18
 
@@ -12,6 +12,10 @@ module Scenic
12
12
  def initialize: (name: String, version: Integer, materialized: bool) -> void
13
13
 
14
14
  def ==: (_ViewWithVersionLike) -> bool
15
+
16
+ private
17
+
18
+ def formatted_version: -> String
15
19
  end
16
20
  end
17
21
  end
@@ -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]
@@ -1,5 +1,5 @@
1
1
  module Scenic
2
- module Definition
2
+ class Definition
3
3
  def self.new: (String, Integer) -> Scenic::Definition
4
4
 
5
5
  def full_path: -> Pathname
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.0
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: 2023-12-11 00:00:00.000000000 Z
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.4.10
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: []