metka 2.3.4 → 3.0.1

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 (45) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +273 -236
  3. data/lib/generators/metka/sql_identifier.rb +25 -0
  4. data/lib/generators/metka/strategies/index/index_generator.rb +84 -0
  5. data/lib/generators/metka/strategies/index/templates/migration.rb.erb +89 -0
  6. data/lib/generators/metka/strategies/table/table_generator.rb +91 -0
  7. data/lib/generators/metka/strategies/table/templates/migration.rb.erb +128 -0
  8. data/lib/generators/metka/strategies/table/templates/migration.sqlite.rb.erb +93 -0
  9. data/lib/metka/generic_parser.rb +28 -14
  10. data/lib/metka/model.rb +130 -51
  11. data/lib/metka/query_builder.rb +45 -49
  12. data/lib/metka/tag_list.rb +16 -8
  13. data/lib/metka/tags_query.rb +93 -0
  14. data/lib/metka/version.rb +1 -1
  15. data/lib/metka.rb +24 -10
  16. metadata +35 -154
  17. data/.github/ISSUE_TEMPLATE.md +0 -15
  18. data/.github/workflows/lint_code.yml +0 -21
  19. data/.github/workflows/lint_docs.yml +0 -57
  20. data/.github/workflows/specs.yml +0 -86
  21. data/.gitignore +0 -18
  22. data/.mdlrc +0 -1
  23. data/.rspec +0 -2
  24. data/.rubocop-md.yml +0 -20
  25. data/.rubocop.yml +0 -27
  26. data/.ruby-version +0 -1
  27. data/Gemfile +0 -12
  28. data/Gemfile.lock +0 -239
  29. data/Rakefile +0 -13
  30. data/bin/console +0 -14
  31. data/bin/setup +0 -8
  32. data/forspell.dict +0 -7
  33. data/gemfiles/rails52.gemfile +0 -6
  34. data/gemfiles/rails6.gemfile +0 -6
  35. data/gemfiles/rails61.gemfile +0 -6
  36. data/gemfiles/railsmain.gemfile +0 -5
  37. data/gemfiles/rubocop.gemfile +0 -4
  38. data/lib/generators/metka/strategies/materialized_view/materialized_view_generator.rb +0 -73
  39. data/lib/generators/metka/strategies/materialized_view/templates/migration.rb.erb +0 -54
  40. data/lib/generators/metka/strategies/view/templates/migration.rb.erb +0 -26
  41. data/lib/generators/metka/strategies/view/view_generator.rb +0 -70
  42. data/lib/metka/query_builder/all_tags_query.rb +0 -11
  43. data/lib/metka/query_builder/any_tags_query.rb +0 -11
  44. data/lib/metka/query_builder/base_query.rb +0 -48
  45. data/metka.gemspec +0 -42
metadata CHANGED
@@ -1,100 +1,42 @@
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.1
5
5
  platform: ruby
6
6
  authors:
7
- - Igor Alexandrov
8
- - Andrey Morozov
9
- autorequire:
10
- bindir: exe
7
+ - Igor Aleksandrov
8
+ bindir: bin
11
9
  cert_chain: []
12
- date: 2022-01-09 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
13
11
  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
12
  - !ruby/object:Gem::Dependency
29
13
  name: rails
30
14
  requirement: !ruby/object:Gem::Requirement
31
15
  requirements:
32
16
  - - ">="
33
17
  - !ruby/object:Gem::Version
34
- version: '5.2'
18
+ version: '7.1'
35
19
  type: :runtime
36
20
  prerelease: false
37
21
  version_requirements: !ruby/object:Gem::Requirement
38
22
  requirements:
39
23
  - - ">="
40
24
  - !ruby/object:Gem::Version
41
- version: '5.2'
25
+ version: '7.1'
42
26
  - !ruby/object:Gem::Dependency
43
- name: ammeter
27
+ name: minitest
44
28
  requirement: !ruby/object:Gem::Requirement
45
29
  requirements:
46
30
  - - ">="
47
31
  - !ruby/object:Gem::Version
48
- version: '1.1'
32
+ version: '5.15'
49
33
  type: :development
50
34
  prerelease: false
51
35
  version_requirements: !ruby/object:Gem::Requirement
52
36
  requirements:
53
37
  - - ">="
54
38
  - !ruby/object:Gem::Version
