acts-as-taggable-on 3.2.1 → 3.3.0
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.
- checksums.yaml +4 -4
- data/.travis.yml +21 -1
- data/Appraisals +0 -4
- data/CHANGELOG.md +27 -15
- data/README.md +18 -11
- data/acts-as-taggable-on.gemspec +0 -2
- data/db/migrate/4_add_missing_taggable_index.rb +9 -0
- data/gemfiles/activerecord_3.2.gemfile +0 -1
- data/gemfiles/activerecord_4.0.gemfile +0 -1
- data/gemfiles/activerecord_4.1.gemfile +0 -1
- data/gemfiles/activerecord_edge.gemfile +0 -1
- data/lib/acts-as-taggable-on.rb +28 -20
- data/lib/acts_as_taggable_on/tag.rb +1 -1
- data/lib/acts_as_taggable_on/tag_list.rb +15 -78
- data/lib/acts_as_taggable_on/tag_list_parser.rb +78 -0
- data/lib/acts_as_taggable_on/{acts_as_taggable_on → taggable}/cache.rb +1 -0
- data/lib/acts_as_taggable_on/{acts_as_taggable_on → taggable}/collection.rb +2 -0
- data/lib/acts_as_taggable_on/{acts_as_taggable_on → taggable}/core.rb +68 -44
- data/lib/acts_as_taggable_on/{acts_as_taggable_on → taggable}/ownership.rb +1 -1
- data/lib/acts_as_taggable_on/{acts_as_taggable_on → taggable}/related.rb +6 -6
- data/lib/acts_as_taggable_on/taggable.rb +7 -8
- data/lib/acts_as_taggable_on/tagging.rb +7 -1
- data/lib/acts_as_taggable_on/tags_helper.rb +2 -2
- data/lib/acts_as_taggable_on/utils.rb +26 -50
- data/lib/acts_as_taggable_on/version.rb +1 -1
- data/spec/acts_as_taggable_on/acts_as_taggable_on_spec.rb +1 -1
- data/spec/acts_as_taggable_on/acts_as_tagger_spec.rb +1 -0
- data/spec/acts_as_taggable_on/caching_spec.rb +1 -0
- data/spec/acts_as_taggable_on/related_spec.rb +1 -0
- data/spec/acts_as_taggable_on/single_table_inheritance_spec.rb +1 -0
- data/spec/acts_as_taggable_on/tag_list_parser_spec.rb +46 -0
- data/spec/acts_as_taggable_on/tag_list_spec.rb +3 -40
- data/spec/acts_as_taggable_on/tag_spec.rb +34 -38
- data/spec/acts_as_taggable_on/taggable/dirty_spec.rb +127 -0
- data/spec/acts_as_taggable_on/taggable_spec.rb +84 -164
- data/spec/acts_as_taggable_on/tagger_spec.rb +1 -1
- data/spec/acts_as_taggable_on/tagging_spec.rb +37 -1
- data/spec/acts_as_taggable_on/tags_helper_spec.rb +1 -0
- data/spec/acts_as_taggable_on/utils_spec.rb +6 -11
- data/spec/internal/app/models/cached_model_with_array.rb +1 -1
- data/spec/internal/app/models/models.rb +2 -2
- data/spec/internal/db/schema.rb +2 -2
- data/spec/spec_helper.rb +0 -1
- data/spec/support/0-helpers.rb +32 -0
- data/spec/support/database_cleaner.rb +4 -0
- metadata +17 -47
- data/spec/bm.rb +0 -52
- data/spec/schema.rb +0 -82
- /data/lib/acts_as_taggable_on/{acts_as_taggable_on/compatibility.rb → compatibility.rb} +0 -0
- /data/lib/acts_as_taggable_on/{acts_as_taggable_on → taggable}/dirty.rb +0 -0
|
@@ -77,11 +77,11 @@ class OrderedTaggableModel < ActiveRecord::Base
|
|
|
77
77
|
acts_as_ordered_taggable_on :colours
|
|
78
78
|
end
|
|
79
79
|
|
|
80
|
-
if
|
|
80
|
+
if using_postgresql?
|
|
81
81
|
class CachedModelWithArray < ActiveRecord::Base
|
|
82
82
|
acts_as_taggable
|
|
83
83
|
end
|
|
84
|
-
if
|
|
84
|
+
if postgresql_support_json?
|
|
85
85
|
class TaggableModelWithJson < ActiveRecord::Base
|
|
86
86
|
acts_as_taggable
|
|
87
87
|
acts_as_taggable_on :skills
|
data/spec/internal/db/schema.rb
CHANGED
|
@@ -76,7 +76,7 @@ ActiveRecord::Schema.define version: 0 do
|
|
|
76
76
|
|
|
77
77
|
|
|
78
78
|
# Special cases for postgresql
|
|
79
|
-
if
|
|
79
|
+
if using_postgresql?
|
|
80
80
|
|
|
81
81
|
create_table :other_cached_with_array_models, force: true do |t|
|
|
82
82
|
t.column :name, :string
|
|
@@ -86,7 +86,7 @@ ActiveRecord::Schema.define version: 0 do
|
|
|
86
86
|
t.column :cached_glass_list, :string, array: true
|
|
87
87
|
end
|
|
88
88
|
|
|
89
|
-
if
|
|
89
|
+
if postgresql_support_json?
|
|
90
90
|
create_table :taggable_model_with_jsons, :force => true do |t|
|
|
91
91
|
t.column :name, :string
|
|
92
92
|
t.column :type, :string
|
data/spec/spec_helper.rb
CHANGED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
def using_sqlite?
|
|
2
|
+
ActsAsTaggableOn::Utils.connection && ActsAsTaggableOn::Utils.connection.adapter_name == 'SQLite'
|
|
3
|
+
end
|
|
4
|
+
|
|
5
|
+
def supports_concurrency?
|
|
6
|
+
!using_sqlite?
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def using_postgresql?
|
|
10
|
+
ActsAsTaggableOn::Utils.using_postgresql?
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def postgresql_version
|
|
14
|
+
if using_postgresql?
|
|
15
|
+
ActsAsTaggableOn::Utils.connection.execute('SHOW SERVER_VERSION').first['server_version'].to_f
|
|
16
|
+
else
|
|
17
|
+
0.0
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def postgresql_support_json?
|
|
22
|
+
postgresql_version >= 9.2
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def using_mysql?
|
|
27
|
+
ActsAsTaggableOn::Utils.using_mysql?
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def using_case_insensitive_collation?
|
|
31
|
+
using_mysql? && ActsAsTaggableOn::Utils.connection.collation =~ /_ci\Z/
|
|
32
|
+
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: acts-as-taggable-on
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 3.
|
|
4
|
+
version: 3.3.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Michael Bleigh
|
|
@@ -9,7 +9,7 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2014-
|
|
12
|
+
date: 2014-07-08 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: activerecord
|
|
@@ -31,26 +31,6 @@ dependencies:
|
|
|
31
31
|
- - "<"
|
|
32
32
|
- !ruby/object:Gem::Version
|
|
33
33
|
version: '5'
|
|
34
|
-
- !ruby/object:Gem::Dependency
|
|
35
|
-
name: actionpack
|
|
36
|
-
requirement: !ruby/object:Gem::Requirement
|
|
37
|
-
requirements:
|
|
38
|
-
- - ">="
|
|
39
|
-
- !ruby/object:Gem::Version
|
|
40
|
-
version: '3'
|
|
41
|
-
- - "<"
|
|
42
|
-
- !ruby/object:Gem::Version
|
|
43
|
-
version: '5'
|
|
44
|
-
type: :runtime
|
|
45
|
-
prerelease: false
|
|
46
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
47
|
-
requirements:
|
|
48
|
-
- - ">="
|
|
49
|
-
- !ruby/object:Gem::Version
|
|
50
|
-
version: '3'
|
|
51
|
-
- - "<"
|
|
52
|
-
- !ruby/object:Gem::Version
|
|
53
|
-
version: '5'
|
|
54
34
|
- !ruby/object:Gem::Dependency
|
|
55
35
|
name: sqlite3
|
|
56
36
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -135,20 +115,6 @@ dependencies:
|
|
|
135
115
|
- - ">="
|
|
136
116
|
- !ruby/object:Gem::Version
|
|
137
117
|
version: '0'
|
|
138
|
-
- !ruby/object:Gem::Dependency
|
|
139
|
-
name: ammeter
|
|
140
|
-
requirement: !ruby/object:Gem::Requirement
|
|
141
|
-
requirements:
|
|
142
|
-
- - ">="
|
|
143
|
-
- !ruby/object:Gem::Version
|
|
144
|
-
version: '0'
|
|
145
|
-
type: :development
|
|
146
|
-
prerelease: false
|
|
147
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
148
|
-
requirements:
|
|
149
|
-
- - ">="
|
|
150
|
-
- !ruby/object:Gem::Version
|
|
151
|
-
version: '0'
|
|
152
118
|
- !ruby/object:Gem::Dependency
|
|
153
119
|
name: barrier
|
|
154
120
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -202,23 +168,25 @@ files:
|
|
|
202
168
|
- db/migrate/1_acts_as_taggable_on_migration.rb
|
|
203
169
|
- db/migrate/2_add_missing_unique_indices.rb
|
|
204
170
|
- db/migrate/3_add_taggings_counter_cache_to_tags.rb
|
|
171
|
+
- db/migrate/4_add_missing_taggable_index.rb
|
|
205
172
|
- gemfiles/activerecord_3.2.gemfile
|
|
206
173
|
- gemfiles/activerecord_4.0.gemfile
|
|
207
174
|
- gemfiles/activerecord_4.1.gemfile
|
|
208
175
|
- gemfiles/activerecord_edge.gemfile
|
|
209
176
|
- lib/acts-as-taggable-on.rb
|
|
210
177
|
- lib/acts_as_taggable_on.rb
|
|
211
|
-
- lib/acts_as_taggable_on/
|
|
212
|
-
- lib/acts_as_taggable_on/acts_as_taggable_on/collection.rb
|
|
213
|
-
- lib/acts_as_taggable_on/acts_as_taggable_on/compatibility.rb
|
|
214
|
-
- lib/acts_as_taggable_on/acts_as_taggable_on/core.rb
|
|
215
|
-
- lib/acts_as_taggable_on/acts_as_taggable_on/dirty.rb
|
|
216
|
-
- lib/acts_as_taggable_on/acts_as_taggable_on/ownership.rb
|
|
217
|
-
- lib/acts_as_taggable_on/acts_as_taggable_on/related.rb
|
|
178
|
+
- lib/acts_as_taggable_on/compatibility.rb
|
|
218
179
|
- lib/acts_as_taggable_on/engine.rb
|
|
219
180
|
- lib/acts_as_taggable_on/tag.rb
|
|
220
181
|
- lib/acts_as_taggable_on/tag_list.rb
|
|
182
|
+
- lib/acts_as_taggable_on/tag_list_parser.rb
|
|
221
183
|
- lib/acts_as_taggable_on/taggable.rb
|
|
184
|
+
- lib/acts_as_taggable_on/taggable/cache.rb
|
|
185
|
+
- lib/acts_as_taggable_on/taggable/collection.rb
|
|
186
|
+
- lib/acts_as_taggable_on/taggable/core.rb
|
|
187
|
+
- lib/acts_as_taggable_on/taggable/dirty.rb
|
|
188
|
+
- lib/acts_as_taggable_on/taggable/ownership.rb
|
|
189
|
+
- lib/acts_as_taggable_on/taggable/related.rb
|
|
222
190
|
- lib/acts_as_taggable_on/tagger.rb
|
|
223
191
|
- lib/acts_as_taggable_on/tagging.rb
|
|
224
192
|
- lib/acts_as_taggable_on/tags_helper.rb
|
|
@@ -229,14 +197,15 @@ files:
|
|
|
229
197
|
- spec/acts_as_taggable_on/caching_spec.rb
|
|
230
198
|
- spec/acts_as_taggable_on/related_spec.rb
|
|
231
199
|
- spec/acts_as_taggable_on/single_table_inheritance_spec.rb
|
|
200
|
+
- spec/acts_as_taggable_on/tag_list_parser_spec.rb
|
|
232
201
|
- spec/acts_as_taggable_on/tag_list_spec.rb
|
|
233
202
|
- spec/acts_as_taggable_on/tag_spec.rb
|
|
203
|
+
- spec/acts_as_taggable_on/taggable/dirty_spec.rb
|
|
234
204
|
- spec/acts_as_taggable_on/taggable_spec.rb
|
|
235
205
|
- spec/acts_as_taggable_on/tagger_spec.rb
|
|
236
206
|
- spec/acts_as_taggable_on/tagging_spec.rb
|
|
237
207
|
- spec/acts_as_taggable_on/tags_helper_spec.rb
|
|
238
208
|
- spec/acts_as_taggable_on/utils_spec.rb
|
|
239
|
-
- spec/bm.rb
|
|
240
209
|
- spec/internal/app/models/altered_inheriting_taggable_model.rb
|
|
241
210
|
- spec/internal/app/models/cached_model.rb
|
|
242
211
|
- spec/internal/app/models/cached_model_with_array.rb
|
|
@@ -254,8 +223,8 @@ files:
|
|
|
254
223
|
- spec/internal/app/models/user.rb
|
|
255
224
|
- spec/internal/config/database.yml.sample
|
|
256
225
|
- spec/internal/db/schema.rb
|
|
257
|
-
- spec/schema.rb
|
|
258
226
|
- spec/spec_helper.rb
|
|
227
|
+
- spec/support/0-helpers.rb
|
|
259
228
|
- spec/support/array.rb
|
|
260
229
|
- spec/support/database.rb
|
|
261
230
|
- spec/support/database_cleaner.rb
|
|
@@ -302,14 +271,15 @@ test_files:
|
|
|
302
271
|
- spec/acts_as_taggable_on/caching_spec.rb
|
|
303
272
|
- spec/acts_as_taggable_on/related_spec.rb
|
|
304
273
|
- spec/acts_as_taggable_on/single_table_inheritance_spec.rb
|
|
274
|
+
- spec/acts_as_taggable_on/tag_list_parser_spec.rb
|
|
305
275
|
- spec/acts_as_taggable_on/tag_list_spec.rb
|
|
306
276
|
- spec/acts_as_taggable_on/tag_spec.rb
|
|
277
|
+
- spec/acts_as_taggable_on/taggable/dirty_spec.rb
|
|
307
278
|
- spec/acts_as_taggable_on/taggable_spec.rb
|
|
308
279
|
- spec/acts_as_taggable_on/tagger_spec.rb
|
|
309
280
|
- spec/acts_as_taggable_on/tagging_spec.rb
|
|
310
281
|
- spec/acts_as_taggable_on/tags_helper_spec.rb
|
|
311
282
|
- spec/acts_as_taggable_on/utils_spec.rb
|
|
312
|
-
- spec/bm.rb
|
|
313
283
|
- spec/internal/app/models/altered_inheriting_taggable_model.rb
|
|
314
284
|
- spec/internal/app/models/cached_model.rb
|
|
315
285
|
- spec/internal/app/models/cached_model_with_array.rb
|
|
@@ -327,8 +297,8 @@ test_files:
|
|
|
327
297
|
- spec/internal/app/models/user.rb
|
|
328
298
|
- spec/internal/config/database.yml.sample
|
|
329
299
|
- spec/internal/db/schema.rb
|
|
330
|
-
- spec/schema.rb
|
|
331
300
|
- spec/spec_helper.rb
|
|
301
|
+
- spec/support/0-helpers.rb
|
|
332
302
|
- spec/support/array.rb
|
|
333
303
|
- spec/support/database.rb
|
|
334
304
|
- spec/support/database_cleaner.rb
|
data/spec/bm.rb
DELETED
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
require 'active_record'
|
|
2
|
-
require 'action_view'
|
|
3
|
-
require File.expand_path('../../lib/acts-as-taggable-on', __FILE__)
|
|
4
|
-
|
|
5
|
-
if defined?(ActiveRecord::Acts::TaggableOn)
|
|
6
|
-
ActiveRecord::Base.send :include, ActiveRecord::Acts::TaggableOn
|
|
7
|
-
ActiveRecord::Base.send :include, ActiveRecord::Acts::Tagger
|
|
8
|
-
ActionView::Base.send :include, TagsHelper if defined?(ActionView::Base)
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
TEST_DATABASE_FILE = File.join(File.dirname(__FILE__), '..', 'test.sqlite3')
|
|
12
|
-
File.unlink(TEST_DATABASE_FILE) if File.exist?(TEST_DATABASE_FILE)
|
|
13
|
-
ActiveRecord::Base.establish_connection :adapter => 'sqlite3', :database => TEST_DATABASE_FILE
|
|
14
|
-
|
|
15
|
-
ActiveRecord::Base.silence do
|
|
16
|
-
ActiveRecord::Migration.verbose = false
|
|
17
|
-
ActiveRecord::Schema.define :version => 0 do
|
|
18
|
-
create_table "taggings", :force => true do |t|
|
|
19
|
-
t.integer "tag_id", :limit => 11
|
|
20
|
-
t.integer "taggable_id", :limit => 11
|
|
21
|
-
t.string "taggable_type"
|
|
22
|
-
t.string "context"
|
|
23
|
-
t.datetime "created_at"
|
|
24
|
-
t.integer "tagger_id", :limit => 11
|
|
25
|
-
t.string "tagger_type"
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
add_index "taggings", ["tag_id"], :name => "index_taggings_on_tag_id"
|
|
29
|
-
add_index "taggings", ["taggable_id", "taggable_type", "context"], :name => "index_taggings_on_taggable_id_and_taggable_type_and_context"
|
|
30
|
-
|
|
31
|
-
create_table "tags", :force => true do |t|
|
|
32
|
-
t.string "name"
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
create_table :taggable_models, :force => true do |t|
|
|
36
|
-
t.column :name, :string
|
|
37
|
-
t.column :type, :string
|
|
38
|
-
t.column :cached_tag_list, :string
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
class TaggableModel < ActiveRecord::Base
|
|
43
|
-
acts_as_taggable
|
|
44
|
-
acts_as_taggable_on :languages
|
|
45
|
-
acts_as_taggable_on :skills
|
|
46
|
-
acts_as_taggable_on :needs, :offerings
|
|
47
|
-
end
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
puts Benchmark.measure {
|
|
51
|
-
1000.times { TaggableModel.create :tag_list => "awesome, epic, neat" }
|
|
52
|
-
}
|
data/spec/schema.rb
DELETED
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
ActiveRecord::Schema.define :version => 0 do
|
|
2
|
-
create_table :tags, :force => true do |t|
|
|
3
|
-
t.string :name
|
|
4
|
-
t.integer :taggings_count, :default => 0
|
|
5
|
-
end
|
|
6
|
-
add_index "tags", ["name"], name: "index_tags_on_name", unique: true
|
|
7
|
-
|
|
8
|
-
create_table :taggings, :force => true do |t|
|
|
9
|
-
t.references :tag
|
|
10
|
-
|
|
11
|
-
# You should make sure that the column created is
|
|
12
|
-
# long enough to store the required class names.
|
|
13
|
-
t.references :taggable, :polymorphic => true
|
|
14
|
-
t.references :tagger, :polymorphic => true
|
|
15
|
-
|
|
16
|
-
# Limit is created to prevent MySQL error on index
|
|
17
|
-
# length for MyISAM table type: http://bit.ly/vgW2Ql
|
|
18
|
-
t.string :context, :limit => 128
|
|
19
|
-
|
|
20
|
-
t.datetime :created_at
|
|
21
|
-
end
|
|
22
|
-
add_index "taggings",
|
|
23
|
-
["tag_id", "taggable_id", "taggable_type", "context", "tagger_id", "tagger_type"],
|
|
24
|
-
unique: true, name: "taggings_idx"
|
|
25
|
-
|
|
26
|
-
# above copied from
|
|
27
|
-
# generators/acts_as_taggable_on/migration/migration_generator
|
|
28
|
-
|
|
29
|
-
create_table :taggable_models, :force => true do |t|
|
|
30
|
-
t.column :name, :string
|
|
31
|
-
t.column :type, :string
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
create_table :non_standard_id_taggable_models, :primary_key => "an_id", :force => true do |t|
|
|
35
|
-
t.column :name, :string
|
|
36
|
-
t.column :type, :string
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
create_table :untaggable_models, :force => true do |t|
|
|
40
|
-
t.column :taggable_model_id, :integer
|
|
41
|
-
t.column :name, :string
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
create_table :cached_models, :force => true do |t|
|
|
45
|
-
t.column :name, :string
|
|
46
|
-
t.column :type, :string
|
|
47
|
-
t.column :cached_tag_list, :string
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
create_table :other_cached_models, :force => true do |t|
|
|
51
|
-
t.column :name, :string
|
|
52
|
-
t.column :type, :string
|
|
53
|
-
t.column :cached_language_list, :string
|
|
54
|
-
t.column :cached_status_list, :string
|
|
55
|
-
t.column :cached_glass_list, :string
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
create_table :users, :force => true do |t|
|
|
59
|
-
t.column :name, :string
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
create_table :other_taggable_models, :force => true do |t|
|
|
63
|
-
t.column :name, :string
|
|
64
|
-
t.column :type, :string
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
create_table :ordered_taggable_models, :force => true do |t|
|
|
68
|
-
t.column :name, :string
|
|
69
|
-
t.column :type, :string
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
create_table :taggable_model_with_jsons, :force => true do |t|
|
|
73
|
-
t.column :name, :string
|
|
74
|
-
t.column :type, :string
|
|
75
|
-
if self.connection.adapter_name == 'PostgreSQL' && self.connection.execute("SHOW SERVER_VERSION").first["server_version"].to_f >= 9.2
|
|
76
|
-
type = :json
|
|
77
|
-
else
|
|
78
|
-
type = :string
|
|
79
|
-
end
|
|
80
|
-
t.column :opts, type
|
|
81
|
-
end
|
|
82
|
-
end
|
|
File without changes
|
|
File without changes
|