acts-as-taggable-array-on 0.2.1 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d434088f73e146383bb7123506e8d4b7d89e1706
4
- data.tar.gz: f046f099ce1f5cad0497278767661d8f73cceda7
3
+ metadata.gz: d7015d2509416188e45cc5c3cf1504167a311a96
4
+ data.tar.gz: 96d19346e51a44233258a2b150a9b3eeb80c6633
5
5
  SHA512:
6
- metadata.gz: a80faa85b005eab8e8bcf87d1ce09f4c319a912c0e1b5e593318aca0f9e72ea8b19544d4213df4855ce11bf4244f45ba77aeb46803acdcee639015cb9ec77537
7
- data.tar.gz: 63b9d87fc308d757bad3b99178c2d454828ecd54b3e086ebd7de464e3765750acc61aaa4e9ef9919469a7f87bc68be90f2009b9320eaa4c2e76a05bc7fa9ec36
6
+ metadata.gz: c81cef96b1bb5a2c418760dcafd67f68161708cd73bfebdcc89eebdb512bc162e6500c56298e7c5f671d8cf2f2b8d696cfefe9263c7776271dcfcac49ff4fec8
7
+ data.tar.gz: 269914c72de99a97d53ec456b1071e8d43ebeb031c608b102919d77e33dd06757d6ffadee571949672dd700719a94ecb8e9898a434fcc8c5998fbcad24edd6d1
@@ -2,6 +2,7 @@ language: ruby
2
2
  rvm:
3
3
  - 2.0.0
4
4
  - 2.1.1
5
+ - 2.1.2
5
6
  addons:
6
7
  postgresql: 9.3
7
8
  gemfile:
data/README.md CHANGED
@@ -1,7 +1,8 @@
1
1
  # ActsAsTaggableArrayOn
