scenic-cascade 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. checksums.yaml +7 -0
  2. data/.dockerignore +6 -0
  3. data/.env +4 -0
  4. data/.rspec +3 -0
  5. data/.rubocop.yml +24 -0
  6. data/.ruby-version +1 -0
  7. data/CHANGELOG.md +5 -0
  8. data/CODE_OF_CONDUCT.md +84 -0
  9. data/Dockerfile +6 -0
  10. data/Gemfile +20 -0
  11. data/Gemfile.lock +231 -0
  12. data/LICENSE +201 -0
  13. data/README.md +95 -0
  14. data/Rakefile +22 -0
  15. data/Steepfile +9 -0
  16. data/docker-compose.yml +16 -0
  17. data/lib/generators/scenic/view/cascade/USAGE +15 -0
  18. data/lib/generators/scenic/view/cascade/cascade_generator.rb +38 -0
  19. data/lib/generators/scenic/view/cascade/templates/db/migrate/create_view.rb.erb +7 -0
  20. data/lib/generators/scenic/view/cascade/templates/db/migrate/update_view.rb.erb +26 -0
  21. data/lib/scenic/cascade/definition_finder.rb +41 -0
  22. data/lib/scenic/cascade/dependency.rb +37 -0
  23. data/lib/scenic/cascade/dependency_finder.rb +51 -0
  24. data/lib/scenic/cascade/dependent_finder.rb +53 -0
  25. data/lib/scenic/cascade/version.rb +7 -0
  26. data/lib/scenic/cascade/view.rb +36 -0
  27. data/lib/scenic/cascade/view_with_version.rb +34 -0
  28. data/lib/scenic/cascade.rb +18 -0
  29. data/manifest.yaml +2 -0
  30. data/rbs_collection.lock.yaml +188 -0
  31. data/rbs_collection.yaml +15 -0
  32. data/sig/generators/scenic/view/cascade/cascade_generator.rbs +13 -0
  33. data/sig/generators/scenic/view/view_generator.rbs +14 -0
  34. data/sig/scenic/cascade/definition_finder.rbs +14 -0
  35. data/sig/scenic/cascade/dependency.rbs +22 -0
  36. data/sig/scenic/cascade/dependency_finder.rbs +11 -0
  37. data/sig/scenic/cascade/dependent_finder.rbs +12 -0
  38. data/sig/scenic/cascade/view.rbs +21 -0
  39. data/sig/scenic/cascade/view_with_version.rbs +17 -0
  40. data/sig/scenic/cascade.rbs +13 -0
  41. data/sig/scenic/definition.rbs +9 -0
  42. metadata +101 -0
