metka 2.0.3 → 2.3.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.
@@ -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: '..'