55
- version: '1.1'
56
- - !ruby/object:Gem::Dependency
57
- name: pry
58
- requirement: !ruby/object:Gem::Requirement
59
- requirements:
60
- - - ">="
61
- - !ruby/object:Gem::Version
62
- version: 0.12.2
63
- type: :development
64
- prerelease: false
65
- version_requirements: !ruby/object:Gem::Requirement
66
- requirements:
67
- - - ">="
68
- - !ruby/object:Gem::Version
69
- version: 0.12.2
70
- - !ruby/object:Gem::Dependency
71
- name: bundler
72
- requirement: !ruby/object:Gem::Requirement
73
- requirements:
74
- - - ">="
75
- - !ruby/object:Gem::Version
76
- version: '1.3'
77
- type: :development
78
- prerelease: false
79
- version_requirements: !ruby/object:Gem::Requirement
80
- requirements:
81
- - - ">="
82
- - !ruby/object:Gem::Version
83
- version: '1.3'
84
- - !ruby/object:Gem::Dependency
85
- name: faker
86
- requirement: !ruby/object:Gem::Requirement
87
- requirements:
88
- - - ">="
89
- - !ruby/object:Gem::Version
90
- version: '2.8'
91
- type: :development
92
- prerelease: false
93
- version_requirements: !ruby/object:Gem::Requirement
94
- requirements:
95
- - - ">="
96
- - !ruby/object:Gem::Version
97
- version: '2.8'
39
+ version: '5.15'
98
40
  - !ruby/object:Gem::Dependency
99
41
  name: pg
100
42
  requirement: !ruby/object:Gem::Requirement
@@ -110,77 +52,35 @@ dependencies:
110
52
  - !ruby/object:Gem::Version
111
53
  version: '1.1'
112
54
  - !ruby/object:Gem::Dependency
113
- name: rake
114
- requirement: !ruby/object:Gem::Requirement
115
- requirements:
116
- - - ">="
117
- - !ruby/object:Gem::Version
118
- version: 0.8.7
119
- type: :development
120
- prerelease: false
121
- version_requirements: !ruby/object:Gem::Requirement
122
- requirements:
123
- - - ">="
124
- - !ruby/object:Gem::Version
125
- version: 0.8.7
126
- - !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
55
+ name: sqlite3
142
56
  requirement: !ruby/object:Gem::Requirement
143
57
  requirements:
144
58
  - - ">="
145
59
  - !ruby/object:Gem::Version
146
- version: '3.9'
60
+ version: '2.1'
147
61
  type: :development
148
62
  prerelease: false
149
63
  version_requirements: !ruby/object:Gem::Requirement
150
64
  requirements:
151
65
  - - ">="
152
66
  - !ruby/object:Gem::Version
153
- version: '3.9'
67
+ version: '2.1'
154
68
  - !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
69
+ name: rake
170
70
  requirement: !ruby/object:Gem::Requirement
171
71
  requirements:
172
72
  - - ">="
173
73
  - !ruby/object:Gem::Version
174
- version: '1.7'
74
+ version: 0.8.7
175
75
  type: :development
176
76
  prerelease: false
177
77
  version_requirements: !ruby/object:Gem::Requirement
178
78
  requirements:
179
79
  - - ">="
180
80
  - !ruby/object:Gem::Version
181
- version: '1.7'
81
+ version: 0.8.7
182
82
  - !ruby/object:Gem::Dependency
183
- name: jetrockets-standard
83
+ name: rubocop-rails-omakase
184
84
  requirement: !ruby/object:Gem::Requirement
185
85
  requirements:
186
86
  - - ">="
@@ -193,57 +93,39 @@ dependencies:
193
93
  - - ">="
194
94
  - !ruby/object:Gem::Version
195
95
  version: '1.1'
196
- description: Rails tagging system based on PostgreSQL arrays
96
+ description: Rails tagging system that stores tags in a PostgreSQL array column or
97
+ an SQLite JSON column — no join tables, no extra models, no N+1 queries.
197
98
  email:
198
99
  - igor.alexandrov@gmail.com
199
- - andrey.morozov@jetrockets.ru
200
100
  executables: []
201
101
  extensions: []
202
102
  extra_rdoc_files: []
203
103
  files:
204
- - ".github/ISSUE_TEMPLATE.md"
205
- - ".github/workflows/lint_code.yml"
206
- - ".github/workflows/lint_docs.yml"
207
- - ".github/workflows/specs.yml"
208
- - ".gitignore"
209
- - ".mdlrc"
210
- - ".rspec"
211
- - ".rubocop-md.yml"
212
- - ".rubocop.yml"
213
- - ".ruby-version"
214
104
  - CODE_OF_CONDUCT.md
