rotuka-taggable 0.0.1

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/test/database.yml ADDED
@@ -0,0 +1,10 @@
1
+ mysql:
2
+ :adapter: mysql
3
+ :host: localhost
4
+ :username: rails
5
+ :password:
6
+ :database: rails_plugin_test
7
+
8
+ sqlite3:
9
+ :adapter: sqlite3
10
+ :database: ':memory:'
@@ -0,0 +1,3 @@
1
+ class Magazine < ActiveRecord::Base
2
+ acts_as_taggable
3
+ end
@@ -0,0 +1,7 @@
1
+ ruby:
2
+ id: 1
3
+ name: Ruby
4
+
5
+ rails:
6
+ id: 2
7
+ name: Rails
@@ -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,24 @@
1
+ jonathan_dog:
2
+ id: 1
3
+ user_id: 1
4
+ title: A small dog
5
+
6
+ jonathan_questioning_dog:
7
+ id: 2
8
+ user_id: 1
9
+ title: What does this dog want?
10
+
11
+ jonathan_bad_cat:
12
+ id: 3
13
+ user_id: 1
14
+ title: Bad cat
15
+
16
+ sam_flower:
17
+ id: 4
18
+ user_id: 2
19
+ title: Flower
20
+
21
+ sam_sky:
22
+ id: 5
23
+ user_id: 2
24
+ title: Sky
@@ -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,34 @@
1
+ jonathan_sky:
2
+ id: 1
3
+ user_id: 1
4
+ text: The sky is particularly blue today
5
+
6
+ jonathan_grass:
7
+ id: 2
8
+ user_id: 1
9
+ text: The grass seems very green
10
+
11
+ jonathan_rain:
12
+ id: 3
13
+ user_id: 1
14
+ text: Why does the rain fall?
15
+
16
+ jonathan_cloudy:
17
+ id: 4
18
+ user_id: 1
19
+ text: Is it cloudy?
20
+
21
+ jonathan_still_cloudy:
22
+ id: 5
23
+ user_id: 1
24
+ text: Is it still cloudy?
25
+
26
+ sam_ground:
27
+ id: 6
28
+ user_id: 2
29
+ text: The ground is looking too brown
30
+
31
+ sam_flowers:
32
+ id: 7
33
+ user_id: 2
34
+ text: Why are the flowers dead?
@@ -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,3 @@
1
+ jonathan_rails:
2
+ user_id: 1
3
+ magazine_id: 1
@@ -0,0 +1,149 @@
1
+ # Posts
2
+ jonathan_sky_good:
3
+ id: 1
4
+ tag_id: 1
5
+ taggable_id: 1
6
+ taggable_type: Post
7
+ created_at: 2006-08-01
8
+
9
+ jonathan_sky_nature:
10
+ id: 2
11
+ tag_id: 3
12
+ taggable_id: 1
13
+ taggable_type: Post
14
+ created_at: 2006-08-02
15
+
16
+ jonathan_grass_nature:
17
+ id: 3
18
+ tag_id: 3
19
+ taggable_id: 2
20
+ taggable_type: Post
21
+ created_at: 2006-08-03
22
+
23
+ jonathan_rain_question:
24
+ id: 4
25
+ tag_id: 4
26
+ taggable_id: 3
27
+ taggable_type: Post
28
+ created_at: 2006-08-04
29
+
30
+ jonathan_rain_nature:
31
+ id: 5
32
+ tag_id: 3
33
+ taggable_id: 3
34
+ taggable_type: Post
35
+ created_at: 2006-08-05
36
+
37
+ jonathan_cloudy_nature:
38
+ id: 6
39
+ tag_id: 3
40
+ taggable_id: 4
41
+ taggable_type: Post
42
+ created_at: 2006-08-06
43
+
44
+ jonathan_still_cloudy_nature:
45
+ id: 7
46
+ tag_id: 3
47
+ taggable_id: 5
48
+ taggable_type: Post
49
+ created_at: 2006-08-07
50
+
51
+ sam_ground_nature:
52
+ id: 8
53
+ tag_id: 3
54
+ taggable_id: 6
55
+ taggable_type: Post
56
+ created_at: 2006-08-08
57
+
58
+ sam_ground_bad:
59
+ id: 9
60
+ tag_id: 2
61
+ taggable_id: 6
62
+ taggable_type: Post
63
+ created_at: 2006-08-09
64
+
65
+ sam_flowers_good:
66
+ id: 10
67
+ tag_id: 1
68
+ taggable_id: 7
69
+ taggable_type: Post
70
+ created_at: 2006-08-10
71
+
72
+ sam_flowers_nature:
73
+ id: 11
74
+ tag_id: 3
75
+ taggable_id: 7
76
+ taggable_type: Post
77
+ created_at: 2006-08-11
78
+
79
+ # Photos
80
+ jonathan_dog_animal:
81
+ id: 12
82
+ tag_id: 5
83
+ taggable_id: 1
84
+ taggable_type: Photo
85
+ created_at: 2006-08-12
86
+
87
+ jonathan_dog_nature:
88
+ id: 13
89
+ tag_id: 3
90
+ taggable_id: 1
91
+ taggable_type: Photo
92
+ created_at: 2006-08-13
93
+
94
+ jonathan_questioning_dog_animal:
95
+ id: 14
96
+ tag_id: 5
97
+ taggable_id: 2
98
+ taggable_type: Photo
99
+ created_at: 2006-08-14
100
+
101
+ jonathan_questioning_dog_question:
102
+ id: 15
103
+ tag_id: 4
104
+ taggable_id: 2
105
+ taggable_type: Photo
106
+ created_at: 2006-08-15
107
+
108
+ jonathan_bad_cat_bad:
109
+ id: 16
110
+ tag_id: 2
111
+ taggable_id: 3
112
+ taggable_type: Photo
113
+ created_at: 2006-08-16
114
+
115
+ jonathan_bad_cat_animal:
116
+ id: 17
117
+ tag_id: 5
118
+ taggable_id: 3
119
+ taggable_type: Photo
120
+ created_at: 2006-08-17
121
+
122
+ sam_flower_nature:
123
+ id: 18
124
+ tag_id: 3
125
+ taggable_id: 4
126
+ taggable_type: Photo
127
+ created_at: 2006-08-18
128
+
129
+ sam_flower_good:
130
+ id: 19
131
+ tag_id: 1
132
+ taggable_id: 4
133
+ taggable_type: Photo
134
+ created_at: 2006-08-19
135
+
136
+ sam_sky_nature:
137
+ id: 20
138
+ tag_id: 3
139
+ taggable_id: 5
140
+ taggable_type: Photo
141
+ created_at: 2006-08-20
142
+
143
+ # Magazines
144
+ ruby_good:
145
+ id: 50
146
+ tag_id: 1
147
+ taggable_id: 1
148
+ taggable_type: Magazine
149
+ created_at: 2007-08-25
@@ -0,0 +1,19 @@
1
+ good:
2
+ id: 1
3
+ name: Very good
4
+
5
+ bad:
6
+ id: 2
7
+ name: Bad
8
+
9
+ nature:
10
+ id: 3
11
+ name: Nature
12
+
13
+ question:
14
+ id: 4
15
+ name: Question
16
+
17
+ animal:
18
+ id: 5
19
+ name: Crazy animal
@@ -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,7 @@
1
+ jonathan:
2
+ id: 1
3
+ name: Jonathan
4
+
5
+ sam:
6
+ id: 2
7
+ name: Sam
data/test/schema.rb ADDED
@@ -0,0 +1,37 @@
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 :users, :force => true do |t|
14
+ t.column :name, :string
15
+ end
16
+
17
+ create_table :posts, :force => true do |t|
18
+ t.column :text, :text
19
+ t.column :cached_tag_list, :string
20
+ t.column :user_id, :integer
21
+ t.column :type, :string
22
+ end
23
+
24
+ create_table :photos, :force => true do |t|
25
+ t.column :title, :string
26
+ t.column :user_id, :integer
27
+ end
28
+
29
+ create_table :subscriptions, :force => true do |t|
30
+ t.column :user_id, :integer
31
+ t.column :magazine_id, :integer
32
+ end
33
+
34
+ create_table :magazines, :force => true do |t|
35
+ t.column :name, :string
36
+ end
37
+ end
@@ -0,0 +1,106 @@
1
+ require File.dirname(__FILE__) + '/abstract_unit'
2
+
3
+ class TagListTest < Test::Unit::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_removes_white_space
46
+ assert_equivalent %w(Alpha Beta), TagList.from('" Alpha ", "Beta "')
47
+ assert_equivalent %w(Alpha Beta), TagList.from(' Alpha, Beta ')
48
+ end
49
+
50
+ def test_from_removes_dots
51
+ assert_equivalent %w(Alpha Beta), TagList.from('Alpha., Beta')
52
+ assert_equivalent %w(Alpha Beta), TagList.from('Alpha, Be.ta')
53
+ end
54
+
55
+ def test_alternative_delimiter
56
+ TagList.delimiter = " "
57
+
58
+ assert_equal %w(One Two), TagList.from("One Two")
59
+ assert_equal ['One two', 'three', 'four'], TagList.from('"One two" three four')
60
+ ensure
61
+ TagList.delimiter = ","
62
+ end
63
+
64
+ def test_duplicate_tags_removed
65
+ assert_equal %w(One), TagList.from("One, One")
66
+ end
67
+
68
+ def test_to_s_with_commas
69
+ assert_equal "Question, Crazy Animal", TagList.new("Question", "Crazy Animal").to_s
70
+ end
71
+
72
+ def test_to_s_with_alternative_delimiter
73
+ TagList.delimiter = " "
74
+
75
+ assert_equal '"Crazy Animal" Question', TagList.new("Crazy Animal", "Question").to_s
76
+ ensure
77
+ TagList.delimiter = ","
78
+ end
79
+
80
+ def test_add
81
+ tag_list = TagList.new("One")
82
+ assert_equal %w(One), tag_list
83
+
84
+ assert_equal %w(One Two), tag_list.add("Two")
85
+ assert_equal %w(One Two Three), tag_list.add(["Three"])
86
+ end
87
+
88
+ def test_remove
89
+ tag_list = TagList.new("One", "Two")
90
+ assert_equal %w(Two), tag_list.remove("One")
91
+ assert_equal %w(), tag_list.remove(["Two"])
92
+ end
93
+
94
+ def test_new_with_parsing
95
+ assert_equal %w(One Two), TagList.new("One, Two", :parse => true)
96
+ end
97
+
98
+ def test_add_with_parsing
99
+ assert_equal %w(One Two), TagList.new.add("One, Two", :parse => true)
100
+ end
101
+
102
+ def test_remove_with_parsing
103
+ tag_list = TagList.from("Three, Four, Five")
104
+ assert_equal %w(Four), tag_list.remove("Three, Five", :parse => true)
105
+ end
106
+ end