acts-as-taggable-on 2.3.3 → 2.4.0.beta

Sign up to get free protection for your applications and to get access to all the features.
data/spec/models.rb CHANGED
@@ -4,6 +4,12 @@ class TaggableModel < ActiveRecord::Base
4
4
  acts_as_taggable_on :skills
5
5
  acts_as_taggable_on :needs, :offerings
6
6
  has_many :untaggable_models
7
+
8
+ attr_reader :tag_list_submethod_called
9
+ def tag_list=v
10
+ @tag_list_submethod_called = true
11
+ super
12
+ end
7
13
  end
8
14
 
9
15
  class CachedModel < ActiveRecord::Base
metadata CHANGED
@@ -1,8 +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.3.3
5
- prerelease:
4
+ version: 2.4.0.beta
6
5
  platform: ruby
7
6
  authors:
8
7
  - Michael Bleigh
@@ -13,92 +12,116 @@ date: 2012-07-16 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: rails
16
- requirement: &70163811858760 !ruby/object:Gem::Requirement
17
- none: false
15
+ requirement: !ruby/object:Gem::Requirement
18
16
  requirements:
19
17
  - - ~>
20
18
  - !ruby/object:Gem::Version
21
19
  version: '3.0'
22
20
  type: :runtime
23
21
  prerelease: false
24
- version_requirements: *70163811858760
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '3.0'
25
27
  - !ruby/object:Gem::Dependency
26
28
  name: rspec
27
- requirement: &70163811858260 !ruby/object:Gem::Requirement
28
- none: false
29
+ requirement: !ruby/object:Gem::Requirement
29
30
  requirements:
30
31
  - - ~>
31
32
  - !ruby/object:Gem::Version
32
33
  version: '2.6'
33
34
  type: :development
34
35
  prerelease: false
35
- version_requirements: *70163811858260
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '2.6'
36
41
  - !ruby/object:Gem::Dependency
37
42
  name: ammeter
38
- requirement: &70163811857800 !ruby/object:Gem::Requirement
39
- none: false
43
+ requirement: !ruby/object:Gem::Requirement
40
44
  requirements:
41
45
  - - ~>
42
46
  - !ruby/object:Gem::Version
43
47
  version: 0.1.3
44
48
  type: :development
45
49
  prerelease: false
46
- version_requirements: *70163811857800
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: 0.1.3
47
55
  - !ruby/object:Gem::Dependency
48
56
  name: sqlite3
49
- requirement: &70163811875300 !ruby/object:Gem::Requirement
50
- none: false
57
+ requirement: !ruby/object:Gem::Requirement
51
58
  requirements:
52
- - - ! '>='
59
+ - - '>='
53
60
  - !ruby/object:Gem::Version
54
61
  version: '0'
55
62
  type: :development
56
63
  prerelease: false
57
- version_requirements: *70163811875300
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
58
69
  - !ruby/object:Gem::Dependency
59
70
  name: mysql2
60
- requirement: &70163811874540 !ruby/object:Gem::Requirement
61
- none: false
71
+ requirement: !ruby/object:Gem::Requirement
62
72
  requirements:
63
73
  - - ~>
64
74
  - !ruby/object:Gem::Version
65
75
  version: 0.3.7
66
76
  type: :development
67
77
  prerelease: false
68
- version_requirements: *70163811874540
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ~>
81
+ - !ruby/object:Gem::Version
82
+ version: 0.3.7
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: pg
71
- requirement: &70163811873760 !ruby/object:Gem::Requirement
72
- none: false
85
+ requirement: !ruby/object:Gem::Requirement
73
86
  requirements:
74
- - - ! '>='
87
+ - - '>='
75
88
  - !ruby/object:Gem::Version
76
89
  version: '0'
77
90
  type: :development
78
91
  prerelease: false
79
- version_requirements: *70163811873760
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
80
97
  - !ruby/object:Gem::Dependency
81
98
  name: guard
82
- requirement: &70163811872980 !ruby/object:Gem::Requirement
83
- none: false
99
+ requirement: !ruby/object:Gem::Requirement
84
100
  requirements:
85
- - - ! '>='
101
+ - - '>='
86
102
  - !ruby/object:Gem::Version
87
103
  version: '0'
88
104
  type: :development
89
105
  prerelease: false