215
- - Gemfile
216
- - Gemfile.lock
217
105
  - LICENSE.txt
218
106
  - README.md
219
- - Rakefile
220
- - bin/console
221
- - bin/setup
222
- - forspell.dict
223
- - gemfiles/rails52.gemfile
224
- - gemfiles/rails6.gemfile
225
- - gemfiles/rails61.gemfile
226
- - gemfiles/railsmain.gemfile
227
- - 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
107
+ - lib/generators/metka/sql_identifier.rb
108
+ - lib/generators/metka/strategies/index/index_generator.rb
109
+ - lib/generators/metka/strategies/index/templates/migration.rb.erb
110
+ - lib/generators/metka/strategies/table/table_generator.rb
111
+ - lib/generators/metka/strategies/table/templates/migration.rb.erb
112
+ - lib/generators/metka/strategies/table/templates/migration.sqlite.rb.erb
232
113
  - lib/metka.rb
233
114
  - lib/metka/generic_parser.rb
234
115
  - lib/metka/model.rb
235
116
  - 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
117
  - lib/metka/tag_list.rb
118
+ - lib/metka/tags_query.rb
240
119
  - lib/metka/version.rb
241
- - metka.gemspec
242
- homepage: https://github.com/jetrockets/metka
120
+ homepage: https://github.com/metka-ruby/metka
243
121
  licenses:
244
122
  - MIT
245
- metadata: {}
246
- post_install_message:
123
+ metadata:
124
+ homepage_uri: https://github.com/metka-ruby/metka
125
+ source_code_uri: https://github.com/metka-ruby/metka
126
+ bug_tracker_uri: https://github.com/metka-ruby/metka/issues
127
+ changelog_uri: https://github.com/metka-ruby/metka/releases
128
+ rubygems_mfa_required: 'true'
247
129
  rdoc_options: []
248
130
  require_paths:
249
131
  - lib
@@ -251,15 +133,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
251
133
  requirements:
252
134
  - - ">="
253
135
  - !ruby/object:Gem::Version
254
- version: '2.5'
136
+ version: '3.2'
255
137
  required_rubygems_version: !ruby/object:Gem::Requirement
256
138
  requirements:
257
139
  - - ">="
258
140
  - !ruby/object:Gem::Version
259
141
  version: '0'
260
142
  requirements: []
261
- rubygems_version: 3.1.4
262
- signing_key:
143
+ rubygems_version: 3.6.9
263
144
  specification_version: 4
264
- summary: Rails tagging system based on PostgreSQL arrays
145
+ summary: Rails tagging system based on PostgreSQL arrays and SQLite JSON columns
265
146
  test_files: []
