acts-as-taggable-on 2.0.0.pre5 → 3.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +11 -0
- data/{spec/spec.opts → .rspec} +0 -0
- data/.travis.yml +40 -0
- data/Appraisals +16 -0
- data/CHANGELOG.md +208 -0
- data/CONTRIBUTING.md +44 -0
- data/Gemfile +10 -5
- data/Guardfile +5 -0
- data/{MIT-LICENSE → LICENSE.md} +1 -1
- data/README.md +477 -0
- data/Rakefile +14 -52
- data/UPGRADING.md +8 -0
- data/acts-as-taggable-on.gemspec +36 -0
- data/{lib/generators/acts_as_taggable_on/migration/templates/active_record/migration.rb → db/migrate/1_acts_as_taggable_on_migration.rb} +5 -3
- data/db/migrate/2_add_missing_unique_indices.rb +19 -0
- data/db/migrate/3_add_taggings_counter_cache_to_tags.rb +14 -0
- data/db/migrate/4_add_missing_taggable_index.rb +9 -0
- data/db/migrate/5_change_collation_for_tag_names.rb +9 -0
- data/gemfiles/activerecord_3.2.gemfile +15 -0
- data/gemfiles/activerecord_4.0.gemfile +15 -0
- data/gemfiles/activerecord_4.1.gemfile +15 -0
- data/gemfiles/activerecord_4.2.gemfile +16 -0
- data/lib/acts-as-taggable-on.rb +117 -22
- data/lib/acts_as_taggable_on/compatibility.rb +35 -0
- data/lib/acts_as_taggable_on/default_parser.rb +79 -0
- data/lib/acts_as_taggable_on/engine.rb +5 -0
- data/lib/acts_as_taggable_on/generic_parser.rb +19 -0
- data/lib/acts_as_taggable_on/tag.rb +137 -61
- data/lib/acts_as_taggable_on/tag_list.rb +96 -75
- data/lib/acts_as_taggable_on/tag_list_parser.rb +21 -0
- data/lib/acts_as_taggable_on/taggable/cache.rb +86 -0
- data/lib/acts_as_taggable_on/taggable/collection.rb +178 -0
- data/lib/acts_as_taggable_on/taggable/core.rb +459 -0
- data/lib/acts_as_taggable_on/taggable/dirty.rb +36 -0
- data/lib/acts_as_taggable_on/taggable/ownership.rb +125 -0
- data/lib/acts_as_taggable_on/taggable/related.rb +71 -0
- data/lib/acts_as_taggable_on/taggable.rb +102 -0
- data/lib/acts_as_taggable_on/tagger.rb +88 -0
- data/lib/acts_as_taggable_on/tagging.rb +38 -18
- data/lib/acts_as_taggable_on/tags_helper.rb +12 -14
- data/lib/acts_as_taggable_on/utils.rb +38 -0
- data/lib/acts_as_taggable_on/version.rb +4 -0
- data/lib/acts_as_taggable_on.rb +6 -0
- data/lib/tasks/tags_collate_utf8.rake +21 -0
- data/spec/acts_as_taggable_on/acts_as_taggable_on_spec.rb +205 -195
- data/spec/acts_as_taggable_on/acts_as_tagger_spec.rb +79 -81
- data/spec/acts_as_taggable_on/caching_spec.rb +83 -0
- data/spec/acts_as_taggable_on/default_parser_spec.rb +47 -0
- data/spec/acts_as_taggable_on/generic_parser_spec.rb +14 -0
- data/spec/acts_as_taggable_on/related_spec.rb +99 -0
- data/spec/acts_as_taggable_on/single_table_inheritance_spec.rb +211 -0
- data/spec/acts_as_taggable_on/tag_list_parser_spec.rb +46 -0
- data/spec/acts_as_taggable_on/tag_list_spec.rb +142 -62
- data/spec/acts_as_taggable_on/tag_spec.rb +274 -64
- data/spec/acts_as_taggable_on/taggable/dirty_spec.rb +127 -0
- data/spec/acts_as_taggable_on/taggable_spec.rb +704 -181
- data/spec/acts_as_taggable_on/tagger_spec.rb +134 -56
- data/spec/acts_as_taggable_on/tagging_spec.rb +54 -22
- data/spec/acts_as_taggable_on/tags_helper_spec.rb +39 -22
- data/spec/acts_as_taggable_on/utils_spec.rb +23 -0
- data/spec/internal/app/models/altered_inheriting_taggable_model.rb +3 -0
- data/spec/internal/app/models/cached_model.rb +3 -0
- data/spec/internal/app/models/cached_model_with_array.rb +5 -0
- data/spec/internal/app/models/company.rb +15 -0
- data/spec/internal/app/models/inheriting_taggable_model.rb +2 -0
- data/spec/internal/app/models/market.rb +2 -0
- data/spec/internal/app/models/models.rb +90 -0
- data/spec/internal/app/models/non_standard_id_taggable_model.rb +8 -0
- data/spec/internal/app/models/ordered_taggable_model.rb +4 -0
- data/spec/internal/app/models/other_cached_model.rb +3 -0
- data/spec/internal/app/models/other_taggable_model.rb +4 -0
- data/spec/internal/app/models/student.rb +2 -0
- data/spec/internal/app/models/taggable_model.rb +13 -0
- data/spec/internal/app/models/untaggable_model.rb +3 -0
- data/spec/internal/app/models/user.rb +3 -0
- data/spec/internal/config/database.yml.sample +19 -0
- data/spec/internal/db/schema.rb +97 -0
- data/spec/spec_helper.rb +12 -38
- data/spec/support/0-helpers.rb +32 -0
- data/spec/support/array.rb +9 -0
- data/spec/support/database.rb +42 -0
- data/spec/support/database_cleaner.rb +21 -0
- metadata +268 -73
- data/CHANGELOG +0 -25
- data/README.rdoc +0 -212
- data/VERSION +0 -1
- data/lib/acts_as_taggable_on/acts_as_taggable_on/cache.rb +0 -56
- data/lib/acts_as_taggable_on/acts_as_taggable_on/collection.rb +0 -97
- data/lib/acts_as_taggable_on/acts_as_taggable_on/core.rb +0 -220
- data/lib/acts_as_taggable_on/acts_as_taggable_on/dirty.rb +0 -29
- data/lib/acts_as_taggable_on/acts_as_taggable_on/ownership.rb +0 -101
- data/lib/acts_as_taggable_on/acts_as_taggable_on/related.rb +0 -64
- data/lib/acts_as_taggable_on/acts_as_taggable_on.rb +0 -41
- data/lib/acts_as_taggable_on/acts_as_tagger.rb +0 -47
- data/lib/acts_as_taggable_on/compatibility/Gemfile +0 -6
- data/lib/acts_as_taggable_on/compatibility/active_record_backports.rb +0 -17
- data/lib/generators/acts_as_taggable_on/migration/migration_generator.rb +0 -31
- data/rails/init.rb +0 -1
- data/spec/bm.rb +0 -52
- data/spec/models.rb +0 -36
- data/spec/schema.rb +0 -42
@@ -0,0 +1,127 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe ActsAsTaggableOn::Taggable::Dirty do
|
5
|
+
context 'with un-contexted tags' do
|
6
|
+
before(:each) do
|
7
|
+
@taggable = TaggableModel.create(tag_list: 'awesome, epic')
|
8
|
+
end
|
9
|
+
|
10
|
+
context 'when tag_list changed' do
|
11
|
+
before(:each) do
|
12
|
+
expect(@taggable.changes).to be_empty
|
13
|
+
@taggable.tag_list = 'one'
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'should show changes of dirty object' do
|
17
|
+
expect(@taggable.changes).to eq({'tag_list' => ['awesome, epic', ['one']]})
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'flags tag_list as changed' do
|
21
|
+
expect(@taggable.tag_list_changed?).to be_truthy
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'preserves original value' do
|
25
|
+
expect(@taggable.tag_list_was).to eq('awesome, epic')
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'shows what the change was' do
|
29
|
+
expect(@taggable.tag_list_change).to eq(['awesome, epic', ['one']])
|
30
|
+
end
|
31
|
+
|
32
|
+
context 'without order' do
|
33
|
+
it 'should not mark attribute if order change ' do
|
34
|
+
taggable = TaggableModel.create(name: 'Dirty Harry', tag_list: %w(d c b a))
|
35
|
+
taggable.tag_list = %w(a b c d)
|
36
|
+
expect(taggable.tag_list_changed?).to be_falsey
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
context 'with order' do
|
41
|
+
it 'should mark attribute if order change' do
|
42
|
+
taggable = OrderedTaggableModel.create(name: 'Clean Harry', tag_list: 'd,c,b,a')
|
43
|
+
taggable.save
|
44
|
+
taggable.tag_list = %w(a b c d)
|
45
|
+
expect(taggable.tag_list_changed?).to be_truthy
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
context 'when tag_list is the same' do
|
51
|
+
before(:each) do
|
52
|
+
@taggable.tag_list = 'awesome, epic'
|
53
|
+
end
|
54
|
+
|
55
|
+
it 'is not flagged as changed' do
|
56
|
+
expect(@taggable.tag_list_changed?).to be_falsy
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'does not show any changes to the taggable item' do
|
60
|
+
expect(@taggable.changes).to be_empty
|
61
|
+
end
|
62
|
+
|
63
|
+
context "and using a delimiter different from a ','" do
|
64
|
+
before do
|
65
|
+
@old_delimiter = ActsAsTaggableOn.delimiter
|
66
|
+
ActsAsTaggableOn.delimiter = ';'
|
67
|
+
end
|
68
|
+
|
69
|
+
after do
|
70
|
+
ActsAsTaggableOn.delimiter = @old_delimiter
|
71
|
+
end
|
72
|
+
|
73
|
+
it 'does not show any changes to the taggable item when using array assignments' do
|
74
|
+
@taggable.tag_list = %w(awesome epic)
|
75
|
+
expect(@taggable.changes).to be_empty
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
context 'with context tags' do
|
82
|
+
before(:each) do
|
83
|
+
@taggable = TaggableModel.create('language_list' => 'awesome, epic')
|
84
|
+
end
|
85
|
+
|
86
|
+
context 'when language_list changed' do
|
87
|
+
before(:each) do
|
88
|
+
expect(@taggable.changes).to be_empty
|
89
|
+
@taggable.language_list = 'one'
|
90
|
+
end
|
91
|
+
|
92
|
+
it 'should show changes of dirty object' do
|
93
|
+
expect(@taggable.changes).to eq({'language_list' => ['awesome, epic', ['one']]})
|
94
|
+
end
|
95
|
+
|
96
|
+
it 'flags language_list as changed' do
|
97
|
+
expect(@taggable.language_list_changed?).to be_truthy
|
98
|
+
end
|
99
|
+
|
100
|
+
it 'preserves original value' do
|
101
|
+
expect(@taggable.language_list_was).to eq('awesome, epic')
|
102
|
+
end
|
103
|
+
|
104
|
+
it 'shows what the change was' do
|
105
|
+
expect(@taggable.language_list_change).to eq(['awesome, epic', ['one']])
|
106
|
+
end
|
107
|
+
|
108
|
+
it 'shows what the changes were' do
|
109
|
+
expect(@taggable.language_list_changes).to eq(['awesome, epic', ['one']])
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
context 'when language_list is the same' do
|
114
|
+
before(:each) do
|
115
|
+
@taggable.language_list = 'awesome, epic'
|
116
|
+
end
|
117
|
+
|
118
|
+
it 'is not flagged as changed' do
|
119
|
+
expect(@taggable.language_list_changed?).to be_falsy
|
120
|
+
end
|
121
|
+
|
122
|
+
it 'does not show any changes to the taggable item' do
|
123
|
+
expect(@taggable.changes).to be_empty
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|