metka 2.3.4 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/lint_code.yml +9 -6
  3. data/.github/workflows/lint_docs.yml +15 -16
  4. data/.github/workflows/release.yml +23 -0
  5. data/.github/workflows/tests.yml +97 -0
  6. data/.gitignore +16 -7
  7. data/.rubocop.yml +8 -16
  8. data/.ruby-version +1 -1
  9. data/Gemfile +1 -1
  10. data/README.md +273 -236
  11. data/Rakefile +9 -4
  12. data/assets/metka-icon.svg +23 -0
  13. data/assets/metka-logo.svg +28 -0
  14. data/benchmark/Gemfile +17 -0
  15. data/benchmark/README.md +170 -0
  16. data/benchmark/benchmark.rb +718 -0
  17. data/benchmark/results.sqlite.txt +131 -0
  18. data/benchmark/results.txt +150 -0
  19. data/bin/setup +7 -0
  20. data/docs/superpowers/plans/2026-08-18-cloud-table-naming.md +316 -0
  21. data/docs/superpowers/specs/2026-08-18-cloud-table-naming-design.md +105 -0
  22. data/forspell.dict +3 -1
  23. data/gemfiles/rails71.gemfile +6 -0
  24. data/gemfiles/rails72.gemfile +6 -0
  25. data/gemfiles/rails80.gemfile +6 -0
  26. data/gemfiles/rails81.gemfile +6 -0
  27. data/gemfiles/rubocop.gemfile +2 -2
  28. data/lib/generators/metka/strategies/index/index_generator.rb +77 -0
  29. data/lib/generators/metka/strategies/index/templates/migration.rb.erb +89 -0
  30. data/lib/generators/metka/strategies/table/table_generator.rb +83 -0
  31. data/lib/generators/metka/strategies/table/templates/migration.rb.erb +128 -0
  32. data/lib/generators/metka/strategies/table/templates/migration.sqlite.rb.erb +93 -0
  33. data/lib/metka/generic_parser.rb +28 -14
  34. data/lib/metka/model.rb +121 -51
  35. data/lib/metka/query_builder.rb +45 -49
  36. data/lib/metka/tag_list.rb +16 -8
  37. data/lib/metka/tags_query.rb +93 -0
  38. data/lib/metka/version.rb +1 -1
  39. data/lib/metka.rb +24 -10
  40. data/metka.gemspec +21 -17
  41. metadata +43 -104
  42. data/.github/workflows/specs.yml +0 -86
  43. data/.rspec +0 -2
  44. data/Gemfile.lock +0 -239
  45. data/gemfiles/rails52.gemfile +0 -6
  46. data/gemfiles/rails6.gemfile +0 -6
  47. data/gemfiles/rails61.gemfile +0 -6
  48. data/lib/generators/metka/strategies/materialized_view/materialized_view_generator.rb +0 -73
  49. data/lib/generators/metka/strategies/materialized_view/templates/migration.rb.erb +0 -54
  50. data/lib/generators/metka/strategies/view/templates/migration.rb.erb +0 -26
  51. data/lib/generators/metka/strategies/view/view_generator.rb +0 -70
  52. data/lib/metka/query_builder/all_tags_query.rb +0 -11
  53. data/lib/metka/query_builder/any_tags_query.rb +0 -11
  54. data/lib/metka/query_builder/base_query.rb +0 -48
metadata CHANGED
@@ -1,58 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: metka
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.4
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Igor Alexandrov
8
8
  - Andrey Morozov
9
- autorequire:
10
9
  bindir: exe
11
10
  cert_chain: []
12
- date: 2022-01-09 00:00:00.000000000 Z
11
+ date: 1980-01-02 00:00:00.000000000 Z
13
12
  dependencies:
14
- - !ruby/object:Gem::Dependency
15
- name: dry-configurable
16
- requirement: !ruby/object:Gem::Requirement
17
- requirements:
18
- - - ">="
19
- - !ruby/object:Gem::Version
20
- version: '0.8'
21
- type: :runtime
22
- prerelease: false
23
- version_requirements: !ruby/object:Gem::Requirement
24
- requirements:
25
- - - ">="
26
- - !ruby/object:Gem::Version
27
- version: '0.8'
28
13
  - !ruby/object:Gem::Dependency
29
14
  name: rails
