metka 2.0.3 → 2.3.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/ISSUE_TEMPLATE.md +15 -0
- data/.github/workflows/lint_code.yml +21 -0
- data/.github/workflows/lint_docs.yml +57 -0
- data/.github/workflows/specs.yml +86 -0
- data/.gitignore +3 -1
- data/.mdlrc +1 -0
- data/.rubocop-md.yml +20 -0
- data/.rubocop.yml +1 -2
- data/.ruby-version +1 -0
- data/CODE_OF_CONDUCT.md +3 -4
- data/Gemfile +1 -1
- data/Gemfile.lock +127 -129
- data/README.md +115 -49
- data/forspell.dict +7 -0
- data/gemfiles/rails52.gemfile +1 -1
- data/gemfiles/rails6.gemfile +2 -2
- data/gemfiles/rails61.gemfile +6 -0
- data/gemfiles/railsmain.gemfile +5 -0
- data/gemfiles/rubocop.gemfile +4 -0
- data/lib/metka/generic_parser.rb +2 -2
- data/lib/metka/model.rb +6 -6
- data/lib/metka/query_builder.rb +8 -6
- data/lib/metka/query_builder/base_query.rb +37 -16
- data/lib/metka/version.rb +1 -1
- data/metka.gemspec +1 -2
- metadata +16 -22
- data/.github/workflows/continuous-integration-workflow.yml +0 -11
- data/.travis.yml +0 -35
- data/gemfiles/rails5.gemfile +0 -6
data/lib/metka/query_builder.rb
CHANGED
@@ -10,11 +10,11 @@ module Metka
|
|
10
10
|
def call(model, columns, tags, options)
|
11
11
|
strategy = options_to_strategy(options)
|
12
12
|
|
13
|
-
query = join(options[:join_operator])
|
13
|
+
query = join(options[:join_operator]) {
|
14
14
|
columns.map do |column|
|
15
15
|
build_query(strategy, model, column, tags)
|
16
16
|
end
|
17
|
-
|
17
|
+
}
|
18
18
|
|
19
19
|
if options[:exclude].present?
|
20
20
|
Arel::Nodes::Not.new(query)
|
@@ -25,7 +25,7 @@ module Metka
|
|
25
25
|
|
26
26
|
private
|
27
27
|
|
28
|
-
def options_to_strategy
|
28
|
+
def options_to_strategy(options)
|
29
29
|
if options[:any].present?
|
30
30
|
AnyTagsQuery
|
31
31
|
else
|
@@ -43,11 +43,13 @@ module Metka
|
|
43
43
|
end
|
44
44
|
end
|
45
45
|
|
46
|
-
# @param nodes [Array<Arel::Node>, Arel::Node]
|
47
|
-
# @return [Arel::Node]
|
46
|
+
# @param nodes [Array<Arel::Nodes::Node>, Arel::Nodes::Node]
|
47
|
+
# @return [Arel::Nodes::Node]
|
48
48
|
def join_or(nodes)
|
49
|
+
node_base_klass = defined?(::Arel::Nodes::Node) ? ::Arel::Nodes::Node : ::Arel::Node
|
50
|
+
|
49
51
|
case nodes
|
50
|
-
when
|
52
|
+
when node_base_klass
|
51
53
|
nodes
|
52
54
|
when Array
|
53
55
|
l, *r = nodes
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require 'singleton'
|
3
4
|
|
4
5
|
module Metka
|
@@ -6,22 +7,42 @@ module Metka
|
|
6
7
|
include Singleton
|
7
8
|
|
8
9
|
def call(model, column_name, tag_list)
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
10
|
+
tags = tag_list.to_a
|
11
|
+
|
12
|
+
if tags.one?
|
13
|
+
value = Arel::Nodes::SqlLiteral.new(
|
14
|
+
ActiveRecord::Base.sanitize_sql_for_conditions(['?', tags.first])
|
15
|
+
)
|
16
|
+
|
17
|
+
column_cast = Arel::Nodes::NamedFunction.new(
|
18
|
+
'ANY',
|
19
|
+
[model.arel_table[column_name]]
|
20
|
+
)
|
21
|
+
|
22
|
+
Arel::Nodes::Equality.new(value, column_cast)
|
23
|
+
else
|
24
|
+
value = Arel::Nodes::SqlLiteral.new(
|
25
|
+
ActiveRecord::Base.sanitize_sql_for_conditions(['ARRAY[?]::varchar[]', tags])
|
26
|
+
)
|
27
|
+
|
28
|
+
Arel::Nodes::InfixOperation.new(infix_operator, model.arel_table[column_name], value)
|
29
|
+
end
|
30
|
+
# column_cast = Arel::Nodes::NamedFunction.new(
|
31
|
+
# 'CAST',
|
32
|
+
# [model.arel_table[column_name].as('text[]')]
|
33
|
+
# )
|
34
|
+
|
35
|
+
# value = Arel::Nodes::SqlLiteral.new(
|
36
|
+
# ActiveRecord::Base.sanitize_sql_for_conditions(['ARRAY[?]::varchar[]', tag_list.to_a])
|
37
|
+
# )
|
38
|
+
|
39
|
+
# value_cast = Arel::Nodes::NamedFunction.new(
|
40
|
+
# 'CAST',
|
41
|
+
# [value.as('text[]')]
|
42
|
+
# )
|
43
|
+
|
44
|
+
# # Arel::Nodes::InfixOperation.new(infix_operator, column_cast, value_cast)
|
45
|
+
# Arel::Nodes::InfixOperation.new(infix_operator, model.arel_table[column_name], value)
|
25
46
|
end
|
26
47
|
end
|
27
48
|
end
|
data/lib/metka/version.rb
CHANGED
data/metka.gemspec
CHANGED
@@ -25,13 +25,12 @@ Gem::Specification.new do |spec|
|
|
25
25
|
spec.require_paths = ['lib']
|
26
26
|
|
27
27
|
spec.add_dependency 'dry-configurable', '>= 0.8'
|
28
|
-
spec.add_dependency 'rails', '>= 5.
|
28
|
+
spec.add_dependency 'rails', '>= 5.2'
|
29
29
|
|
30
30
|
spec.add_development_dependency 'ammeter', '>= 1.1'
|
31
31
|
spec.add_development_dependency 'pry', '>= 0.12.2'
|
32
32
|
spec.add_development_dependency 'bundler', '>= 1.3'
|
33
33
|
spec.add_development_dependency 'faker', '>= 2.8'
|
34
|
-
spec.add_development_dependency 'jetrockets-standard', '~> 1.0.1'
|
35
34
|
spec.add_development_dependency 'pg', '>= 1.1'
|
36
35
|
spec.add_development_dependency 'rake', '>= 0.8.7'
|
37
36
|
spec.add_development_dependency 'rspec', '>= 3.9'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: metka
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Igor Alexandrov
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2021-04-01 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: dry-configurable
|
@@ -31,14 +31,14 @@ dependencies:
|
|
31
31
|
requirements:
|
32
32
|
- - ">="
|
33
33
|
- !ruby/object:Gem::Version
|
34
|
-
version: '5.
|
34
|
+
version: '5.2'
|
35
35
|
type: :runtime
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
39
|
- - ">="
|
40
40
|
- !ruby/object:Gem::Version
|
41
|
-
version: '5.
|
41
|
+
version: '5.2'
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
43
|
name: ammeter
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
@@ -95,20 +95,6 @@ dependencies:
|
|
95
95
|
- - ">="
|
96
96
|
- !ruby/object:Gem::Version
|
97
97
|
version: '2.8'
|
98
|
-
- !ruby/object:Gem::Dependency
|
99
|
-
name: jetrockets-standard
|
100
|
-
requirement: !ruby/object:Gem::Requirement
|
101
|
-
requirements:
|
102
|
-
- - "~>"
|
103
|
-
- !ruby/object:Gem::Version
|
104
|
-
version: 1.0.1
|
105
|
-
type: :development
|
106
|
-
prerelease: false
|
107
|
-
version_requirements: !ruby/object:Gem::Requirement
|
108
|
-
requirements:
|
109
|
-
- - "~>"
|
110
|
-
- !ruby/object:Gem::Version
|
111
|
-
version: 1.0.1
|
112
98
|
- !ruby/object:Gem::Dependency
|
113
99
|
name: pg
|
114
100
|
requirement: !ruby/object:Gem::Requirement
|
@@ -201,11 +187,16 @@ executables: []
|
|
201
187
|
extensions: []
|
202
188
|
extra_rdoc_files: []
|
203
189
|
files:
|
204
|
-
- ".github/
|
190
|
+
- ".github/ISSUE_TEMPLATE.md"
|
191
|
+
- ".github/workflows/lint_code.yml"
|
192
|
+
- ".github/workflows/lint_docs.yml"
|
193
|
+
- ".github/workflows/specs.yml"
|
205
194
|
- ".gitignore"
|
195
|
+
- ".mdlrc"
|
206
196
|
- ".rspec"
|
197
|
+
- ".rubocop-md.yml"
|
207
198
|
- ".rubocop.yml"
|
208
|
-
- ".
|
199
|
+
- ".ruby-version"
|
209
200
|
- CODE_OF_CONDUCT.md
|
210
201
|
- Gemfile
|
211
202
|
- Gemfile.lock
|
@@ -214,9 +205,12 @@ files:
|
|
214
205
|
- Rakefile
|
215
206
|
- bin/console
|
216
207
|
- bin/setup
|
217
|
-
-
|
208
|
+
- forspell.dict
|
218
209
|
- gemfiles/rails52.gemfile
|
219
210
|
- gemfiles/rails6.gemfile
|
211
|
+
- gemfiles/rails61.gemfile
|
212
|
+
- gemfiles/railsmain.gemfile
|
213
|
+
- gemfiles/rubocop.gemfile
|
220
214
|
- lib/generators/metka/strategies/materialized_view/materialized_view_generator.rb
|
221
215
|
- lib/generators/metka/strategies/materialized_view/templates/migration.rb.erb
|
222
216
|
- lib/generators/metka/strategies/view/templates/migration.rb.erb
|
@@ -250,7 +244,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
250
244
|
- !ruby/object:Gem::Version
|
251
245
|
version: '0'
|
252
246
|
requirements: []
|
253
|
-
rubygems_version: 3.
|
247
|
+
rubygems_version: 3.1.4
|
254
248
|
signing_key:
|
255
249
|
specification_version: 4
|
256
250
|
summary: Rails tagging system based on PostgreSQL arrays
|
data/.travis.yml
DELETED
@@ -1,35 +0,0 @@
|
|
1
|
-
---
|
2
|
-
language: ruby
|
3
|
-
cache: bundler
|
4
|
-
|
5
|
-
dist: trusty
|
6
|
-
sudo: false
|
7
|
-
|
8
|
-
notifications:
|
9
|
-
email: false
|
10
|
-
|
11
|
-
services:
|
12
|
-
- postgresql
|
13
|
-
addons:
|
14
|
-
postgresql: "11.2"
|
15
|
-
|
16
|
-
before_install:
|
17
|
-
- gem install -v 2.0.2 bundler
|
18
|
-
- sudo apt-get update
|
19
|
-
- sudo apt-get --yes remove postgresql\*
|
20
|
-
- sudo apt-get install -y postgresql-11 postgresql-client-11
|
21
|
-
- sudo cp /etc/postgresql/{9.6,11}/main/pg_hba.conf
|
22
|
-
- sudo service postgresql restart 11
|
23
|
-
|
24
|
-
before_script:
|
25
|
-
- psql -c 'CREATE ROLE travis SUPERUSER LOGIN CREATEDB;' -U postgres
|
26
|
-
- ./bin/setup
|
27
|
-
|
28
|
-
matrix:
|
29
|
-
include:
|
30
|
-
- rvm: 2.5.1
|
31
|
-
gemfile: gemfiles/rails5.gemfile
|
32
|
-
- rvm: 2.5.5
|
33
|
-
gemfile: gemfiles/rails52.gemfile
|
34
|
-
- rvm: 2.6.2
|
35
|
-
gemfile: gemfiles/rails6.gemfile
|