metka 0.1.2 → 2.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.
- checksums.yaml +4 -4
- data/.gitignore +4 -0
- data/.travis.yml +19 -8
- data/Gemfile.lock +62 -53
- data/README.md +338 -26
- data/bin/setup +1 -2
- data/gemfiles/rails5.gemfile +6 -0
- data/gemfiles/rails52.gemfile +6 -0
- data/gemfiles/rails6.gemfile +6 -0
- data/lib/generators/metka/strategies/materialized_view/materialized_view_generator.rb +22 -7
- data/lib/generators/metka/strategies/materialized_view/templates/migration.rb.erb +34 -20
- data/lib/generators/metka/strategies/view/templates/migration.rb.erb +11 -8
- data/lib/generators/metka/strategies/view/view_generator.rb +17 -5
- data/lib/metka.rb +1 -1
- data/lib/metka/generic_parser.rb +31 -1
- data/lib/metka/model.rb +74 -19
- data/lib/metka/query_builder.rb +55 -6
- data/lib/metka/query_builder/all_tags_query.rb +4 -19
- data/lib/metka/query_builder/any_tags_query.rb +4 -21
- data/lib/metka/query_builder/base_query.rb +27 -0
- data/lib/metka/version.rb +1 -1
- data/metka.gemspec +15 -12
- metadata +58 -25
- data/lib/metka/query_builder/exclude_tags_query.rb +0 -6
@@ -1,26 +1,11 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Metka
|
4
|
-
class AllTagsQuery
|
5
|
-
|
4
|
+
class AllTagsQuery < BaseQuery
|
5
|
+
private
|
6
6
|
|
7
|
-
def
|
8
|
-
|
9
|
-
'CAST',
|
10
|
-
[model.arel_table[column_name].as('text[]')]
|
11
|
-
)
|
12
|
-
|
13
|
-
value = Arel::Nodes::SqlLiteral.new(
|
14
|
-
# 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
|
15
|
-
ActiveRecord::Base.send(:sanitize_sql_for_conditions, ['ARRAY[?]', tag_list.to_a])
|
16
|
-
)
|
17
|
-
|
18
|
-
value_cast = Arel::Nodes::NamedFunction.new(
|
19
|
-
'CAST',
|
20
|
-
[value.as('text[]')]
|
21
|
-
)
|
22
|
-
|
23
|
-
Arel::Nodes::InfixOperation.new('@>', column_cast, value_cast)
|
7
|
+
def infix_operator
|
8
|
+
'@>'
|
24
9
|
end
|
25
10
|
end
|
26
11
|
end
|
@@ -1,28 +1,11 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'singleton'
|
4
|
-
|
5
3
|
module Metka
|
6
|
-
class AnyTagsQuery
|
7
|
-
|
8
|
-
|
9
|
-
def call(model, column_name, tag_list)
|
10
|
-
column_cast = Arel::Nodes::NamedFunction.new(
|
11
|
-
'CAST',
|
12
|
-
[model.arel_table[column_name].as('text[]')]
|
13
|
-
)
|
14
|
-
|
15
|
-
value = Arel::Nodes::SqlLiteral.new(
|
16
|
-
# 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
|
17
|
-
ActiveRecord::Base.send(:sanitize_sql_for_conditions, ['ARRAY[?]', tag_list.to_a])
|
18
|
-
)
|
19
|
-
|
20
|
-
value_cast = Arel::Nodes::NamedFunction.new(
|
21
|
-
'CAST',
|
22
|
-
[value.as('text[]')]
|
23
|
-
)
|
4
|
+
class AnyTagsQuery < BaseQuery
|
5
|
+
private
|
24
6
|
|
25
|
-
|
7
|
+
def infix_operator
|
8
|
+
'&&'
|
26
9
|
end
|
27
10
|
end
|
28
11
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'singleton'
|
3
|
+
|
4
|
+
module Metka
|
5
|
+
class BaseQuery
|
6
|
+
include Singleton
|
7
|
+
|
8
|
+
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)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
data/lib/metka/version.rb
CHANGED
data/metka.gemspec
CHANGED
@@ -7,8 +7,8 @@ require 'metka/version'
|
|
7
7
|
Gem::Specification.new do |spec|
|
8
8
|
spec.name = 'metka'
|
9
9
|
spec.version = Metka::VERSION
|
10
|
-
spec.authors = ['Igor Alexandrov']
|
11
|
-
spec.email = ['igor.alexandrov@gmail.com']
|
10
|
+
spec.authors = ['Igor Alexandrov', 'Andrey Morozov']
|
11
|
+
spec.email = ['igor.alexandrov@gmail.com', 'andrey.morozov@jetrockets.ru']
|
12
12
|
|
13
13
|
spec.summary = 'Rails tagging system based on PostgreSQL arrays'
|
14
14
|
spec.description = 'Rails tagging system based on PostgreSQL arrays'
|
@@ -24,16 +24,19 @@ Gem::Specification.new do |spec|
|
|
24
24
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
25
25
|
spec.require_paths = ['lib']
|
26
26
|
|
27
|
-
spec.add_dependency 'dry-configurable'
|
28
|
-
spec.add_dependency 'rails', '>=
|
27
|
+
spec.add_dependency 'dry-configurable', '>= 0.8'
|
28
|
+
spec.add_dependency 'rails', '>= 5.1'
|
29
29
|
|
30
|
-
spec.add_development_dependency 'ammeter'
|
31
|
-
spec.add_development_dependency '
|
32
|
-
spec.add_development_dependency '
|
30
|
+
spec.add_development_dependency 'ammeter', '>= 1.1'
|
31
|
+
spec.add_development_dependency 'pry', '>= 0.12.2'
|
32
|
+
spec.add_development_dependency 'bundler', '>= 1.3'
|
33
|
+
spec.add_development_dependency 'faker', '>= 2.8'
|
33
34
|
spec.add_development_dependency 'jetrockets-standard', '~> 1.0.1'
|
34
|
-
spec.add_development_dependency 'pg'
|
35
|
-
spec.add_development_dependency 'rake'
|
36
|
-
spec.add_development_dependency 'rspec'
|
37
|
-
spec.add_development_dependency 'rspec-rails'
|
38
|
-
spec.add_development_dependency 'timecop'
|
35
|
+
spec.add_development_dependency 'pg', '>= 1.1'
|
36
|
+
spec.add_development_dependency 'rake', '>= 0.8.7'
|
37
|
+
spec.add_development_dependency 'rspec', '>= 3.9'
|
38
|
+
spec.add_development_dependency 'rspec-rails', '>= 3.9'
|
39
|
+
spec.add_development_dependency 'timecop', '>= 0.9'
|
40
|
+
spec.add_development_dependency 'database_cleaner', '>= 1.7'
|
41
|
+
spec.required_ruby_version = '>= 2.5'
|
39
42
|
end
|
metadata
CHANGED
@@ -1,14 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: metka
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Igor Alexandrov
|
8
|
+
- Andrey Morozov
|
8
9
|
autorequire:
|
9
10
|
bindir: exe
|
10
11
|
cert_chain: []
|
11
|
-
date:
|
12
|
+
date: 2020-05-08 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: dry-configurable
|
@@ -16,70 +17,84 @@ dependencies:
|
|
16
17
|
requirements:
|
17
18
|
- - ">="
|
18
19
|
- !ruby/object:Gem::Version
|
19
|
-
version: '0'
|
20
|
+
version: '0.8'
|
20
21
|
type: :runtime
|
21
22
|
prerelease: false
|
22
23
|
version_requirements: !ruby/object:Gem::Requirement
|
23
24
|
requirements:
|
24
25
|
- - ">="
|
25
26
|
- !ruby/object:Gem::Version
|
26
|
-
version: '0'
|
27
|
+
version: '0.8'
|
27
28
|
- !ruby/object:Gem::Dependency
|
28
29
|
name: rails
|
29
30
|
requirement: !ruby/object:Gem::Requirement
|
30
31
|
requirements:
|
31
32
|
- - ">="
|
32
33
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
34
|
+
version: '5.1'
|
34
35
|
type: :runtime
|
35
36
|
prerelease: false
|
36
37
|
version_requirements: !ruby/object:Gem::Requirement
|
37
38
|
requirements:
|
38
39
|
- - ">="
|
39
40
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
41
|
+
version: '5.1'
|
41
42
|
- !ruby/object:Gem::Dependency
|
42
43
|
name: ammeter
|
43
44
|
requirement: !ruby/object:Gem::Requirement
|
44
45
|
requirements:
|
45
46
|
- - ">="
|
46
47
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
48
|
+
version: '1.1'
|
48
49
|
type: :development
|
49
50
|
prerelease: false
|
50
51
|
version_requirements: !ruby/object:Gem::Requirement
|
51
52
|
requirements:
|
52
53
|
- - ">="
|
53
54
|
- !ruby/object:Gem::Version
|
54
|
-
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
|
55
70
|
- !ruby/object:Gem::Dependency
|
56
71
|
name: bundler
|
57
72
|
requirement: !ruby/object:Gem::Requirement
|
58
73
|
requirements:
|
59
74
|
- - ">="
|
60
75
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
76
|
+
version: '1.3'
|
62
77
|
type: :development
|
63
78
|
prerelease: false
|
64
79
|
version_requirements: !ruby/object:Gem::Requirement
|
65
80
|
requirements:
|
66
81
|
- - ">="
|
67
82
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
83
|
+
version: '1.3'
|
69
84
|
- !ruby/object:Gem::Dependency
|
70
85
|
name: faker
|
71
86
|
requirement: !ruby/object:Gem::Requirement
|
72
87
|
requirements:
|
73
88
|
- - ">="
|
74
89
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
90
|
+
version: '2.8'
|
76
91
|
type: :development
|
77
92
|
prerelease: false
|
78
93
|
version_requirements: !ruby/object:Gem::Requirement
|
79
94
|
requirements:
|
80
95
|
- - ">="
|
81
96
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
97
|
+
version: '2.8'
|
83
98
|
- !ruby/object:Gem::Dependency
|
84
99
|
name: jetrockets-standard
|
85
100
|
requirement: !ruby/object:Gem::Requirement
|
@@ -100,73 +115,88 @@ dependencies:
|
|
100
115
|
requirements:
|
101
116
|
- - ">="
|
102
117
|
- !ruby/object:Gem::Version
|
103
|
-
version: '
|
118
|
+
version: '1.1'
|
104
119
|
type: :development
|
105
120
|
prerelease: false
|
106
121
|
version_requirements: !ruby/object:Gem::Requirement
|
107
122
|
requirements:
|
108
123
|
- - ">="
|
109
124
|
- !ruby/object:Gem::Version
|
110
|
-
version: '
|
125
|
+
version: '1.1'
|
111
126
|
- !ruby/object:Gem::Dependency
|
112
127
|
name: rake
|
113
128
|
requirement: !ruby/object:Gem::Requirement
|
114
129
|
requirements:
|
115
130
|
- - ">="
|
116
131
|
- !ruby/object:Gem::Version
|
117
|
-
version:
|
132
|
+
version: 0.8.7
|
118
133
|
type: :development
|
119
134
|
prerelease: false
|
120
135
|
version_requirements: !ruby/object:Gem::Requirement
|
121
136
|
requirements:
|
122
137
|
- - ">="
|
123
138
|
- !ruby/object:Gem::Version
|
124
|
-
version:
|
139
|
+
version: 0.8.7
|
125
140
|
- !ruby/object:Gem::Dependency
|
126
141
|
name: rspec
|
127
142
|
requirement: !ruby/object:Gem::Requirement
|
128
143
|
requirements:
|
129
144
|
- - ">="
|
130
145
|
- !ruby/object:Gem::Version
|
131
|
-
version: '
|
146
|
+
version: '3.9'
|
132
147
|
type: :development
|
133
148
|
prerelease: false
|
134
149
|
version_requirements: !ruby/object:Gem::Requirement
|
135
150
|
requirements:
|
136
151
|
- - ">="
|
137
152
|
- !ruby/object:Gem::Version
|
138
|
-
version: '
|
153
|
+
version: '3.9'
|
139
154
|
- !ruby/object:Gem::Dependency
|
140
155
|
name: rspec-rails
|
141
156
|
requirement: !ruby/object:Gem::Requirement
|
142
157
|
requirements:
|
143
158
|
- - ">="
|
144
159
|
- !ruby/object:Gem::Version
|
145
|
-
version: '
|
160
|
+
version: '3.9'
|
146
161
|
type: :development
|
147
162
|
prerelease: false
|
148
163
|
version_requirements: !ruby/object:Gem::Requirement
|
149
164
|
requirements:
|
150
165
|
- - ">="
|
151
166
|
- !ruby/object:Gem::Version
|
152
|
-
version: '
|
167
|
+
version: '3.9'
|
153
168
|
- !ruby/object:Gem::Dependency
|
154
169
|
name: timecop
|
155
170
|
requirement: !ruby/object:Gem::Requirement
|
156
171
|
requirements:
|
157
172
|
- - ">="
|
158
173
|
- !ruby/object:Gem::Version
|
159
|
-
version: '0'
|
174
|
+
version: '0.9'
|
160
175
|
type: :development
|
161
176
|
prerelease: false
|
162
177
|
version_requirements: !ruby/object:Gem::Requirement
|
163
178
|
requirements:
|
164
179
|
- - ">="
|
165
180
|
- !ruby/object:Gem::Version
|
166
|
-
version: '0'
|
181
|
+
version: '0.9'
|
182
|
+
- !ruby/object:Gem::Dependency
|
183
|
+
name: database_cleaner
|
184
|
+
requirement: !ruby/object:Gem::Requirement
|
185
|
+
requirements:
|
186
|
+
- - ">="
|
187
|
+
- !ruby/object:Gem::Version
|
188
|
+
version: '1.7'
|
189
|
+
type: :development
|
190
|
+
prerelease: false
|
191
|
+
version_requirements: !ruby/object:Gem::Requirement
|
192
|
+
requirements:
|
193
|
+
- - ">="
|
194
|
+
- !ruby/object:Gem::Version
|
195
|
+
version: '1.7'
|
167
196
|
description: Rails tagging system based on PostgreSQL arrays
|
168
197
|
email:
|
169
198
|
- igor.alexandrov@gmail.com
|
199
|
+
- andrey.morozov@jetrockets.ru
|
170
200
|
executables: []
|
171
201
|
extensions: []
|
172
202
|
extra_rdoc_files: []
|
@@ -184,6 +214,9 @@ files:
|
|
184
214
|
- Rakefile
|
185
215
|
- bin/console
|
186
216
|
- bin/setup
|
217
|
+
- gemfiles/rails5.gemfile
|
218
|
+
- gemfiles/rails52.gemfile
|
219
|
+
- gemfiles/rails6.gemfile
|
187
220
|
- lib/generators/metka/strategies/materialized_view/materialized_view_generator.rb
|
188
221
|
- lib/generators/metka/strategies/materialized_view/templates/migration.rb.erb
|
189
222
|
- lib/generators/metka/strategies/view/templates/migration.rb.erb
|
@@ -194,7 +227,7 @@ files:
|
|
194
227
|
- lib/metka/query_builder.rb
|
195
228
|
- lib/metka/query_builder/all_tags_query.rb
|
196
229
|
- lib/metka/query_builder/any_tags_query.rb
|
197
|
-
- lib/metka/query_builder/
|
230
|
+
- lib/metka/query_builder/base_query.rb
|
198
231
|
- lib/metka/tag_list.rb
|
199
232
|
- lib/metka/version.rb
|
200
233
|
- metka.gemspec
|
@@ -210,14 +243,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
210
243
|
requirements:
|
211
244
|
- - ">="
|
212
245
|
- !ruby/object:Gem::Version
|
213
|
-
version: '
|
246
|
+
version: '2.5'
|
214
247
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
215
248
|
requirements:
|
216
249
|
- - ">="
|
217
250
|
- !ruby/object:Gem::Version
|
218
251
|
version: '0'
|
219
252
|
requirements: []
|
220
|
-
rubygems_version: 3.0.
|
253
|
+
rubygems_version: 3.0.3
|
221
254
|
signing_key:
|
222
255
|
specification_version: 4
|
223
256
|
summary: Rails tagging system based on PostgreSQL arrays
|