acts-as-taggable-on 2.2.1 → 2.2.2
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.
data/README.rdoc
CHANGED
@@ -81,10 +81,15 @@ compatibility with the will_paginate gem:
|
|
81
81
|
# Find a user with any of the tags:
|
82
82
|
User.tagged_with(["awesome", "cool"], :any => true)
|
83
83
|
|
84
|
+
# Find a user that not tags with awesome or cool:
|
85
|
+
User.tagged_with(["awesome", "cool"], :exclude => true)
|
86
|
+
|
84
87
|
# Find a user with any of tags based on context:
|
85
88
|
User.tagged_with(['awesome, cool'], :on => :tags, :any => true).tagged_with(['smart', 'shy'], :on => :skills, :any => true)
|
86
89
|
|
87
|
-
|
90
|
+
You can also use :wild => true option along with :any or :exclude option. It will looking for %awesome% and %cool% in sql.
|
91
|
+
|
92
|
+
Tip: User.tagged_with([]) or '' will return [], but not all records.
|
88
93
|
|
89
94
|
=== Relationships
|
90
95
|
|
data/acts-as-taggable-on.gemspec
CHANGED
@@ -4,13 +4,13 @@ require 'acts-as-taggable-on/version'
|
|
4
4
|
Gem::Specification.new do |gem|
|
5
5
|
gem.name = %q{acts-as-taggable-on}
|
6
6
|
gem.authors = ["Michael Bleigh"]
|
7
|
-
gem.date = %q{
|
7
|
+
gem.date = %q{2012-01-06}
|
8
8
|
gem.description = %q{With ActsAsTaggableOn, you can tag a single model on several contexts, such as skills, interests, and awards. It also provides other advanced functionality.}
|
9
9
|
gem.summary = "Advanced tagging for Rails."
|
10
10
|
gem.email = %q{michael@intridea.com}
|
11
11
|
gem.homepage = ''
|
12
12
|
|
13
|
-
gem.add_runtime_dependency 'rails', '~> 3.
|
13
|
+
gem.add_runtime_dependency 'rails', '~> 3.0'
|
14
14
|
gem.add_development_dependency 'rspec', '~> 2.5'
|
15
15
|
gem.add_development_dependency 'ammeter', '~> 0.1.3'
|
16
16
|
gem.add_development_dependency 'sqlite3'
|
@@ -81,12 +81,22 @@ module ActsAsTaggableOn::Taggable
|
|
81
81
|
alias_base_name = undecorated_table_name.gsub('.','_')
|
82
82
|
|
83
83
|
if options.delete(:exclude)
|
84
|
-
|
84
|
+
if options.delete(:wild)
|
85
|
+
tags_conditions = tag_list.map { |t| sanitize_sql(["#{ActsAsTaggableOn::Tag.table_name}.name #{like_operator} ? ESCAPE '!'", "%#{escape_like(t)}%"]) }.join(" OR ")
|
86
|
+
else
|
87
|
+
tags_conditions = tag_list.map { |t| sanitize_sql(["#{ActsAsTaggableOn::Tag.table_name}.name #{like_operator} ?", t]) }.join(" OR ")
|
88
|
+
end
|
89
|
+
|
85
90
|
conditions << "#{table_name}.#{primary_key} NOT IN (SELECT #{ActsAsTaggableOn::Tagging.table_name}.taggable_id FROM #{ActsAsTaggableOn::Tagging.table_name} JOIN #{ActsAsTaggableOn::Tag.table_name} ON #{ActsAsTaggableOn::Tagging.table_name}.tag_id = #{ActsAsTaggableOn::Tag.table_name}.#{ActsAsTaggableOn::Tag.primary_key} AND (#{tags_conditions}) WHERE #{ActsAsTaggableOn::Tagging.table_name}.taggable_type = #{quote_value(base_class.name)})"
|
86
91
|
|
87
92
|
elsif options.delete(:any)
|
88
93
|
# get tags, drop out if nothing returned (we need at least one)
|
89
|
-
|
94
|
+
if options.delete(:wild)
|
95
|
+
tags = ActsAsTaggableOn::Tag.named_like_any(tag_list)
|
96
|
+
else
|
97
|
+
tags = ActsAsTaggableOn::Tag.named_any(tag_list)
|
98
|
+
end
|
99
|
+
|
90
100
|
return scoped(:conditions => "1 = 0") unless tags.length > 0
|
91
101
|
|
92
102
|
# setup taggings alias so we can chain, ex: items_locations_taggings_awesome_cool_123
|
@@ -107,8 +117,8 @@ module ActsAsTaggableOn::Taggable
|
|
107
117
|
joins << tagging_join
|
108
118
|
|
109
119
|
else
|
110
|
-
tags = ActsAsTaggableOn::Tag.named_any(tag_list)
|
111
|
-
return empty_result unless tags.length == tag_list.length
|
120
|
+
tags = ActsAsTaggableOn::Tag.named_any(tag_list)
|
121
|
+
return empty_result unless tags.length == tag_list.length
|
112
122
|
|
113
123
|
tags.each do |tag|
|
114
124
|
|
@@ -218,12 +218,25 @@ describe "Taggable" do
|
|
218
218
|
TaggableModel.tagged_with(["depressed", "css"], :order => 'taggable_models.name', :any => true).to_a.should == [bob, frank]
|
219
219
|
end
|
220
220
|
|
221
|
+
context "wild: true" do
|
222
|
+
it "should use params as wildcards" do
|
223
|
+
bob = TaggableModel.create(:name => "Bob", :tag_list => "bob, tricia")
|
224
|
+
frank = TaggableModel.create(:name => "Frank", :tag_list => "bobby, jim")
|
225
|
+
steve = TaggableModel.create(:name => "Steve", :tag_list => "john, patricia")
|
226
|
+
jim = TaggableModel.create(:name => "Jim", :tag_list => "jim, steve")
|
227
|
+
|
228
|
+
|
229
|
+
TaggableModel.tagged_with(["bob", "tricia"], :wild => true, :any => true).to_a.should == [bob, frank, steve]
|
230
|
+
TaggableModel.tagged_with(["bob", "tricia"], :wild => true, :exclude => true).to_a.should == [jim]
|
231
|
+
end
|
232
|
+
end
|
233
|
+
|
221
234
|
it "should be able to find tagged on a custom tag context" do
|
222
235
|
bob = TaggableModel.create(:name => "Bob")
|
223
236
|
bob.set_tag_list_on(:rotors, "spinning, jumping")
|
224
237
|
bob.tag_list_on(:rotors).should == ["spinning","jumping"]
|
225
238
|
bob.save
|
226
|
-
|
239
|
+
|
227
240
|
TaggableModel.tagged_with("spinning", :on => :rotors).to_a.should == [bob]
|
228
241
|
end
|
229
242
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: acts-as-taggable-on
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.2.
|
4
|
+
version: 2.2.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,22 +9,22 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2012-01-06 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
16
|
-
requirement: &
|
16
|
+
requirement: &70356686875400 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: '3.
|
21
|
+
version: '3.0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70356686875400
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rspec
|
27
|
-
requirement: &
|
27
|
+
requirement: &70356686901300 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '2.5'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70356686901300
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: ammeter
|
38
|
-
requirement: &
|
38
|
+
requirement: &70356686900800 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: 0.1.3
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70356686900800
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: sqlite3
|
49
|
-
requirement: &
|
49
|
+
requirement: &70356686900420 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70356686900420
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: mysql2
|
60
|
-
requirement: &
|
60
|
+
requirement: &70356686899780 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ~>
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: 0.3.7
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *70356686899780
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: pg
|
71
|
-
requirement: &
|
71
|
+
requirement: &70356686899280 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: '0'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *70356686899280
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: guard
|
82
|
-
requirement: &
|
82
|
+
requirement: &70356686898580 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ! '>='
|
@@ -87,10 +87,10 @@ dependencies:
|
|
87
87
|
version: '0'
|
88
88
|
type: :development
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *70356686898580
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: guard-rspec
|
93
|
-
requirement: &
|
93
|
+
requirement: &70356686897920 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - ! '>='
|
@@ -98,7 +98,7 @@ dependencies:
|
|
98
98
|
version: '0'
|
99
99
|
type: :development
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *70356686897920
|
102
102
|
description: With ActsAsTaggableOn, you can tag a single model on several contexts,
|
103
103
|
such as skills, interests, and awards. It also provides other advanced functionality.
|
104
104
|
email: michael@intridea.com
|
@@ -163,7 +163,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
163
163
|
version: '0'
|
164
164
|
segments:
|
165
165
|
- 0
|
166
|
-
hash: -
|
166
|
+
hash: -1793358145648125
|
167
167
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
168
168
|
none: false
|
169
169
|
requirements:
|
@@ -172,7 +172,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
172
172
|
version: '0'
|
173
173
|
segments:
|
174
174
|
- 0
|
175
|
-
hash: -
|
175
|
+
hash: -1793358145648125
|
176
176
|
requirements: []
|
177
177
|
rubyforge_project:
|
178
178
|
rubygems_version: 1.8.10
|