@@ -1,15 +0,0 @@
1
- # Tell us about your environment
2
-
3
- **Ruby Version:**
4
-
5
- **Rails Version:**
6
-
7
- **PostgreSQL Version:**
8
-
9
- **Metka Version:**
10
-
11
- ## What did you do?
12
-
13
- ## What did you expect to happen?
14
-
15
- ## What actually happened?
@@ -1,21 +0,0 @@
1
- name: Lint Code
2
-
3
- on:
4
- push:
5
- branches:
6
- - master
7
- pull_request:
8
-
9
- jobs:
10
- rubocop:
11
- runs-on: ubuntu-latest
12
- steps:
13
- - uses: actions/checkout@v2
14
- - uses: ruby/setup-ruby@v1
15
- with:
16
- ruby-version: 2.7
17
- - name: RuboCop
18
- run: |
19
- gem install bundler
20
- bundle install --gemfile gemfiles/rubocop.gemfile --jobs 4 --retry 3
21
- bundle exec --gemfile gemfiles/rubocop.gemfile rubocop
@@ -1,57 +0,0 @@
1
- name: Lint Docs
2
-
3
- on:
4
- push:
5
- branches:
6
- - master
7
- paths:
8
- - "*.md"
9
- - "**/*.md"
10
- pull_request:
11
- paths:
12
- - "*.md"
13
- - "**/*.md"
14
-
15
- jobs:
16
- markdownlint:
17
- runs-on: ubuntu-latest
18
- steps:
19
- - uses: actions/checkout@v2
20
- - uses: ruby/setup-ruby@v1
21
- with:
22
- ruby-version: 2.7
23
- - name: Run Markdown linter
24
- run: |
25
- gem install mdl
26
- mdl README.md .github/*.md
27
- rubocop:
28
- runs-on: ubuntu-latest
29
- steps:
30
- - uses: actions/checkout@v2
31
- - uses: ruby/setup-ruby@v1
32
- with:
33
- ruby-version: 2.7
34
- - name: Lint Markdown files with RuboCop
35
- run: |
36
- gem install bundler
37
- bundle install --gemfile gemfiles/rubocop.gemfile --jobs 4 --retry 3
38
- bundle exec --gemfile gemfiles/rubocop.gemfile rubocop -c .rubocop-md.yml
39
- forspell:
40
- runs-on: ubuntu-latest
41
- steps:
42
- - uses: actions/checkout@v2
43
- - name: Install Hunspell
44
- run: |
45
- sudo apt-get install hunspell
46
- - uses: ruby/setup-ruby@v1
47
- with:
48
- ruby-version: 2.7
49
- - name: Cache installed gems
50
- uses: actions/cache@v1
51
- with:
52
- path: /home/runner/.rubies/ruby-2.7.0/lib/ruby/gems/2.7.0
53
- key: gems-cache-${{ runner.os }}
54
- - name: Install Forspell
55
- run: gem install forspell
56
- - name: Run Forspell
57
- run: forspell *.md .github/*.md
@@ -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/.gitignore DELETED
@@ -1,18 +0,0 @@
1
- /.idea/
2
- /.bundle/
3
- /.yardoc
4
- /_yardoc/
5
- /coverage/
6
- /doc/
7
- /pkg/
8
- /spec/reports/
9
- /tmp/
10
- /spec/tmp/
11
-
12
- # rspec failure tracking
13
- .rspec_status
14
- spec/debug.log
15
- *.gem
16
-
17
- spec/dummy/log/test.log
18
- spec/dummy/log/development.log
data/.mdlrc DELETED
@@ -1 +0,0 @@
1
- rules "~MD013", "~MD026", "~MD029", "~MD034", "~MD041"
data/.rspec DELETED
@@ -1,2 +0,0 @@
1
- --format documentation
2
- --color
data/.rubocop-md.yml DELETED
@@ -1,20 +0,0 @@
1
- inherit_from: ".rubocop.yml"
2
-
3
- require:
4
- - rubocop-md
5
-
6
-
7
- AllCops:
8
- Include:
9
- - '**/*.md'
10
-
11
- Lint/Void:
12
- Exclude:
13
- - '**/*.md'
14
-
15
- Lint/DuplicateMethods:
16
- Exclude:
17
- - '**/*.md'
18
-
19
- Layout/SpaceInsideHashLiteralBraces:
20
- EnforcedStyle: space
data/.rubocop.yml DELETED
@@ -1,27 +0,0 @@
1
- inherit_gem:
2
- jetrockets-standard: config/gems.yml
3
-
4
- AllCops:
5
- Exclude:
6
- - 'bin/*'
7
- - 'tmp/**/*'
8
- - 'docs/**/*'
9
- - 'Gemfile'
10
- - 'vendor/**/*'
11
- - 'gemfiles/**/*'
12
- DisplayCopNames: true
13
- TargetRubyVersion: 2.5
14
-
15
- Style/TrailingCommaInArrayLiteral:
16
- EnforcedStyleForMultiline: no_comma
17
-
18
- Style/TrailingCommaInHashLiteral:
19
- EnforcedStyleForMultiline: no_comma
20
-
21
- Layout/ParameterAlignment:
22
- EnforcedStyle: with_first_parameter
23
-
24
- # See https://github.com/rubocop-hq/rubocop/issues/4222
25
- Lint/AmbiguousBlockAssociation:
26
- Exclude:
27
- - 'spec/**/*'
data/.ruby-version DELETED
@@ -1 +0,0 @@
1
- 2.7.2
data/Gemfile DELETED
@@ -1,12 +0,0 @@
1
- source "https://rubygems.org"
2
-
3
- # Specify your gem's dependencies in metka.gemspec
4
- gemspec
5
-
6
- local_gemfile = "#{File.dirname(__FILE__)}/Gemfile.local"
7
-
8
- if File.exist?(local_gemfile)
9
- eval(File.read(local_gemfile)) # rubocop:disable Lint/Eval
10
- else
11
- gem 'activerecord', '>= 5.2.4', '< 6.2'
12
- end