30
15
  requirement: !ruby/object:Gem::Requirement
31
16
  requirements:
32
17
  - - ">="
33
18
  - !ruby/object:Gem::Version
34
- version: '5.2'
19
+ version: '7.1'
35
20
  type: :runtime
36
21
  prerelease: false
37
22
  version_requirements: !ruby/object:Gem::Requirement
38
23
  requirements:
39
24
  - - ">="
40
25
  - !ruby/object:Gem::Version
41
- version: '5.2'
42
- - !ruby/object:Gem::Dependency
43
- name: ammeter
44
- requirement: !ruby/object:Gem::Requirement
45
- requirements:
46
- - - ">="
47
- - !ruby/object:Gem::Version
48
- version: '1.1'
49
- type: :development
50
- prerelease: false
51
- version_requirements: !ruby/object:Gem::Requirement
52
- requirements:
53
- - - ">="
54
- - !ruby/object:Gem::Version
55
- version: '1.1'
26
+ version: '7.1'
56
27
  - !ruby/object:Gem::Dependency
57
28
  name: pry
58
29
  requirement: !ruby/object:Gem::Requirement
@@ -82,19 +53,19 @@ dependencies:
82
53
  - !ruby/object:Gem::Version
83
54
  version: '1.3'
84
55
  - !ruby/object:Gem::Dependency
85
- name: faker
56
+ name: minitest
86
57
  requirement: !ruby/object:Gem::Requirement
87
58
  requirements:
88
59
  - - ">="
89
60
  - !ruby/object:Gem::Version
90
- version: '2.8'
61
+ version: '5.15'
91
62
  type: :development
92
63
  prerelease: false
93
64
  version_requirements: !ruby/object:Gem::Requirement
94
65
  requirements:
95
66
  - - ">="
96
67
  - !ruby/object:Gem::Version
97
- version: '2.8'
68
+ version: '5.15'
98
69
  - !ruby/object:Gem::Dependency
99
70
  name: pg
100
71
  requirement: !ruby/object:Gem::Requirement
@@ -110,77 +81,35 @@ dependencies:
110
81
  - !ruby/object:Gem::Version
111
82
  version: '1.1'
112
83
  - !ruby/object:Gem::Dependency
113
- name: rake
84
+ name: sqlite3
114
85
  requirement: !ruby/object:Gem::Requirement
115
86
  requirements:
116
87
  - - ">="
117
88
  - !ruby/object:Gem::Version
118
- version: 0.8.7
89
+ version: '2.1'
119
90
  type: :development
120
91
  prerelease: false
121
92
  version_requirements: !ruby/object:Gem::Requirement
122
93
  requirements:
123
94
  - - ">="
124
95
  - !ruby/object:Gem::Version
125
- version: 0.8.7
96
+ version: '2.1'
126
97
  - !ruby/object:Gem::Dependency
127
- name: rspec
128
- requirement: !ruby/object:Gem::Requirement
129
- requirements:
130
- - - ">="
131
- - !ruby/object:Gem::Version
132
- version: '3.9'
133
- type: :development
134
- prerelease: false
135
- version_requirements: !ruby/object:Gem::Requirement
136
- requirements:
137
- - - ">="
138
- - !ruby/object:Gem::Version
139
- version: '3.9'
140
- - !ruby/object:Gem::Dependency
141
- name: rspec-rails
142
- requirement: !ruby/object:Gem::Requirement
143
- requirements:
144
- - - ">="
145
- - !ruby/object:Gem::Version
146
- version: '3.9'
147
- type: :development
148
- prerelease: false
149
- version_requirements: !ruby/object:Gem::Requirement
150
- requirements:
151
- - - ">="
152
- - !ruby/object:Gem::Version
153
- version: '3.9'
154
- - !ruby/object:Gem::Dependency
155
- name: timecop
156
- requirement: !ruby/object:Gem::Requirement
157
- requirements:
158
- - - ">="
159
- - !ruby/object:Gem::Version
160
- version: '0.9'
161
- type: :development
162
- prerelease: false
163
- version_requirements: !ruby/object:Gem::Requirement
164
- requirements:
165
- - - ">="
166
- - !ruby/object:Gem::Version
167
- version: '0.9'
168
- - !ruby/object:Gem::Dependency
169
- name: database_cleaner
98
+ name: rake
170
99
  requirement: !ruby/object:Gem::Requirement