90
- version_requirements: *70163811872980
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
91
111
  - !ruby/object:Gem::Dependency
92
112
  name: guard-rspec
93
- requirement: &70163811872440 !ruby/object:Gem::Requirement
94
- none: false
113
+ requirement: !ruby/object:Gem::Requirement
95
114
  requirements:
96
- - - ! '>='
115
+ - - '>='
97
116
  - !ruby/object:Gem::Version
98
117
  version: '0'
99
118
  type: :development
100
119
  prerelease: false
101
- version_requirements: *70163811872440
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - '>='
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
102
125
  description: With ActsAsTaggableOn, you can tag a single model on several contexts,
103
126
  such as skills, interests, and awards. It also provides other advanced functionality.
104
127
  email: michael@intridea.com
@@ -109,11 +132,11 @@ files:
109
132
  - .gitignore
110
133
  - .rspec
111
134
  - .travis.yml
112
- - CHANGELOG
135
+ - CHANGELOG.md
113
136
  - Gemfile
114
137
  - Guardfile
115
- - MIT-LICENSE
116
- - README.rdoc
138
+ - MIT-LICENSE.md
139
+ - README.md
117
140
  - Rakefile
118
141
  - acts-as-taggable-on.gemspec
119
142
  - lib/acts-as-taggable-on.rb
@@ -152,33 +175,26 @@ files:
152
175
  - uninstall.rb
153
176
  homepage: ''
154
177
  licenses: []
178
+ metadata: {}
155
179
  post_install_message:
156
180
  rdoc_options: []
157
181
  require_paths:
158
182
  - lib
159
183
  required_ruby_version: !ruby/object:Gem::Requirement
160
- none: false
161
184
  requirements:
162
- - - ! '>='
185
+ - - '>='
163
186
  - !ruby/object:Gem::Version
164
187
  version: '0'
165
- segments:
166
- - 0
167
- hash: -1816807933576177649
168
188
  required_rubygems_version: !ruby/object:Gem::Requirement
169
- none: false
170
189
  requirements:
171
- - - ! '>='
190
+ - - '>'
172
191
  - !ruby/object:Gem::Version
173
- version: '0'
174
- segments:
175
- - 0
176
- hash: -1816807933576177649
192
+ version: 1.3.1
177
193
  requirements: []
178
194
  rubyforge_project:
179
- rubygems_version: 1.8.10
195
+ rubygems_version: 2.0.0
180
196
  signing_key:
181
- specification_version: 3
197
+ specification_version: 4
182
198
  summary: Advanced tagging for Rails.
183
199
  test_files:
184
200
  - spec/acts_as_taggable_on/acts_as_taggable_on_spec.rb