@@ -0,0 +1,188 @@
1
+ ---
2
+ path: ".gem_rbs_collection"
3
+ gems:
4
+ - name: actionpack
5
+ version: '6.0'
6
+ source:
7
+ type: git
8
+ name: ruby/gem_rbs_collection
9
+ revision: 73137fe17c719cf52eaf099d541c0fbd9192500e
10
+ remote: https://github.com/ruby/gem_rbs_collection.git
11
+ repo_dir: gems
12
+ - name: actionview
13
+ version: '6.0'
14
+ source:
15
+ type: git
16
+ name: ruby/gem_rbs_collection
17
+ revision: 73137fe17c719cf52eaf099d541c0fbd9192500e
18
+ remote: https://github.com/ruby/gem_rbs_collection.git
19
+ repo_dir: gems
20
+ - name: activemodel
21
+ version: '6.0'
22
+ source:
23
+ type: git
24
+ name: ruby/gem_rbs_collection
25
+ revision: 73137fe17c719cf52eaf099d541c0fbd9192500e
26
+ remote: https://github.com/ruby/gem_rbs_collection.git
27
+ repo_dir: gems
28
+ - name: activerecord
29
+ version: '6.1'
30
+ source:
31
+ type: git
32
+ name: ruby/gem_rbs_collection
33
+ revision: 73137fe17c719cf52eaf099d541c0fbd9192500e
34
+ remote: https://github.com/ruby/gem_rbs_collection.git
35
+ repo_dir: gems
36
+ - name: activesupport
37
+ version: '6.0'
38
+ source:
39
+ type: git
40
+ name: ruby/gem_rbs_collection
41
+ revision: 73137fe17c719cf52eaf099d541c0fbd9192500e
42
+ remote: https://github.com/ruby/gem_rbs_collection.git
43
+ repo_dir: gems
44
+ - name: base64
45
+ version: '0'
46
+ source:
47
+ type: stdlib
48
+ - name: bigdecimal
49
+ version: '0'
50
+ source:
51
+ type: stdlib
52
+ - name: concurrent-ruby
53
+ version: '1.1'
54
+ source:
55
+ type: git
56
+ name: ruby/gem_rbs_collection
57
+ revision: 20e6e0f0685139dbd29df50e03367e222aa5d1b8
58
+ remote: https://github.com/ruby/gem_rbs_collection.git
59
+ repo_dir: gems
60
+ - name: connection_pool
61
+ version: '2.4'
62
+ source:
63
+ type: git
64
+ name: ruby/gem_rbs_collection
65
+ revision: 20e6e0f0685139dbd29df50e03367e222aa5d1b8
66
+ remote: https://github.com/ruby/gem_rbs_collection.git
67
+ repo_dir: gems
68
+ - name: date
69
+ version: '0'
70
+ source:
71
+ type: stdlib
72
+ - name: dbm
73
+ version: '0'
74
+ source:
75
+ type: stdlib
76
+ - name: fileutils
77
+ version: '0'
78
+ source:
79
+ type: stdlib
80
+ - name: i18n
81
+ version: '1.10'
82
+ source:
83
+ type: git
84
+ name: ruby/gem_rbs_collection
85
+ revision: 73137fe17c719cf52eaf099d541c0fbd9192500e
86
+ remote: https://github.com/ruby/gem_rbs_collection.git
87
+ repo_dir: gems
88
+ - name: io-console
89
+ version: '0'
90
+ source:
91
+ type: stdlib
92
+ - name: logger
93
+ version: '0'
94
+ source:
95
+ type: stdlib
96
+ - name: minitest
97
+ version: '0'
98
+ source:
99
+ type: stdlib
100
+ - name: monitor
101
+ version: '0'
102
+ source:
103
+ type: stdlib
104
+ - name: mutex_m
105
+ version: '0'
106
+ source:
107
+ type: stdlib
108
+ - name: nokogiri
109
+ version: '1.11'
110
+ source:
111
+ type: git
112
+ name: ruby/gem_rbs_collection
113
+ revision: 73137fe17c719cf52eaf099d541c0fbd9192500e
114
+ remote: https://github.com/ruby/gem_rbs_collection.git
115
+ repo_dir: gems
116
+ - name: pathname
117
+ version: '0'
118
+ source:
119
+ type: stdlib
120
+ - name: pstore
121
+ version: '0'
122
+ source:
123
+ type: stdlib
124
+ - name: psych
125
+ version: '0'
126
+ source:
127
+ type: stdlib
128
+ - name: rack
129
+ version: 2.2.2
130
+ source:
131
+ type: git
132
+ name: ruby/gem_rbs_collection
133
+ revision: 73137fe17c719cf52eaf099d541c0fbd9192500e
134
+ remote: https://github.com/ruby/gem_rbs_collection.git
135
+ repo_dir: gems
136
+ - name: rails-dom-testing
137
+ version: '2.0'
138
+ source:
139
+ type: git
140
+ name: ruby/gem_rbs_collection
141
+ revision: 20e6e0f0685139dbd29df50e03367e222aa5d1b8
142
+ remote: https://github.com/ruby/gem_rbs_collection.git
143
+ repo_dir: gems
144
+ - name: railties
145
+ version: '6.0'
146
+ source:
147
+ type: git
148
+ name: ruby/gem_rbs_collection
149
+ revision: 73137fe17c719cf52eaf099d541c0fbd9192500e
150
+ remote: https://github.com/ruby/gem_rbs_collection.git
151
+ repo_dir: gems
152
+ - name: rake
153
+ version: '13.0'
154
+ source:
155
+ type: git
156
+ name: ruby/gem_rbs_collection
157
+ revision: 20e6e0f0685139dbd29df50e03367e222aa5d1b8
158
+ remote: https://github.com/ruby/gem_rbs_collection.git
159
+ repo_dir: gems
160
+ - name: rdoc
161
+ version: '0'
162
+ source:
163
+ type: stdlib
164
+ - name: singleton
165
+ version: '0'
166
+ source:
167
+ type: stdlib
168
+ - name: thor
169
+ version: '1.2'
170
+ source:
171
+ type: git
172
+ name: ruby/gem_rbs_collection
173
+ revision: 20e6e0f0685139dbd29df50e03367e222aa5d1b8
174
+ remote: https://github.com/ruby/gem_rbs_collection.git
175
+ repo_dir: gems
176
+ - name: time
177
+ version: '0'
178
+ source:
179
+ type: stdlib
180
+ - name: timeout
181
+ version: '0'
182
+ source:
183
+ type: stdlib
184
+ - name: tsort
185
+ version: '0'
186
+ source:
187
+ type: stdlib
188
+ gemfile_lock_path: Gemfile.lock
@@ -0,0 +1,15 @@
1
+ # Download sources
2
+ sources:
3
+ - name: ruby/gem_rbs_collection
4
+ remote: https://github.com/ruby/gem_rbs_collection.git
5
+ revision: main
6
+ repo_dir: gems
7
+
8
+ # A directory to install the downloaded RBSs
9
+ path: .gem_rbs_collection
10
+
11
+ gems:
12
+ # Skip loading rbs gem's RBS.
13
+ # It's unnecessary if you don't use rbs as a library.
14
+ - name: rbs
15
+ ignore: true
@@ -0,0 +1,13 @@
1
+ module Scenic
2
+ module Generators
3
+ module View
4
+ class CascadeGenerator < Scenic::Generators::ViewGenerator
5
+ def create_migration_file: -> void
6
+
7
+ private
8
+
9
+ def dependents: -> Array[Scenic::Cascade::ViewWithVersion]
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,14 @@
1
+ module Scenic
2
+ module Generators
3
+ class ViewGenerator
4
+ def self.source_root: (String?) -> void
5
+ def plural_name: -> String
6
+ def plural_file_name: -> String
7
+ def migration_template: (String, String) -> void
8
+
9
+ def creating_new_view?: -> bool
10
+ def destroying_initial_view?: -> bool
11
+ def version: -> String
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ module Scenic
2
+ module Cascade
3
+ module DefinitionFinder
4
+ module ClassMethods
5
+ def find_definitions_of: (String) -> Array[Scenic::Definition]
6
+ def find_latest_definition_of: (String) -> Scenic::Definition
7
+
8
+ private
9
+
10
+ def go: (String, Integer) -> Array[Scenic::Definition]
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,22 @@
1
+ module Scenic
2
+ module Cascade
3
+ interface _DependencyLike
4
+ def from: -> Scenic::Cascade::View
5
+ def to: -> Scenic::Cascade::View
6
+ end
7
+
8
+ class Dependency
9
+ attr_reader from: Scenic::Cascade::View
10
+ attr_reader to: Scenic::Cascade::View
11
+
12
+ def initialize: (from: Scenic::Cascade::View, to: Scenic::Cascade::View) -> void
13
+
14
+ def ==: (_DependencyLike) -> bool
15
+
16
+ def to_s: -> String
17
+ def inspect: -> String
18
+
19
+ def self.from_hash: ({ 'from' => String, 'from_materialized' => bool, 'to' => String, 'to_materialized' => bool }) -> Dependency
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,11 @@
1
+ module Scenic
2
+ module Cascade
3
+ module DependencyFinder
4
+ module ClassMethods
5
+ DEPENDENCY_SQL: String
6
+
7
+ def view_dependencies_of: (String, ?recursive: bool) -> Array[Scenic::Cascade::Dependency]
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,12 @@
1
+ module Scenic
2
+ module Cascade
3
+ module DependentFinder
4
+ module ClassMethods
5
+ DEPENDANT_SQL: String
6
+
7
+ def view_dependents_of: (String, ?recursive: bool) -> Array[Scenic::Cascade::Dependency]
8
+ alias view_dependants_of view_dependents_of
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,21 @@
1
+ module Scenic
2
+ module Cascade
3
+ interface _ViewLike
4
+ def name: -> String
5
+ def materialized?: -> bool
6
+ end
7
+
8
+ class View
9
+ attr_reader name: String
10
+
11
+ def initialize: (name: String, materialized: bool) -> void
12
+
13
+ def materialized?: -> bool
14
+
15
+ def ==: (_ViewLike) -> bool
16
+
17
+ def to_s: -> String
18
+ def inspect: -> String
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,17 @@
1
+ module Scenic
2
+ module Cascade
3
+ interface _ViewWithVersionLike
4
+ def name: -> String
5
+ def version: -> Integer
6
+ def materialized?: -> bool
7
+ end
8
+
9
+ class ViewWithVersion < Scenic::Cascade::View
10
+ attr_reader version: Integer
11
+
12
+ def initialize: (name: String, version: Integer, materialized: bool) -> void
13
+
14
+ def ==: (_ViewWithVersionLike) -> bool
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,13 @@
1
+ module Scenic
2
+ module Cascade
3
+ VERSION: String
4
+
5
+ def self.find_definitions_of: (String) -> Scenic::Definition
6
+ def self.find_latest_definition_of: (String) -> Scenic::Definition
7
+
8
+ def self.view_dependents_of: (String, ?recursive: bool) -> Array[Dependency]
9
+ alias self.view_dependants_of self.view_dependents_of
10
+
11
+ def self.view_dependencies_of: (String, ?recursive: bool) -> Array[Dependency]
12
+ end
13
+ end
@@ -0,0 +1,9 @@
1
+ module Scenic
2
+ module Definition
3
+ def self.new: (String, Integer) -> Scenic::Definition
4
+
5
+ def full_path: -> Pathname
6
+
7
+ def version: -> String
8
+ end
9
+ end
metadata ADDED
@@ -0,0 +1,101 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: scenic-cascade
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Akiomi Kamakura
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2023-12-11 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: scenic
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.0'
27
+ description: A migration scenic file generator that supports cascading view updates
28
+ email:
29
+ - akiomik@gmail.com
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - ".dockerignore"
35
+ - ".env"
36
+ - ".rspec"
37
+ - ".rubocop.yml"
38
+ - ".ruby-version"
39
+ - CHANGELOG.md
40
+ - CODE_OF_CONDUCT.md
41
+ - Dockerfile
42
+ - Gemfile
43
+ - Gemfile.lock
44
+ - LICENSE
45
+ - README.md
46
+ - Rakefile
47
+ - Steepfile
48
+ - docker-compose.yml
49
+ - lib/generators/scenic/view/cascade/USAGE
50
+ - lib/generators/scenic/view/cascade/cascade_generator.rb
51
+ - lib/generators/scenic/view/cascade/templates/db/migrate/create_view.rb.erb
52
+ - lib/generators/scenic/view/cascade/templates/db/migrate/update_view.rb.erb
53
+ - lib/scenic/cascade.rb
54
+ - lib/scenic/cascade/definition_finder.rb
55
+ - lib/scenic/cascade/dependency.rb
56
+ - lib/scenic/cascade/dependency_finder.rb
57
+ - lib/scenic/cascade/dependent_finder.rb
58
+ - lib/scenic/cascade/version.rb
59
+ - lib/scenic/cascade/view.rb
60
+ - lib/scenic/cascade/view_with_version.rb
61
+ - manifest.yaml
62
+ - rbs_collection.lock.yaml
63
+ - rbs_collection.yaml
64
+ - sig/generators/scenic/view/cascade/cascade_generator.rbs
65
+ - sig/generators/scenic/view/view_generator.rbs
66
+ - sig/scenic/cascade.rbs
67
+ - sig/scenic/cascade/definition_finder.rbs
68
+ - sig/scenic/cascade/dependency.rbs
69
+ - sig/scenic/cascade/dependency_finder.rbs
70
+ - sig/scenic/cascade/dependent_finder.rbs
71
+ - sig/scenic/cascade/view.rbs
72
+ - sig/scenic/cascade/view_with_version.rbs
73
+ - sig/scenic/definition.rbs
74
+ homepage: https://github.com/akiomik/scenic-cascade
75
+ licenses:
76
+ - Apache-2.0
77
+ metadata:
78
+ homepage_uri: https://github.com/akiomik/scenic-cascade
79
+ source_code_uri: https://github.com/akiomik/scenic-cascade
80
+ changelog_uri: https://github.com/akiomik/scenic-cascade/blob/main/CHANGELOG.md
81
+ rubygems_mfa_required: 'true'
82
+ post_install_message:
83
+ rdoc_options: []
84
+ require_paths:
85
+ - lib
86
+ required_ruby_version: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: 2.6.0
91
+ required_rubygems_version: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ requirements: []
97
+ rubygems_version: 3.4.10
98
+ signing_key:
99
+ specification_version: 4
100
+ summary: A migration scenic file generator that supports cascading view updates
101
+ test_files: []