171
100
  requirements:
172
101
  - - ">="
173
102
  - !ruby/object:Gem::Version
174
- version: '1.7'
103
+ version: 0.8.7
175
104
  type: :development
176
105
  prerelease: false
177
106
  version_requirements: !ruby/object:Gem::Requirement
178
107
  requirements:
179
108
  - - ">="
180
109
  - !ruby/object:Gem::Version
181
- version: '1.7'
110
+ version: 0.8.7
182
111
  - !ruby/object:Gem::Dependency
183
- name: jetrockets-standard
112
+ name: rubocop-rails-omakase
184
113
  requirement: !ruby/object:Gem::Requirement
185
114
  requirements:
186
115
  - - ">="
@@ -204,46 +133,57 @@ files:
204
133
  - ".github/ISSUE_TEMPLATE.md"
205
134
  - ".github/workflows/lint_code.yml"
206
135
  - ".github/workflows/lint_docs.yml"
207
- - ".github/workflows/specs.yml"
136
+ - ".github/workflows/release.yml"
137
+ - ".github/workflows/tests.yml"
208
138
  - ".gitignore"
209
139
  - ".mdlrc"
210
- - ".rspec"
211
140
  - ".rubocop-md.yml"
212
141
  - ".rubocop.yml"
213
142
  - ".ruby-version"
214
143
  - CODE_OF_CONDUCT.md
215
144
  - Gemfile
216
- - Gemfile.lock
217
145
  - LICENSE.txt
218
146
  - README.md
219
147
  - Rakefile
148
+ - assets/metka-icon.svg
149
+ - assets/metka-logo.svg
150
+ - benchmark/Gemfile
151
+ - benchmark/README.md
152
+ - benchmark/benchmark.rb
153
+ - benchmark/results.sqlite.txt
154
+ - benchmark/results.txt
220
155
  - bin/console
221
156
  - bin/setup
157
+ - docs/superpowers/plans/2026-08-18-cloud-table-naming.md
158
+ - docs/superpowers/specs/2026-08-18-cloud-table-naming-design.md
222
159
  - forspell.dict
223
- - gemfiles/rails52.gemfile
224
- - gemfiles/rails6.gemfile
225
- - gemfiles/rails61.gemfile
160
+ - gemfiles/rails71.gemfile
161
+ - gemfiles/rails72.gemfile
162
+ - gemfiles/rails80.gemfile
163
+ - gemfiles/rails81.gemfile
226
164
  - gemfiles/railsmain.gemfile
227
165
  - gemfiles/rubocop.gemfile
228
- - lib/generators/metka/strategies/materialized_view/materialized_view_generator.rb
229
- - lib/generators/metka/strategies/materialized_view/templates/migration.rb.erb
230
- - lib/generators/metka/strategies/view/templates/migration.rb.erb
231
- - lib/generators/metka/strategies/view/view_generator.rb
166
+ - lib/generators/metka/strategies/index/index_generator.rb
167
+ - lib/generators/metka/strategies/index/templates/migration.rb.erb
168
+ - lib/generators/metka/strategies/table/table_generator.rb
169
+ - lib/generators/metka/strategies/table/templates/migration.rb.erb
170
+ - lib/generators/metka/strategies/table/templates/migration.sqlite.rb.erb
232
171
  - lib/metka.rb
233
172
  - lib/metka/generic_parser.rb
234
173
  - lib/metka/model.rb
235
174
  - lib/metka/query_builder.rb
236
- - lib/metka/query_builder/all_tags_query.rb
237
- - lib/metka/query_builder/any_tags_query.rb
238
- - lib/metka/query_builder/base_query.rb
239
175
  - lib/metka/tag_list.rb
176
+ - lib/metka/tags_query.rb
240
177
  - lib/metka/version.rb
241
178
  - metka.gemspec
242
- homepage: https://github.com/jetrockets/metka
179
+ homepage: https://github.com/metka-ruby/metka
243
180
  licenses:
244
181
  - MIT
245
- metadata: {}
246
- post_install_message:
182
+ metadata:
183
+ homepage_uri: https://github.com/metka-ruby/metka
184
+ source_code_uri: https://github.com/metka-ruby/metka
185
+ bug_tracker_uri: https://github.com/metka-ruby/metka/issues
186
+ rubygems_mfa_required: 'true'
247
187
  rdoc_options: []
