acts-as-taggable-array-on 0.4.2 → 0.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.editorconfig +13 -0
- data/.travis.yml +1 -2
- data/README.md +3 -0
- data/Rakefile +8 -0
- data/acts-as-taggable-array-on.gemspec +1 -0
- data/lib/acts-as-taggable-array-on/taggable.rb +5 -5
- data/lib/acts-as-taggable-array-on/version.rb +1 -1
- data/spec/acts_as_tag_pgarray/taggable_spec.rb +26 -0
- data/spec/spec_helper.rb +1 -0
- metadata +18 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 6e9634fcc6fb7b4ddff2df2ae5e71bd237e89dcfbebdbec0cecc9d414d095821
|
4
|
+
data.tar.gz: 33745344b55b6a5ec70e530d530ccab286e606cfa925dc3cc06899b9f0bba54d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d4ef02fa959e7e24bfd78eb338de5b7f05d6a139357766db145c158f547a31af119d9e9a566180fdb3764ee98484f962e0619e00bf61cb0fb62a981137a84ff6
|
7
|
+
data.tar.gz: 75419a2e0d898ab7f6ce2a3a61e24298b8635e4a4bea5c3d87f95449b155bf260e42f53ff39470bccfd0d408e5ad195d09ac37885beff858f3419effa146e9a1
|
data/.editorconfig
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
# top-most EditorConfig file
|
2
|
+
root = true
|
3
|
+
|
4
|
+
# Unix-style newlines with a newline ending every file
|
5
|
+
# Two spaces for indenting
|
6
|
+
[*]
|
7
|
+
end_of_line = lf
|
8
|
+
insert_final_newline = true
|
9
|
+
indent_style = space
|
10
|
+
indent_size = 2
|
11
|
+
charset = utf-8
|
12
|
+
trim_trailing_whitespace = true
|
13
|
+
max_line_length = 120
|
data/.travis.yml
CHANGED
@@ -12,8 +12,7 @@ gemfile:
|
|
12
12
|
- gemfiles/rails_4.gemfile
|
13
13
|
- gemfiles/rails_5.gemfile
|
14
14
|
before_script:
|
15
|
-
-
|
16
|
-
- createdb --username=acts-as-taggable-array-on acts-as-taggable-array-on_test
|
15
|
+
- bundle exec rake db:create
|
17
16
|
script:
|
18
17
|
- bundle
|
19
18
|
- bundle exec rspec
|
data/README.md
CHANGED
@@ -216,6 +216,9 @@ Using Postgres Arrays 0.030000 0.000000 0.030000 ( 0.033001)
|
|
216
216
|
rake bench:write bench:find_by_id bench:find_by_tag 20.29s user 1.52s system 77% cpu 28.322 total
|
217
217
|
```
|
218
218
|
|
219
|
+
## Development
|
220
|
+
To run testsuite you'll need to setup local PG database/user with `rake db:create`
|
221
|
+
After that just running `rspec` should work.
|
219
222
|
|
220
223
|
## Contributing
|
221
224
|
|
data/Rakefile
CHANGED
@@ -1 +1,9 @@
|
|
1
1
|
require "bundler/gem_tasks"
|
2
|
+
|
3
|
+
namespace :db do
|
4
|
+
desc "Create database for tests"
|
5
|
+
task :create do
|
6
|
+
puts %x( createuser -d acts-as-taggable-array-on -U postgres )
|
7
|
+
puts %x( createdb --username=acts-as-taggable-array-on acts-as-taggable-array-on_test )
|
8
|
+
end
|
9
|
+
end
|
@@ -11,13 +11,13 @@ module ActsAsTaggableArrayOn
|
|
11
11
|
module ClassMethod
|
12
12
|
def acts_as_taggable_array_on(*tag_def)
|
13
13
|
tag_name = tag_def.first
|
14
|
-
tag_array_type = TYPE_MATCHER[columns_hash[tag_name.to_s].type]
|
14
|
+
tag_array_type = TYPE_MATCHER[columns_hash[tag_name.to_s].try(:type)]
|
15
15
|
parser = ActsAsTaggableArrayOn.parser
|
16
16
|
|
17
|
-
scope :"with_any_#{tag_name}", ->(tags){ where("#{tag_name} && ARRAY[?]::#{tag_array_type}[]", parser.parse(tags)) }
|
18
|
-
scope :"with_all_#{tag_name}", ->(tags){ where("#{tag_name} @> ARRAY[?]::#{tag_array_type}[]", parser.parse(tags)) }
|
19
|
-
scope :"without_any_#{tag_name}", ->(tags){ where.not("#{tag_name} && ARRAY[?]::#{tag_array_type}[]", parser.parse(tags)) }
|
20
|
-
scope :"without_all_#{tag_name}", ->(tags){ where.not("#{tag_name} @> ARRAY[?]::#{tag_array_type}[]", parser.parse(tags)) }
|
17
|
+
scope :"with_any_#{tag_name}", ->(tags){ where("#{table_name}.#{tag_name} && ARRAY[?]::#{tag_array_type}[]", parser.parse(tags)) }
|
18
|
+
scope :"with_all_#{tag_name}", ->(tags){ where("#{table_name}.#{tag_name} @> ARRAY[?]::#{tag_array_type}[]", parser.parse(tags)) }
|
19
|
+
scope :"without_any_#{tag_name}", ->(tags){ where.not("#{table_name}.#{tag_name} && ARRAY[?]::#{tag_array_type}[]", parser.parse(tags)) }
|
20
|
+
scope :"without_all_#{tag_name}", ->(tags){ where.not("#{table_name}.#{tag_name} @> ARRAY[?]::#{tag_array_type}[]", parser.parse(tags)) }
|
21
21
|
|
22
22
|
self.class.class_eval do
|
23
23
|
define_method :"all_#{tag_name}" do |options = {}, &block|
|
@@ -11,6 +11,18 @@ describe ActsAsTaggableArrayOn::Taggable do
|
|
11
11
|
User.acts_as_taggable_array_on :codes
|
12
12
|
end
|
13
13
|
|
14
|
+
|
15
|
+
context "without database table" do
|
16
|
+
it "doesn't fail on class method call" do
|
17
|
+
Temping.create :dummy
|
18
|
+
|
19
|
+
class Dummy < ActiveRecord::Base; end
|
20
|
+
Dummy.acts_as_taggable_array_on :tags
|
21
|
+
|
22
|
+
Temping.teardown
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
14
26
|
describe "#acts_as_taggable_array_on" do
|
15
27
|
it "defines named scope to match any tags" do
|
16
28
|
expect(User).to respond_to(:with_any_colors)
|
@@ -26,6 +38,20 @@ describe ActsAsTaggableArrayOn::Taggable do
|
|
26
38
|
end
|
27
39
|
end
|
28
40
|
|
41
|
+
it 'should define table name un-ambiguously' do
|
42
|
+
sql = User.with_any_sizes(['small']).to_sql
|
43
|
+
expect(sql).to eql("SELECT \"users\".* FROM \"users\" WHERE (users.sizes && ARRAY['small']::text[])")
|
44
|
+
|
45
|
+
sql = User.with_all_sizes(['small']).to_sql
|
46
|
+
expect(sql).to eql("SELECT \"users\".* FROM \"users\" WHERE (users.sizes @> ARRAY['small']::text[])")
|
47
|
+
|
48
|
+
sql = User.without_any_sizes(['small']).to_sql
|
49
|
+
expect(sql).to eql("SELECT \"users\".* FROM \"users\" WHERE (NOT (users.sizes && ARRAY['small']::text[]))")
|
50
|
+
|
51
|
+
sql = User.without_all_sizes(['small']).to_sql
|
52
|
+
expect(sql).to eql("SELECT \"users\".* FROM \"users\" WHERE (NOT (users.sizes @> ARRAY['small']::text[]))")
|
53
|
+
end
|
54
|
+
|
29
55
|
it "should work with ::text typed array" do
|
30
56
|
expect(User.with_any_sizes(['small'])).to match_array([@user2,@user3])
|
31
57
|
expect(User.with_all_sizes(['small', 'large'])).to match_array([@user2,@user3])
|
data/spec/spec_helper.rb
CHANGED
@@ -2,6 +2,7 @@ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
|
2
2
|
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
3
3
|
require 'rspec'
|
4
4
|
require 'active_record/railtie'
|
5
|
+
require 'temping'
|
5
6
|
ActiveRecord::Base.logger = Logger.new(STDERR)
|
6
7
|
ActiveRecord::Base.logger.level = 3
|
7
8
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: acts-as-taggable-array-on
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: '0.5'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Takuya Miyamoto
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-07-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -122,6 +122,20 @@ dependencies:
|
|
122
122
|
- - "~>"
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: 3.0.0
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: temping
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
125
139
|
description: Simple tagging gem for Rails using postgres array.
|
126
140
|
email:
|
127
141
|
- miyamototakuya@gmail.com
|
@@ -129,6 +143,7 @@ executables: []
|
|
129
143
|
extensions: []
|
130
144
|
extra_rdoc_files: []
|
131
145
|
files:
|
146
|
+
- ".editorconfig"
|
132
147
|
- ".gitignore"
|
133
148
|
- ".travis.yml"
|
134
149
|
- Gemfile
|
@@ -167,7 +182,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
167
182
|
version: '0'
|
168
183
|
requirements: []
|
169
184
|
rubyforge_project:
|
170
|
-
rubygems_version: 2.6
|
185
|
+
rubygems_version: 2.7.6
|
171
186
|
signing_key:
|
172
187
|
specification_version: 4
|
173
188
|
summary: Simple tagging gem for Rails using postgres array.
|