2
2
  [![Build Status](https://travis-ci.org/tmiyamon/acts-as-taggable-array-on.svg?branch=master)](https://travis-ci.org/tmiyamon/acts-as-taggable-array-on)
3
3
 
4
- A simple implementation for tagging sysytem with postgres array.
4
+ A simple implementation for tagging system with postgres array.
5
+ So, this gem works only on postgres.
5
6
 
6
7
 
7
8
  ## Installation
@@ -27,7 +28,7 @@ To use it, you need to have an array column to act as taggable.
27
28
  class CreateUser < ActiveRecord::Migration
28
29
  def change
29
30
  create_table :users do |t|
30
- t.text :tags, array: true, default: '{}'
31
+ t.string :tags, array: true, default: '{}'
31
32
  t.timestamps
32
33
  end
33
34
  add_index :users, :tags, using: 'gin'
@@ -92,16 +93,20 @@ class User < ActiveRecord::Base
92
93
  end
93
94
 
94
95
  # Find a user with all of the tags
95
- User.with_all_tags("awesome")
96
+ User.with_all_tags("awesome, slick")
97
+ User.with_all_tags(["awesome", "slick"])
96
98
 
97
99
  # Find a user with any of the tags
98
- User.with_any_tags("awesome")
100
+ User.with_any_tags("awesome, slick")
101
+ User.with_any_tags(["awesome", "slick"])
99
102
 
100
103
  # Find a user without all of the tags
101
- User.without_all_tags("awesome")
104
+ User.without_all_tags("awesome, slick")
105
+ User.without_all_tags(["awesome", "slick"])
102
106
 
103
107
  # Find a user without any of the tags
104
- User.without_any_tags("awesome")
108
+ User.without_any_tags("awesome, slick")
109
+ User.without_any_tags(["awesome", "slick"])
105
110
 
106
111
  # Chain with the other scopes
107
112
  User.with_any_tags("awesome").without_any_tags("slick").by_join_date.paginate(:page => params[:page], :per_page => 20)
@@ -2,6 +2,7 @@ require 'active_record'
2
2
 
3
3
  require "acts-as-taggable-array-on/version"
4
4
  require "acts-as-taggable-array-on/taggable"
5
+ require "acts-as-taggable-array-on/parser"
5
6
 
6
7
  ActiveSupport.on_load(:active_record) do
7
8
  include ActsAsTaggableArrayOn::Taggable
@@ -0,0 +1,16 @@
1
+ module ActsAsTaggableArrayOn
2
+ class Parser
3
+ def parse tags
4
+ case tags
5
+ when String
6
+ tags.split(/[ ]*,[ ]*/)
7
+ else
8
+ tags
9
+ end
10
+ end
11
+ end
12
+
13
+ def self.parser
14
+ @parser ||= Parser.new
15
+ end
16
+ end
@@ -7,11 +7,12 @@ module ActsAsTaggableArrayOn
7
7
  module ClassMethod
8
8
  def acts_as_taggable_array_on(*tag_def)
9
9
  tag_name = tag_def.first
10
+ parser = ActsAsTaggableArrayOn.parser
10
11
 
11
- scope :"with_any_#{tag_name}", ->(* tags){where("#{tag_name} && ARRAY[?]", tags)}
12
- scope :"with_all_#{tag_name}", ->(* tags){where("#{tag_name} @> ARRAY[?]", tags)}
13
- scope :"without_any_#{tag_name}", ->(* tags){where.not("#{tag_name} && ARRAY[?]", tags)}
14
- scope :"without_all_#{tag_name}", ->(* tags){where.not("#{tag_name} @> ARRAY[?]", tags)}
12
+ scope :"with_any_#{tag_name}", ->(tags){ where("#{tag_name} && ARRAY[?]::varchar[]", parser.parse(tags)) }
13
+ scope :"with_all_#{tag_name}", ->(tags){ where("#{tag_name} @> ARRAY[?]::varchar[]", parser.parse(tags)) }
14
+ scope :"without_any_#{tag_name}", ->(tags){ where.not("#{tag_name} && ARRAY[?]::varchar[]", parser.parse(tags)) }
15
+ scope :"without_all_#{tag_name}", ->(tags){ where.not("#{tag_name} @> ARRAY[?]::varchar[]", parser.parse(tags)) }
15
16
 
16
17
  self.class.class_eval do
17
18
  define_method :"all_#{tag_name}" do |options = {}, &block|
@@ -1,3 +1,3 @@
1
1
  module ActsAsTagPgarray
2
- VERSION = "0.2.1"
2
+ VERSION = "0.3.0"
3
3
  end
@@ -0,0 +1,22 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActsAsTaggableArrayOn::Parser do
4
+ let(:parser) { ActsAsTaggableArrayOn.parser }
5
+
6
+ describe '#parse' do
7
+ it "return unprocessed tags if array" do
8
+ tags = %w(red green)
9
+ expect(parser.parse(tags)).to eq tags
10
+ end
11
+
12
+ it "return parsed tags if comma separated string" do
13
+ tags = 'red,green'
14
+ expect(parser.parse(tags)).to eq %w(red green)
15
+ end
16
+
17
+ it "return parsed tags if comma separated string including white spaces" do
18
+ tags = 'red , gre en'
19
+ expect(parser.parse(tags)).to eq ['red', 'gre en']
20
+ end
21
+ end
22
+ end
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe ActsAsTaggableArrayOn::Taggable do
4
- before do
4
+ before do
5
5
  @user1 = User.create name: 'Tom', colors: ['red', 'blue']
6
6
  @user2 = User.create name: 'Ken', colors: ['black', 'white', 'red']
7
7
  @user3 = User.create name: 'Joe', colors: ['black', 'blue']
@@ -26,25 +26,29 @@ describe ActsAsTaggableArrayOn::Taggable do
26
26
 
27
27
  describe "#with_any_tags" do
28
28
  it "returns users having any tags of args" do
29
- expect(User.with_any_colors('red', 'blue')).to match_array([@user1,@user2,@user3])
29
+ expect(User.with_any_colors(['red', 'blue'])).to match_array([@user1,@user2,@user3])
30
+ expect(User.with_any_colors('red, blue')).to match_array([@user1,@user2,@user3])
30
31
  end
31
32
  end
32
33
 
33
34
  describe "#with_all_tags" do
34
35
  it "returns users having all tags of args" do
35
- expect(User.with_all_colors('red', 'blue')).to match_array([@user1])
36
+ expect(User.with_all_colors(['red', 'blue'])).to match_array([@user1])
37
+ expect(User.with_all_colors('red, blue')).to match_array([@user1])
36
38
  end
37
39
  end
38
-
40
+
39
41
  describe "#without_any_tags" do
40
- it "returns users having any tags of args" do
41
- expect(User.without_any_colors('red', 'blue')).to match_array([])
42
+ it "returns users not having any tags of args" do
43
+ expect(User.without_any_colors(['red', 'blue'])).to match_array([])
44
+ expect(User.without_any_colors('red, blue')).to match_array([])
42
45
  end
43
46
  end
44
47
 
45
48
  describe "#without_all_tags" do
46
- it "returns users having all tags of args" do
47
- expect(User.without_all_colors('red', 'blue')).to match_array([@user2,@user3])
49
+ it "returns users not having all tags of args" do
50
+ expect(User.without_all_colors(['red', 'blue'])).to match_array([@user2,@user3])
51
+ expect(User.without_all_colors('red, blue')).to match_array([@user2,@user3])
48
52
  end
49
53
  end
50
54
 
@@ -37,7 +37,7 @@ def create_database
37
37
  ActiveRecord::Schema.define(:version => 1) do
38
38
  create_table :users do |t|
39
39
  t.string :name
40
- t.text :colors, array: true, defualt: '{}'
40
+ t.string :colors, array: true, defualt: '{}'
41
41
  t.timestamps
42
42
  end
43
43
  end
metadata CHANGED
@@ -1,123 +1,123 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: acts-as-taggable-array-on
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Takuya Miyamoto
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-06 00:00:00.000000000 Z
11
+ date: 2014-10-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '4'
20
- - - <
20
+ - - "<"
21
21
  - !ruby/object:Gem::Version
22
22
  version: '5'
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
- - - '>='
27
+ - - ">="
28
28
  - !ruby/object:Gem::Version
29
29
  version: '4'
30
- - - <
30
+ - - "<"
31
31
  - !ruby/object:Gem::Version
32
32
  version: '5'
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: activesupport
35
35
  requirement: !ruby/object:Gem::Requirement
36
36
  requirements:
37
- - - '>='
37
+ - - ">="
38
38
  - !ruby/object:Gem::Version
39
39
  version: '4'
40
- - - <
40
+ - - "<"
41
41
  - !ruby/object:Gem::Version
42
42
  version: '5'
43
43
  type: :runtime
44
44
  prerelease: false
45
45
  version_requirements: !ruby/object:Gem::Requirement
46
46
  requirements:
47
- - - '>='
47
+ - - ">="
48
48
  - !ruby/object:Gem::Version
49
49
  version: '4'
50
- - - <
50
+ - - "<"
51
51
  - !ruby/object:Gem::Version
52
52
  version: '5'
53
53
  - !ruby/object:Gem::Dependency
54
54
  name: pg
55
55
  requirement: !ruby/object:Gem::Requirement
56
56
  requirements:
57
- - - '>='
57
+ - - ">="
58
58
  - !ruby/object:Gem::Version
59
59
  version: '0'
60
60
  type: :development
61
61
  prerelease: false
62
62
  version_requirements: !ruby/object:Gem::Requirement
63
63
  requirements:
64
- - - '>='
64
+ - - ">="
65
65
  - !ruby/object:Gem::Version
66
66
  version: '0'
67
67
  - !ruby/object:Gem::Dependency
68
68
  name: bundler
69
69
  requirement: !ruby/object:Gem::Requirement
70
70
  requirements:
71
- - - ~>
71
+ - - "~>"
72
72
  - !ruby/object:Gem::Version
73
73
  version: '1.5'
74
74
  type: :development
75
75
  prerelease: false
76
76
  version_requirements: !ruby/object:Gem::Requirement
77
77
  requirements:
78
- - - ~>
78
+ - - "~>"
79
79
  - !ruby/object:Gem::Version
80
80
  version: '1.5'
81
81
  - !ruby/object:Gem::Dependency
82
82
  name: rake
83
83
  requirement: !ruby/object:Gem::Requirement
84
84
  requirements:
85
- - - '>='
85
+ - - ">="
86
86
  - !ruby/object:Gem::Version
87
87
  version: '0'
88
88
  type: :development
89
89
  prerelease: false
90
90
  version_requirements: !ruby/object:Gem::Requirement
91
91
  requirements:
92
- - - '>='
92
+ - - ">="
93
93
  - !ruby/object:Gem::Version
94
94
  version: '0'
95
95
  - !ruby/object:Gem::Dependency
96
96
  name: rspec-rails
97
97
  requirement: !ruby/object:Gem::Requirement
98
98
  requirements:
99
- - - '>='
99
+ - - ">="
100
100
  - !ruby/object:Gem::Version
101
101
  version: '0'
102
102
  type: :development
103
103
  prerelease: false
104
104
  version_requirements: !ruby/object:Gem::Requirement
105
105
  requirements:
106
- - - '>='
106
+ - - ">="
107
107
  - !ruby/object:Gem::Version
108
108
  version: '0'
109
109
  - !ruby/object:Gem::Dependency
110
110
  name: guard-rspec
111
111
  requirement: !ruby/object:Gem::Requirement
112
112
  requirements:
113
- - - '>='
113
+ - - ">="
114
114
  - !ruby/object:Gem::Version
115
115
  version: '0'
116
116
  type: :development
117
117
  prerelease: false
118
118
  version_requirements: !ruby/object:Gem::Requirement
119
119
  requirements:
120
- - - '>='
120
+ - - ">="
121
121
  - !ruby/object:Gem::Version
122
122
  version: '0'
123
123
  description: Simple tagging gem for Rails using postgres array.
@@ -127,8 +127,8 @@ executables: []
127
127
  extensions: []
128
128
  extra_rdoc_files: []
129
129
  files:
130
- - .gitignore
131
- - .travis.yml
130
+ - ".gitignore"
131
+ - ".travis.yml"
132
132
  - Gemfile
133
133
  - Guardfile
134
134
  - LICENSE.txt
@@ -136,8 +136,10 @@ files:
136
136
  - Rakefile
137
137
  - acts-as-taggable-array-on.gemspec
138
138
  - lib/acts-as-taggable-array-on.rb
139
+ - lib/acts-as-taggable-array-on/parser.rb
139
140
  - lib/acts-as-taggable-array-on/taggable.rb
140
141
  - lib/acts-as-taggable-array-on/version.rb
142
+ - spec/acts_as_tag_pgarray/parser_spec.rb
141
143
  - spec/acts_as_tag_pgarray/taggable_spec.rb
142
144
  - spec/spec_helper.rb
143
145
  - spec_helper.rb
@@ -151,12 +153,12 @@ require_paths:
151
153
  - lib
152
154
  required_ruby_version: !ruby/object:Gem::Requirement
153
155
  requirements:
154
- - - '>='
156
+ - - ">="
155
157
  - !ruby/object:Gem::Version
156
158
  version: '0'
157
159
  required_rubygems_version: !ruby/object:Gem::Requirement
158
160
  requirements:
159
- - - '>='
161
+ - - ">="
160
162
  - !ruby/object:Gem::Version
161
163
  version: '0'
162
164
  requirements: []
@@ -166,5 +168,6 @@ signing_key:
166
168
  specification_version: 4
167
169
  summary: Simple tagging gem for Rails using postgres array.
168
170
  test_files:
171
+ - spec/acts_as_tag_pgarray/parser_spec.rb
169
172
  - spec/acts_as_tag_pgarray/taggable_spec.rb
170
173
  - spec/spec_helper.rb