248
188
  require_paths:
249
189
  - lib
@@ -251,15 +191,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
251
191
  requirements:
252
192
  - - ">="
253
193
  - !ruby/object:Gem::Version
254
- version: '2.5'
194
+ version: '3.2'
255
195
  required_rubygems_version: !ruby/object:Gem::Requirement
256
196
  requirements:
257
197
  - - ">="
258
198
  - !ruby/object:Gem::Version
259
199
  version: '0'
260
200
  requirements: []
261
- rubygems_version: 3.1.4
262
- signing_key:
201
+ rubygems_version: 3.6.9
263
202
  specification_version: 4
264
203
  summary: Rails tagging system based on PostgreSQL arrays
265
204
  test_files: []
@@ -1,86 +0,0 @@
1
- name: Specs
2
-
3
- on:
4
- push:
5
- branches:
6
- - master
7
- pull_request:
8
- schedule:
9
- - cron: "0 3 * * 1" # Every monday at 3 AM
10
-
11
- jobs:
12
- rspec:
13
- runs-on: ubuntu-latest
14
- env:
15
- BUNDLE_JOBS: 4
16
- BUNDLE_RETRY: 3
17
- CI: true
18
- RAILS_ENV: test
19
- DATABASE_URL: postgres://postgres:postgres@localhost:5432
20
- strategy:
21
- fail-fast: false
22
- matrix:
23
- ruby: ["2.7"]
24
- postgres: ["12"]
25
- gemfile: [
26
- "gemfiles/rails61.gemfile"
27
- ]
28
- fx: ["false"]
29
- include:
30
- - ruby: "3.0"
31
- postgres: "13"
32
- gemfile: "gemfiles/railsmain.gemfile"
33
- fx: "false"
34
- - ruby: "2.6"
35
- postgres: "12"
36
- gemfile: "gemfiles/rails61.gemfile"
37
- fx: "false"
38
- - ruby: "2.6"
39
- postgres: "12"
40
- gemfile: "gemfiles/rails6.gemfile"
41
- fx: "false"
42
- - ruby: "2.5"
43
- postgres: "11"
44
- gemfile: "gemfiles/rails52.gemfile"
45
- fx: "false"
46
- services:
47
- postgres:
48
- image: postgres:${{ matrix.postgres }}
49
- ports: ["5432:5432"]
50
- env:
51
- POSTGRES_PASSWORD: postgres
52
- options: >-
53
- --health-cmd pg_isready
54
- --health-interval 10s
55
- --health-timeout 5s
56
- --health-retries 5
57
- steps:
58
- - uses: actions/checkout@v2
59
- - uses: actions/cache@v1
60
- with:
61
- path: /home/runner/bundle
62
- key: bundle-${{ matrix.ruby }}-${{ matrix.gemfile }}-${{ hashFiles(matrix.gemfile) }}-${{ hashFiles('**/*.gemspec') }}
63
- restore-keys: |
64
- bundle-${{ matrix.ruby }}-${{ matrix.gemfile }}-
65
- - name: Install system deps
66
- run: |
67
- sudo apt-get update
68
- sudo apt-get -yqq install libpq-dev
69
- - uses: ruby/setup-ruby@v1
70
- with:
71
- ruby-version: ${{ matrix.ruby }}
72
- - name: Bundle install
73
- run: |
74
- bundle config path /home/runner/bundle
75
- bundle config --global gemfile ${{ matrix.gemfile }}
76
- bundle install
77
- bundle update
78
- - name: Prepare test database
79
- run: |
80
- bundle exec rake dummy:db:create
81
- bundle exec rake dummy:db:migrate:reset
82
- - name: Run RSpec
83
- env:
84
- USE_FX: ${{ matrix.fx }}
85
- run: |
86
- bundle exec rspec -f d --force-color
data/.rspec DELETED
@@ -1,2 +0,0 @@
1
- --format documentation
2
- --color
data/Gemfile.lock DELETED
@@ -1,239 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- metka (2.3.3)
5
- dry-configurable (>= 0.8)
6
- rails (>= 5.2)
7
-
8
- GEM
9
- remote: https://rubygems.org/
10
- specs:
11
- actioncable (6.1.4.1)
12
- actionpack (= 6.1.4.1)
13
- activesupport (= 6.1.4.1)
14
- nio4r (~> 2.0)
15
- websocket-driver (>= 0.6.1)
16
- actionmailbox (6.1.4.1)
17
- actionpack (= 6.1.4.1)
18
- activejob (= 6.1.4.1)
19
- activerecord (= 6.1.4.1)
20
- activestorage (= 6.1.4.1)
21
- activesupport (= 6.1.4.1)
22
- mail (>= 2.7.1)
23
- actionmailer (6.1.4.1)
24
- actionpack (= 6.1.4.1)
25
- actionview (= 6.1.4.1)
26
- activejob (= 6.1.4.1)
27
- activesupport (= 6.1.4.1)
28
- mail (~> 2.5, >= 2.5.4)
29
- rails-dom-testing (~> 2.0)
30
- actionpack (6.1.4.1)
31
- actionview (= 6.1.4.1)
32
- activesupport (= 6.1.4.1)
33
- rack (~> 2.0, >= 2.0.9)
34
- rack-test (>= 0.6.3)
35
- rails-dom-testing (~> 2.0)
36
- rails-html-sanitizer (~> 1.0, >= 1.2.0)
37
- actiontext (6.1.4.1)
38
- actionpack (= 6.1.4.1)
39
- activerecord (= 6.1.4.1)
40
- activestorage (= 6.1.4.1)
41
- activesupport (= 6.1.4.1)
42
- nokogiri (>= 1.8.5)
43
- actionview (6.1.4.1)
44
- activesupport (= 6.1.4.1)
45
- builder (~> 3.1)
46
- erubi (~> 1.4)
47
- rails-dom-testing (~> 2.0)
48
- rails-html-sanitizer (~> 1.1, >= 1.2.0)
49
- activejob (6.1.4.1)
50
- activesupport (= 6.1.4.1)
51
- globalid (>= 0.3.6)
52
- activemodel (6.1.4.1)
53
- activesupport (= 6.1.4.1)
54
- activerecord (6.1.4.1)
55
- activemodel (= 6.1.4.1)
56
- activesupport (= 6.1.4.1)
57
- activestorage (6.1.4.1)
58
- actionpack (= 6.1.4.1)
59
- activejob (= 6.1.4.1)
60
- activerecord (= 6.1.4.1)
61
- activesupport (= 6.1.4.1)
62
- marcel (~> 1.0.0)
63
- mini_mime (>= 1.1.0)
64
- activesupport (6.1.4.1)
65
- concurrent-ruby (~> 1.0, >= 1.0.2)
66
- i18n (>= 1.6, < 2)
67
- minitest (>= 5.1)
68
- tzinfo (~> 2.0)
69
- zeitwerk (~> 2.3)
70
- ammeter (1.1.5)
71
- activesupport (>= 3.0)
72
- railties (>= 3.0)
73
- rspec-rails (>= 2.2)
74
- ast (2.4.2)
75
- builder (3.2.4)
76
- coderay (1.1.3)
77
- concurrent-ruby (1.1.9)
78
- crass (1.0.6)
79
- database_cleaner (2.0.1)
80
- database_cleaner-active_record (~> 2.0.0)
81
- database_cleaner-active_record (2.0.0)
82
- activerecord (>= 5.a)
83
- database_cleaner-core (~> 2.0.0)
84
- database_cleaner-core (2.0.1)
85
- diff-lcs (1.4.4)
86
- dry-configurable (0.13.0)
87
- concurrent-ruby (~> 1.0)
88
- dry-core (~> 0.6)
89
- dry-core (0.7.1)
90
- concurrent-ruby (~> 1.0)
91
- erubi (1.10.0)
92
- faker (2.17.0)
93
- i18n (>= 1.6, < 2)
94
- globalid (1.0.0)
95
- activesupport (>= 5.0)
96
- i18n (1.8.10)
97
- concurrent-ruby (~> 1.0)
98
- jetrockets-standard (1.2.0)
99
- rubocop-rails
100
- rubocop-rspec
101
- standard (~> 1.1.1)
102
- loofah (2.12.0)
103
- crass (~> 1.0.2)
104
- nokogiri (>= 1.5.9)
105
- mail (2.7.1)
106
- mini_mime (>= 0.1.1)
107
- marcel (1.0.2)
108
- method_source (1.0.0)
109
- mini_mime (1.1.2)
110
- mini_portile2 (2.6.1)
111
- minitest (5.14.4)
112
- nio4r (2.5.8)
113
- nokogiri (1.12.5)
114
- mini_portile2 (~> 2.6.1)
115
- racc (~> 1.4)
116
- parallel (1.21.0)
117
- parser (3.1.0.0)
118
- ast (~> 2.4.1)
119
- pg (1.2.3)
120
- pry (0.14.0)
121
- coderay (~> 1.1)
122
- method_source (~> 1.0)
123
- racc (1.5.2)
124
- rack (2.2.3)
125
- rack-test (1.1.0)
126
- rack (>= 1.0, < 3)
127
- rails (6.1.4.1)
128
- actioncable (= 6.1.4.1)
129
- actionmailbox (= 6.1.4.1)
130
- actionmailer (= 6.1.4.1)
131
- actionpack (= 6.1.4.1)
132
- actiontext (= 6.1.4.1)
133
- actionview (= 6.1.4.1)
134
- activejob (= 6.1.4.1)
135
- activemodel (= 6.1.4.1)
136
- activerecord (= 6.1.4.1)
137
- activestorage (= 6.1.4.1)
138
- activesupport (= 6.1.4.1)
139
- bundler (>= 1.15.0)
140
- railties (= 6.1.4.1)
141
- sprockets-rails (>= 2.0.0)
142
- rails-dom-testing (2.0.3)
143
- activesupport (>= 4.2.0)
144
- nokogiri (>= 1.6)
145
- rails-html-sanitizer (1.4.2)
146
- loofah (~> 2.3)
147
- railties (6.1.4.1)
148
- actionpack (= 6.1.4.1)
149
- activesupport (= 6.1.4.1)
150
- method_source
151
- rake (>= 0.13)
152
- thor (~> 1.0)
153
- rainbow (3.0.0)
154
- rake (13.0.6)
155
- regexp_parser (2.2.0)
156
- rexml (3.2.5)
157
- rspec (3.10.0)
158
- rspec-core (~> 3.10.0)
159
- rspec-expectations (~> 3.10.0)
160
- rspec-mocks (~> 3.10.0)
161
- rspec-core (3.10.1)
162
- rspec-support (~> 3.10.0)
163
- rspec-expectations (3.10.1)
164
- diff-lcs (>= 1.2.0, < 2.0)
165
- rspec-support (~> 3.10.0)
166
- rspec-mocks (3.10.2)
167
- diff-lcs (>= 1.2.0, < 2.0)
168
- rspec-support (~> 3.10.0)
169
- rspec-rails (5.0.1)
170
- actionpack (>= 5.2)
171
- activesupport (>= 5.2)
172
- railties (>= 5.2)
173
- rspec-core (~> 3.10)
174
- rspec-expectations (~> 3.10)
175
- rspec-mocks (~> 3.10)
176
- rspec-support (~> 3.10)
177
- rspec-support (3.10.2)
178
- rubocop (1.18.4)
179
- parallel (~> 1.10)
180
- parser (>= 3.0.0.0)
181
- rainbow (>= 2.2.2, < 4.0)
182
- regexp_parser (>= 1.8, < 3.0)
183
- rexml
184
- rubocop-ast (>= 1.8.0, < 2.0)
185
- ruby-progressbar (~> 1.7)
186
- unicode-display_width (>= 1.4.0, < 3.0)
187
- rubocop-ast (1.15.1)
188
- parser (>= 3.0.1.1)
189
- rubocop-performance (1.11.4)
190
- rubocop (>= 1.7.0, < 2.0)
191
- rubocop-ast (>= 0.4.0)
192
- rubocop-rails (2.13.0)
193
- activesupport (>= 4.2.0)
194
- rack (>= 1.1)
195
- rubocop (>= 1.7.0, < 2.0)
196
- rubocop-rspec (2.4.0)
197
- rubocop (~> 1.0)
198
- rubocop-ast (>= 1.1.0)
199
- ruby-progressbar (1.11.0)
200
- sprockets (4.0.2)
201
- concurrent-ruby (~> 1.0)
202
- rack (> 1, < 3)
203
- sprockets-rails (3.4.2)
204
- actionpack (>= 5.2)
205
- activesupport (>= 5.2)
206
- sprockets (>= 3.0.0)
207
- standard (1.1.7)
208
- rubocop (= 1.18.4)
209
- rubocop-performance (= 1.11.4)
210
- thor (1.1.0)
211
- timecop (0.9.4)
212
- tzinfo (2.0.4)
213
- concurrent-ruby (~> 1.0)
214
- unicode-display_width (2.1.0)
215
- websocket-driver (0.7.5)
216
- websocket-extensions (>= 0.1.0)
217
- websocket-extensions (0.1.5)
218
- zeitwerk (2.4.2)
219
-
220
- PLATFORMS
221
- ruby
222
-
223
- DEPENDENCIES
224
- activerecord (>= 5.2.4, < 6.2)
225
- ammeter (>= 1.1)
226
- bundler (>= 1.3)
227
- database_cleaner (>= 1.7)
228
- faker (>= 2.8)
229
- jetrockets-standard (>= 1.1)
230
- metka!
231
- pg (>= 1.1)
232
- pry (>= 0.12.2)
233
- rake (>= 0.8.7)
234
- rspec (>= 3.9)
235
- rspec-rails (>= 3.9)
236
- timecop (>= 0.9)
237
-
238
- BUNDLED WITH
239
- 2.1.4
@@ -1,6 +0,0 @@
1
- source "https://rubygems.org"
2
-
3
- gem 'rails', '~> 5.2'
4
- gem 'activerecord', '~> 5.2.4.3'
5
-
6
- gemspec path: '..'
@@ -1,6 +0,0 @@
1
- source "https://rubygems.org"
2
-
3
- gem 'rails', '~> 6.0', ' < 6.1'
4
- gem 'activerecord', '~> 6.0', '< 6.1'
5
-
6
- gemspec path: '..'
@@ -1,6 +0,0 @@
1
- source "https://rubygems.org"
2
-
3
- gem 'rails', '~> 6.1'
4
- gem 'activerecord', '~> 6.1'
5
-
6
- gemspec path: '..'
@@ -1,73 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails/generators'
4
- require 'rails/generators/active_record'
5
-
6
- module Metka
7
- module Generators
8
- module Strategies
9
- class MaterializedViewGenerator < ::Rails::Generators::Base # :nodoc:
10
- include Rails::Generators::Migration
11
-
12
- DEFAULT_SOURCE_COLUMNS = ['tags'].freeze
13
-
14
- desc <<~LONGDESC
15
- Generates migration to implement view strategy for Metka
16
-
17
- > $ rails g metka:strategies:materialized_view \
18
- --source-table-name=NAME_OF_TABLE_WITH_TAGS \
19
- --source-columns=NAME_OF_TAGGED_COLUMN_1 NAME_OF_TAGGED_COLUMN_2 \
20
- --view-name=NAME_OF_VIEW
21
- LONGDESC
22
-
23
- source_root File.expand_path('templates', __dir__)
24
-
25
- class_option :source_table_name, type: :string, required: true,
26
- desc: 'Name of the table that has a column with tags'
27
-
28
- class_option :source_columns, type: :array, default: DEFAULT_SOURCE_COLUMNS,
29
- desc: 'List of the tagged columns names'
30
-
31
- class_option :view_name, type: :string,
32
- desc: 'Custom name for the resulting view'
33
-
34
- def generate_migration
35
- migration_template 'migration.rb.erb', "db/migrate/#{migration_name}.rb"
36
- end
37
-
38
- no_tasks do
39
- def source_table_name
40
- options[:source_table_name]
41
- end
42
-
43
- def source_columns
44
- options[:source_columns]
45
- end
46
-
47
- def source_columns_names
48
- source_columns.join('_and_')
49
- end
50
-
51
- def view_name
52
- return options[:view_name] if options[:view_name]
53
-
54
- columns_sequence = source_columns == DEFAULT_SOURCE_COLUMNS ? nil : "_with_#{source_columns_names}"
55
- "tagged#{columns_sequence}_#{source_table_name}"
56
- end
57
-
58
- def migration_name
59
- "create_#{view_name}_materialized_view"
60
- end
61
-
62
- def migration_class_name
63
- migration_name.classify
64
- end
65
- end
66
-
67
- def self.next_migration_number(dir)
68
- ::ActiveRecord::Generators::Base.next_migration_number(dir)
69
- end
70
- end
71
- end
72
- end
73
- end