mbleigh-acts-as-taggable-on 1.0.1 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,3 +1,7 @@
1
+ == 2008-07-17
2
+
3
+ * Can now use a named_scope to find tags!
4
+
1
5
  == 2008-06-23
2
6
 
3
7
  * Can now find related objects of another class (tristanzdunn)
data/README CHANGED
@@ -76,15 +76,35 @@ end
76
76
  @user.tags # => [<Tag name:"awesome">,<Tag name:"slick">,<Tag name:"hefty">]
77
77
  @user.skills # => [<Tag name:"joking">,<Tag name:"clowning">,<Tag name:"boxing">]
78
78
 
79
+ # The old way
79
80
  User.find_tagged_with("awesome", :on => :tags) # => [@user]
80
81
  User.find_tagged_with("awesome", :on => :skills) # => []
81
82
 
83
+ # The better way (utilizes named_scope)
84
+ User.tagged_with("awesome", :on => :tags) # => [@user]
85
+ User.tagged_with("awesome", :on => :skills) # => []
86
+
82
87
  @frankie = User.create(:name => "Frankie", :skill_list => "joking, flying, eating")
83
88
  User.skill_counts # => [<Tag name="joking" count=2>,<Tag name="clowning" count=1>...]
84
89
  @frankie.skill_counts
85
90
 
91
+ Finding Tagged Objects
92
+ ======================
93
+
94
+ Acts As Taggable On utilizes Rails 2.1's named_scope to create an association
95
+ for tags. This way you can mix and match to filter down your results, and it
96
+ also improves compatibility with the will_paginate gem:
97
+
98
+ class User < ActiveRecord::Base
99
+ acts_as_taggable_on :tags
100
+ named_scope :by_join_date, :order => "created_at DESC"
101
+ end
102
+
103
+ User.tagged_with("awesome").by_date
104
+ User.tagged_with("awesome").by_date.paginate(:page => params[:page], :per_page => 20)
105
+
86
106
  Relationships
87
- ====================
107
+ =============
88
108
 
89
109
  You can find objects of the same type based on similar tags on certain contexts.
90
110
  Also, objects will be returned in descending order based on the total number of
@@ -79,6 +79,12 @@ module ActiveRecord
79
79
 
80
80
  before_save :save_cached_tag_list
81
81
  after_save :save_tags
82
+
83
+ if respond_to?(:named_scope)
84
+ named_scope :tagged_with, lambda{ |tags, options|
85
+ find_options_for_find_tagged_with(tags, options)
86
+ }
87
+ end
82
88
  end
83
89
 
84
90
  include ActiveRecord::Acts::TaggableOn::InstanceMethods
@@ -56,6 +56,15 @@ describe "Taggable" do
56
56
  TaggableModel.find_tagged_with("bob", :on => :tags).first.should == @taggable
57
57
  end
58
58
 
59
+ it "should be able to use the tagged_with named scope" do
60
+ @taggable.skill_list = "ruby, rails, css"
61
+ @taggable.tag_list = "bob, charlie"
62
+ @taggable.save
63
+ TaggableModel.tagged_with("ruby", {}).first.should == @taggable
64
+ TaggableModel.tagged_with("bob", :on => :skills).first.should_not == @taggable
65
+ TaggableModel.tagged_with("bob", :on => :tags).first.should == @taggable
66
+ end
67
+
59
68
  it "should not care about case" do
60
69
  bob = TaggableModel.create(:name => "Bob", :tag_list => "ruby")
61
70
  frank = TaggableModel.create(:name => "Frank", :tag_list => "Ruby")
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mbleigh-acts-as-taggable-on
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Bleigh