acts_as_taggable3 2.0.beta2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,3 @@
1
+ class Magazine < ActiveRecord::Base
2
+ acts_as_taggable
3
+ end
@@ -0,0 +1,8 @@
1
+ class Photo < ActiveRecord::Base
2
+ acts_as_taggable
3
+
4
+ belongs_to :user
5
+ end
6
+
7
+ class SpecialPhoto < Photo
8
+ end
@@ -0,0 +1,7 @@
1
+ class Post < ActiveRecord::Base
2
+ acts_as_taggable
3
+
4
+ belongs_to :user
5
+
6
+ validates_presence_of :text
7
+ end
@@ -0,0 +1,2 @@
1
+ class SpecialPost < Post
2
+ end
@@ -0,0 +1,4 @@
1
+ class Subscription < ActiveRecord::Base
2
+ belongs_to :user
3
+ belongs_to :magazine
4
+ end
@@ -0,0 +1,7 @@
1
+ class User < ActiveRecord::Base
2
+ has_many :posts
3
+ has_many :photos
4
+
5
+ has_many :subscriptions
6
+ has_many :magazines, :through => :subscriptions
7
+ end
@@ -0,0 +1,48 @@
1
+ ActiveRecord::Schema.define :version => 0 do
2
+ create_table :tags, :force => true do |t|
3
+ t.column :name, :string
4
+ end
5
+
6
+ create_table :taggings, :force => true do |t|
7
+ t.column :tag_id, :integer
8
+ t.column :taggable_id, :integer
9
+ t.column :taggable_type, :string
10
+ t.column :created_at, :datetime
11
+ end
12
+
13
+ create_table :categories, :force => true do |t|
14
+ t.column :name, :string
15
+ end
16
+
17
+ create_table :categorisations, :force => true do |t|
18
+ t.column :tag_id, :integer
19
+ t.column :taggable_id, :integer
20
+ t.column :taggable_type, :string
21
+ t.column :created_at, :datetime
22
+ end
23
+
24
+ create_table :users, :force => true do |t|
25
+ t.column :name, :string
26
+ end
27
+
28
+ create_table :posts, :force => true do |t|
29
+ t.column :text, :text
30
+ t.column :cached_tag_list, :string
31
+ t.column :user_id, :integer
32
+ t.column :type, :string
33
+ end
34
+
35
+ create_table :photos, :force => true do |t|
36
+ t.column :title, :string
37
+ t.column :user_id, :integer
38
+ end
39
+
40
+ create_table :subscriptions, :force => true do |t|
41
+ t.column :user_id, :integer
42
+ t.column :magazine_id, :integer
43
+ end
44
+
45
+ create_table :magazines, :force => true do |t|
46
+ t.column :name, :string
47
+ end
48
+ end
@@ -0,0 +1,119 @@
1
+ require File.expand_path('../abstract_unit', __FILE__)
2
+
3
+ class TagListTest < ActiveSupport::TestCase
4
+ def test_from_leaves_string_unchanged
5
+ tags = '"One ", Two'
6
+ original = tags.dup
7
+ TagList.from(tags)
8
+ assert_equal tags, original
9
+ end
10
+
11
+ def test_from_single_name
12
+ assert_equal %w(Fun), TagList.from("Fun")
13
+ assert_equal %w(Fun), TagList.from('"Fun"')
14
+ end
15
+
16
+ def test_from_blank
17
+ assert_equal [], TagList.from(nil)
18
+ assert_equal [], TagList.from("")
19
+ end
20
+
21
+ def test_from_single_quoted_tag
22
+ assert_equal ['with, comma'], TagList.from('"with, comma"')
23
+ end
24
+
25
+ def test_spaces_do_not_delineate
26
+ assert_equal ['A B', 'C'], TagList.from('A B, C')
27
+ end
28
+
29
+ def test_from_multiple_tags
30
+ assert_equivalent %w(Alpha Beta Delta Gamma), TagList.from("Alpha, Beta, Delta, Gamma")
31
+ end
32
+
33
+ def test_from_multiple_tags_with_quotes
34
+ assert_equivalent %w(Alpha Beta Delta Gamma), TagList.from('Alpha, "Beta", Gamma , "Delta"')
35
+ end
36
+
37
+ def test_from_with_single_quotes
38
+ assert_equivalent ['A B', 'C'], TagList.from("'A B', C")
39
+ end
40
+
41
+ def test_from_multiple_tags_with_quote_and_commas
42
+ assert_equivalent ['Alpha, Beta', 'Delta', 'Gamma, something'], TagList.from('"Alpha, Beta", Delta, "Gamma, something"')
43
+ end
44
+
45
+ def test_from_with_inner_quotes
46
+ assert_equivalent ["House", "Drum 'n' Bass", "Trance"], TagList.from("House, Drum 'n' Bass, Trance")
47
+ assert_equivalent ["House", "Drum'n'Bass", "Trance"], TagList.from("House, Drum'n'Bass, Trance")
48
+ end
49
+
50
+ def test_from_removes_white_space
51
+ assert_equivalent %w(Alpha Beta), TagList.from('" Alpha ", "Beta "')
52
+ assert_equivalent %w(Alpha Beta), TagList.from(' Alpha, Beta ')
53
+ end
54
+
55
+ def test_from_and_new_treat_both_accept_arrays
56
+ tags = ["One", "Two"]
57
+
58
+ assert_equal TagList.from(tags), TagList.new(tags)
59
+ end
60
+
61
+ def test_alternative_delimiter
62
+ TagList.delimiter = " "
63
+
64
+ assert_equal %w(One Two), TagList.from("One Two")
65
+ assert_equal ['One two', 'three', 'four'], TagList.from('"One two" three four')
66
+ ensure
67
+ TagList.delimiter = ","
68
+ end
69
+
70
+ def test_duplicate_tags_removed
71
+ assert_equal %w(One), TagList.from("One, One")
72
+ end
73
+
74
+ def test_to_s_with_commas
75
+ assert_equal "Question, Crazy Animal", TagList.new("Question", "Crazy Animal").to_s
76
+ end
77
+
78
+ def test_to_s_with_alternative_delimiter
79
+ TagList.delimiter = " "
80
+
81
+ assert_equal '"Crazy Animal" Question', TagList.new("Crazy Animal", "Question").to_s
82
+ ensure
83
+ TagList.delimiter = ","
84
+ end
85
+
86
+ def test_add
87
+ tag_list = TagList.new("One")
88
+ assert_equal %w(One), tag_list
89
+
90
+ assert_equal %w(One Two), tag_list.add("Two")
91
+ assert_equal %w(One Two Three), tag_list.add(["Three"])
92
+ end
93
+
94
+ def test_remove
95
+ tag_list = TagList.new("One", "Two")
96
+ assert_equal %w(Two), tag_list.remove("One")
97
+ assert_equal %w(), tag_list.remove(["Two"])
98
+ end
99
+
100
+ def test_new_with_parsing
101
+ assert_equal %w(One Two), TagList.new("One, Two", :parse => true)
102
+ end
103
+
104
+ def test_add_with_parsing
105
+ assert_equal %w(One Two), TagList.new.add("One, Two", :parse => true)
106
+ end
107
+
108
+ def test_remove_with_parsing
109
+ tag_list = TagList.from("Three, Four, Five")
110
+ assert_equal %w(Four), tag_list.remove("Three, Five", :parse => true)
111
+ end
112
+
113
+ def test_toggle
114
+ tag_list = TagList.new("One", "Two")
115
+ assert_equal %w(One Three), tag_list.toggle("Two", "Three")
116
+ assert_equal %w(), tag_list.toggle("One", "Three")
117
+ assert_equal %w(Four), tag_list.toggle("Four")
118
+ end
119
+ end
@@ -0,0 +1,63 @@
1
+ require File.expand_path('../abstract_unit', __FILE__)
2
+
3
+ class TagTest < ActiveSupport::TestCase
4
+ def test_name_required
5
+ t = Tag.create
6
+ assert_match /blank/, t.errors[:name].to_s
7
+ end
8
+
9
+ def test_name_unique
10
+ t = Tag.create!(:name => "My tag")
11
+ duplicate = t.clone
12
+
13
+ assert !duplicate.save
14
+ assert_match /taken/, duplicate.errors[:name].to_s
15
+ end
16
+
17
+ def test_taggings
18
+ assert_equivalent [taggings(:jonathan_sky_good), taggings(:sam_flowers_good), taggings(:sam_flower_good), taggings(:ruby_good)], tags(:good).taggings
19
+ assert_equivalent [taggings(:sam_ground_bad), taggings(:jonathan_bad_cat_bad)], tags(:bad).taggings
20
+ end
21
+
22
+ def test_to_s
23
+ assert_equal tags(:good).name, tags(:good).to_s
24
+ end
25
+
26
+ def test_equality
27
+ assert_equal tags(:good), tags(:good)
28
+ assert_equal Tag.find(tags(:good).id), Tag.find(tags(:good).id)
29
+ assert_equal Tag.new(:name => 'A'), Tag.new(:name => 'A')
30
+ assert_not_equal Tag.new(:name => 'A'), Tag.new(:name => 'B')
31
+ end
32
+
33
+ def test_taggings_removed_when_tag_destroyed
34
+ assert_difference "Tagging.count", -Tagging.count(:conditions => { :tag_id => tags(:good).id }) do
35
+ assert tags(:good).destroy
36
+ end
37
+ end
38
+
39
+ def test_all_counts
40
+ assert_tag_counts(Tag.counts,
41
+ {:good => 4, :bad => 2, :nature => 10, :question => 2, :animal => 3})
42
+ end
43
+
44
+ def test_all_counts_with_string_conditions
45
+ assert_tag_counts Tag.counts(:conditions => 'taggings.created_at >= \'2006-08-15\''),
46
+ :question => 1, :bad => 1, :animal => 1, :nature => 2, :good => 2
47
+ end
48
+
49
+ def test_all_counts_with_array_conditions
50
+ assert_tag_counts Tag.counts(:conditions => ['taggings.created_at >= ?', '2006-08-15']),
51
+ :question => 1, :bad => 1, :animal => 1, :nature => 2, :good => 2
52
+ end
53
+
54
+ def test_all_counts_with_hash_conditions
55
+ tag_counts = Tag.counts(
56
+ :conditions => {
57
+ :taggings => { :created_at => (DateTime.parse('2006-08-14 23:59') .. DateTime.parse('4000-01-01')) }
58
+ }
59
+ )
60
+
61
+ assert_tag_counts tag_counts, :question => 1, :bad => 1, :animal => 1, :nature => 2, :good => 2
62
+ end
63
+ end
@@ -0,0 +1,11 @@
1
+ require File.expand_path('../abstract_unit', __FILE__)
2
+
3
+ class TaggingTest < ActiveSupport::TestCase
4
+ def test_tag
5
+ assert_equal tags(:good), taggings(:jonathan_sky_good).tag
6
+ end
7
+
8
+ def test_taggable
9
+ assert_equal posts(:jonathan_sky), taggings(:jonathan_sky_good).taggable
10
+ end
11
+ end
@@ -0,0 +1,25 @@
1
+ require File.expand_path('../abstract_unit', __FILE__)
2
+
3
+ class TagsHelperTest < ActiveSupport::TestCase
4
+ include TagsHelper
5
+
6
+ def test_tag_cloud
7
+ cloud_elements = []
8
+
9
+ tag_cloud Post.tag_counts, %w(css1 css2 css3 css4) do |tag, css_class|
10
+ cloud_elements << [tag, css_class]
11
+ end
12
+
13
+ assert cloud_elements.include?([tags(:good), "css2"])
14
+ assert cloud_elements.include?([tags(:bad), "css1"])
15
+ assert cloud_elements.include?([tags(:nature), "css4"])
16
+ assert cloud_elements.include?([tags(:question), "css1"])
17
+ assert_equal 4, cloud_elements.size
18
+ end
19
+
20
+ def test_tag_cloud_when_no_tags
21
+ tag_cloud SpecialPost.tag_counts, %w(css1) do
22
+ assert false, "tag_cloud should not yield"
23
+ end
24
+ end
25
+ end
metadata ADDED
@@ -0,0 +1,121 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: acts_as_taggable3
3
+ version: !ruby/object:Gem::Version
4
+ hash: 62196343
5
+ prerelease: 4
6
+ segments:
7
+ - 2
8
+ - 0
9
+ - beta
10
+ - 2
11
+ version: 2.0.beta2
12
+ platform: ruby
13
+ authors:
14
+ - Jonathan Viney
15
+ - Julien Portalier
16
+ autorequire:
17
+ bindir: bin
18
+ cert_chain: []
19
+
20
+ date: 2011-09-17 00:00:00 +02:00
21
+ default_executable:
22
+ dependencies:
23
+ - !ruby/object:Gem::Dependency
24
+ name: rails
25
+ prerelease: false
26
+ requirement: &id001 !ruby/object:Gem::Requirement
27
+ none: false
28
+ requirements:
29
+ - - ~>
30
+ - !ruby/object:Gem::Version
31
+ hash: 7
32
+ segments:
33
+ - 3
34
+ - 0
35
+ version: "3.0"
36
+ type: :runtime
37
+ version_requirements: *id001
38
+ description: Rails 3 plugin that is based on acts_as_taggable_on_steroids by jviney that is based on acts_as_taggable by DHH.
39
+ email: ysbaddaden@gmail.com
40
+ executables: []
41
+
42
+ extensions: []
43
+
44
+ extra_rdoc_files:
45
+ - CHANGELOG
46
+ - MIT-LICENSE
47
+ - README
48
+ files:
49
+ - CHANGELOG
50
+ - MIT-LICENSE
51
+ - README
52
+ - lib/acts_as_taggable.rb
53
+ - lib/generators/acts_as_taggable_migration/acts_as_taggable_migration_generator.rb
54
+ - lib/generators/acts_as_taggable_migration/templates/migration.rb
55
+ - lib/tag.rb
56
+ - lib/tag_list.rb
57
+ - lib/tagging.rb
58
+ - lib/tags_helper.rb
59
+ - test/abstract_unit.rb
60
+ - test/acts_as_taggable_test.rb
61
+ - test/fixtures/magazine.rb
62
+ - test/fixtures/photo.rb
63
+ - test/fixtures/post.rb
64
+ - test/fixtures/special_post.rb
65
+ - test/fixtures/subscription.rb
66
+ - test/fixtures/user.rb
67
+ - test/schema.rb
68
+ - test/tag_list_test.rb
69
+ - test/tag_test.rb
70
+ - test/tagging_test.rb
71
+ - test/tags_helper_test.rb
72
+ has_rdoc: true
73
+ homepage: http://github.com/ysbaddaden/acts_as_taggable_on_steroids
74
+ licenses: []
75
+
76
+ post_install_message:
77
+ rdoc_options: []
78
+
79
+ require_paths:
80
+ - lib
81
+ required_ruby_version: !ruby/object:Gem::Requirement
82
+ none: false
83
+ requirements:
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ hash: 3
87
+ segments:
88
+ - 0
89
+ version: "0"
90
+ required_rubygems_version: !ruby/object:Gem::Requirement
91
+ none: false
92
+ requirements:
93
+ - - ">"
94
+ - !ruby/object:Gem::Version
95
+ hash: 25
96
+ segments:
97
+ - 1
98
+ - 3
99
+ - 1
100
+ version: 1.3.1
101
+ requirements: []
102
+
103
+ rubyforge_project:
104
+ rubygems_version: 1.6.2
105
+ signing_key:
106
+ specification_version: 3
107
+ summary: Rails 3 plugin to stick tags on ActiveRecords.
108
+ test_files:
109
+ - test/abstract_unit.rb
110
+ - test/acts_as_taggable_test.rb
111
+ - test/fixtures/magazine.rb
112
+ - test/fixtures/photo.rb
113
+ - test/fixtures/post.rb
114
+ - test/fixtures/special_post.rb
115
+ - test/fixtures/subscription.rb
116
+ - test/fixtures/user.rb
117
+ - test/schema.rb
118
+ - test/tag_list_test.rb
119
+ - test/tag_test.rb
120
+ - test/tagging_test.rb
121
+ - test/tags_helper_test.rb