data/README.rdoc DELETED
@@ -1,244 +0,0 @@
1
- = ActsAsTaggableOn
2
- {<img src="https://secure.travis-ci.org/mbleigh/acts-as-taggable-on.png" />}[http://travis-ci.org/mbleigh/acts-as-taggable-on]
3
-
4
- This plugin was originally based on Acts as Taggable on Steroids by Jonathan Viney.
5
- It has evolved substantially since that point, but all credit goes to him for the
6
- initial tagging functionality that so many people have used.
7
-
8
- For instance, in a social network, a user might have tags that are called skills,
9
- interests, sports, and more. There is no real way to differentiate between tags and
10
- so an implementation of this type is not possible with acts as taggable on steroids.
11
-
12
- Enter Acts as Taggable On. Rather than tying functionality to a specific keyword
13
- (namely "tags"), acts as taggable on allows you to specify an arbitrary number of
14
- tag "contexts" that can be used locally or in combination in the same way steroids
15
- was used.
16
-
17
- == Installation
18
-
19
- === Rails 2.x
20
-
21
- Not supported any more! It is time for update guys.
22
-
23
- === Rails 3.x
24
-
25
- To use it, add it to your Gemfile:
26
-
27
- gem 'acts-as-taggable-on', '~> 2.3.1'
28
-
29
- ==== Post Installation
30
-
31
- 1. rails generate acts_as_taggable_on:migration
32
- 2. rake db:migrate
33
-
34
- == Testing
35
-
36
- Acts As Taggable On uses RSpec for its test coverage. Inside the gem
37
- directory, you can run the specs for RoR 3.x with:
38
-
39
- rake spec
40
-
41
- == Usage
42
-
43
- class User < ActiveRecord::Base
44
- # Alias for <tt>acts_as_taggable_on :tags</tt>:
45
- acts_as_taggable
46
- acts_as_taggable_on :skills, :interests
47
- end
48
-
49
- @user = User.new(:name => "Bobby")
50
- @user.tag_list = "awesome, slick, hefty" # this should be familiar
51
- @user.skill_list = "joking, clowning, boxing" # but you can do it for any context!
52
- @user.skill_list # => ["joking","clowning","boxing"] as TagList
53
- @user.save
54
-
55
- @user.tags # => [<Tag name:"awesome">,<Tag name:"slick">,<Tag name:"hefty">]
56
- @user.skills # => [<Tag name:"joking">,<Tag name:"clowning">,<Tag name:"boxing">]
57
-
58
- @frankie = User.create(:name => "Frankie", :skill_list => "joking, flying, eating")
59
- User.skill_counts # => [<Tag name="joking" count=2>,<Tag name="clowning" count=1>...]
60
- @frankie.skill_counts
61
-
62
- To preserve the order in which tags are created use acts_as_ordered_taggable:
63
-
64
- class User < ActiveRecord::Base
65
- # Alias for <tt>acts_as_ordered_taggable_on :tags</tt>:
66
- acts_as_ordered_taggable
67
- acts_as_ordered_taggable_on :skills, :interests
68
- end
69
-
70
- @user = User.new(:name => "Bobby")
71
- @user.tag_list = "east, south"
72
- @user.save
73
-
74
- @user.tag_list = "north, east, south, west"
75
- @user.save
76
-
77
- @user.reload
78
- @user.tag_list # => ["north", "east", "south", "west"]
79
-
80
-
81
- === Finding Tagged Objects
82
-
83
- Acts As Taggable On utilizes named_scopes to create an association for tags.
84
- This way you can mix and match to filter down your results, and it also improves
85
- compatibility with the will_paginate gem:
86
-
87
- class User < ActiveRecord::Base
88
- acts_as_taggable_on :tags, :skills
89
- scope :by_join_date, order("created_at DESC")
90
- end
91
-
92
- User.tagged_with("awesome").by_date
93
- User.tagged_with("awesome").by_date.paginate(:page => params[:page], :per_page => 20)
94
-
95
- # Find a user with matching all tags, not just one
96
- User.tagged_with(["awesome", "cool"], :match_all => true)
97
-
98
- # Find a user with any of the tags:
99
- User.tagged_with(["awesome", "cool"], :any => true)
100
-
101
- # Find a user that not tags with awesome or cool:
102
- User.tagged_with(["awesome", "cool"], :exclude => true)
103
-
104
- # Find a user with any of tags based on context:
105
- User.tagged_with(['awesome, cool'], :on => :tags, :any => true).tagged_with(['smart', 'shy'], :on => :skills, :any => true)
106
-
107
- You can also use :wild => true option along with :any or :exclude option. It will looking for %awesome% and %cool% in sql.
108
-
109
- Tip: User.tagged_with([]) or '' will return [], but not all records.
110
-
111
- === Relationships
112
-
113
- You can find objects of the same type based on similar tags on certain contexts.
114
- Also, objects will be returned in descending order based on the total number of
115
- matched tags.
116
-
117
- @bobby = User.find_by_name("Bobby")
118
- @bobby.skill_list # => ["jogging", "diving"]
119
-
120
- @frankie = User.find_by_name("Frankie")
121
- @frankie.skill_list # => ["hacking"]
122
-
123
- @tom = User.find_by_name("Tom")
124
- @tom.skill_list # => ["hacking", "jogging", "diving"]
125
-
126
- @tom.find_related_skills # => [<User name="Bobby">,<User name="Frankie">]
127
- @bobby.find_related_skills # => [<User name="Tom">]
128
- @frankie.find_related_skills # => [<User name="Tom">]
129
-
130
- === Dynamic Tag Contexts
131
-
132
- In addition to the generated tag contexts in the definition, it is also possible
133
- to allow for dynamic tag contexts (this could be user generated tag contexts!)
134
-
135
- @user = User.new(:name => "Bobby")
136
- @user.set_tag_list_on(:customs, "same, as, tag, list")
137
- @user.tag_list_on(:customs) # => ["same","as","tag","list"]
138
- @user.save
139
- @user.tags_on(:customs) # => [<Tag name='same'>,...]
140
- @user.tag_counts_on(:customs)
141
- User.tagged_with("same", :on => :customs) # => [@user]
142
-
143
- === Tag Ownership
144
-
145
- Tags can have owners:
146
-
147
- class User < ActiveRecord::Base
148
- acts_as_tagger
149
- end
150
-
151
- class Photo < ActiveRecord::Base
152
- acts_as_taggable_on :locations
153
- end
154
-
155
- @some_user.tag(@some_photo, :with => "paris, normandy", :on => :locations)
156
- @some_user.owned_taggings
157
- @some_user.owned_tags
158
- @some_photo.locations_from(@some_user) # => ["paris", "normandy"]
159
- @some_photo.owner_tags_on(@some_user, :locations) # => [#<ActsAsTaggableOn::Tag id: 1, name: "paris">...]
160
- @some_photo.owner_tags_on(nil, :locations) # => Ownerships equivalent to saying @some_photo.locations
161
- @some_user.tag(@some_photo, :with => "paris, normandy", :on => :locations, :skip_save => true) #won't save @some_photo object
162
-
163
- === Dirty objects
164
-
165
- @bobby = User.find_by_name("Bobby")
166
- @bobby.skill_list # => ["jogging", "diving"]
167
-
168
- @boddy.skill_list_changed? #=> false
169
- @boddy.changes #=> {}
170
-
171
- @bobby.skill_list = "swimming"
172
- @bobby.changes.should == {"skill_list"=>["jogging, diving", ["swimming"]]}
173
- @boddy.skill_list_changed? #=> true
174
-
175
- @bobby.skill_list_change.should == ["jogging, diving", ["swimming"]]
176
-
177
- === Tag cloud calculations
178
-
179
- To construct tag clouds, the frequency of each tag needs to be calculated.
180
- Because we specified +acts_as_taggable_on+ on the <tt>User</tt> class, we can
181
- get a calculation of all the tag counts by using <tt>User.tag_counts_on(:customs)</tt>. But what if we wanted a tag count for
182
- an single user's posts? To achieve this we call tag_counts on the association:
183
-
184
- User.find(:first).posts.tag_counts_on(:tags)
185
-
186
- A helper is included to assist with generating tag clouds.
187
-
188
- Here is an example that generates a tag cloud.
189
-
190
- Helper:
191
-
192
- module PostsHelper
193
- include ActsAsTaggableOn::TagsHelper
194
- end
195
-
196
- Controller:
197
-
198
- class PostController < ApplicationController
199
- def tag_cloud
200
- @tags = Post.tag_counts_on(:tags)
201
- end
202
- end
203
-
204
- View:
205
-
206
- <% tag_cloud(@tags, %w(css1 css2 css3 css4)) do |tag, css_class| %>
207
- <%= link_to tag.name, { :action => :tag, :id => tag.name }, :class => css_class %>
208
- <% end %>
209
-
210
- CSS:
211
-
212
- .css1 { font-size: 1.0em; }
213
- .css2 { font-size: 1.2em; }
214
- .css3 { font-size: 1.4em; }
215
- .css4 { font-size: 1.6em; }
216
-
217
- == Configuration
218
-
219
- If you would like to remove unused tag objects after removing taggings, add
220
-
221
- ActsAsTaggableOn.remove_unused_tags = true
222
-
223
- If you want force tags to be saved downcased:
224
-
225
- ActsAsTaggableOn.force_lowercase = true
226
-
227
- If you want tags to be saved parametrized (you can redefine to_param as well):
228
-
229
- ActsAsTaggableOn.force_parameterize = true
230
-
231
-
232
- == Contributors
233
-
234
- We have a long list of valued contributors. {Check them all}[https://github.com/mbleigh/acts-as-taggable-on/contributors]
235
-
236
- == Maintainers
237
-
238
- * Artem Kramarenko (artemk)
239
-
240
- == Author
241
-
242
- * Michael Bleigh
243
-
244
- Copyright (c) 2007-2011 Michael Bleigh (http://mbleigh.com/) and Intridea Inc. (http://intridea.com/), released under the MIT license