acts-as-taggable-array-on 0.2.1 → 0.3.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 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