metka 2.0.3 → 2.3.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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]) do
13
+ query = join(options[:join_operator]) {
14
14
  columns.map do |column|
15
15
  build_query(strategy, model, column, tags)
16
16
  end
17
- end
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 options
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 ::Arel::Node
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
- column_cast = Arel::Nodes::NamedFunction.new(
10
- 'CAST',
11
- [model.arel_table[column_name].as('text[]')]
12
- )
13
-
14
- value = Arel::Nodes::SqlLiteral.new(
15
- # In Rails 5.2 and above Sanitanization moved to public level, but still we have to support 4.2 and 5.0 and 5.1
16
- ActiveRecord::Base.send(:sanitize_sql_for_conditions, ['ARRAY[?]', tag_list.to_a])
17
- )
18
-
19
- value_cast = Arel::Nodes::NamedFunction.new(
20
- 'CAST',
21
- [value.as('text[]')]
22
- )
23
-
24
- Arel::Nodes::InfixOperation.new(infix_operator, column_cast, value_cast)
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Metka
4
- VERSION = '2.0.3'
4
+ VERSION = '2.3.1'
5
5
  end
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.1'
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.0.3
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: 2020-09-04 00:00:00.000000000 Z
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.1'
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.1'
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/workflows/continuous-integration-workflow.yml"
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
- - ".travis.yml"
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
- - gemfiles/rails5.gemfile
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.0.6
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
@@ -1,11 +0,0 @@
1
- name: CI
2
- # This workflow is triggered on pushes to the repository.
3
- on: [push]
4
-
5
- jobs:
6
- build:
7
- name: RSpec
8
- # This job runs on Linux
9
- runs-on: ubuntu-latest
10
- steps:
11
- - uses: actions/checkout@v1
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
@@ -1,6 +0,0 @@
1
- source "https://rubygems.org"
2
-
3
- gem 'rails', '~>5.1'
4
- gem 'activerecord', '~> 5.2.4.3'
5
-
6
- gemspec path: '..'