acts-as-taggable-on 3.2.1 → 3.2.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: bbd5e8b1bc5588e5fa1f7c52d650d51284426c46
4
- data.tar.gz: 8310137e6ed880ac050af6a67e0afb648720c0a8
3
+ metadata.gz: bc40e6d7c5c8b741bfc71aee7ae2406c6f824108
4
+ data.tar.gz: 3c89e20ed3b39ef33d52724d4bb8b9aa3e5738f9
5
5
  SHA512:
6
- metadata.gz: 1ba873f7c016fac3ddbbad4f8ff7b946bb7ffca89074b4db76f63d58c241e01726d18fcd502a7e60fe31b635f6f1fae5d5c26dce911211db07a9c8506e07d13b
7
- data.tar.gz: 098fd2268afe38cd7278a8908e6c11b1aeba8370754224730510d71a336130b89831051640fac2af432171c09f51e346b18c141e2d97553a68efc680a6afa680
6
+ metadata.gz: e4142af492646d113a10fa0ae4815d91a281f2a55d60fb70b653a96d4ac58e24c56e1e10bcbf9907bbcc06cee2b476b6ec4a568cc25e5247578a140cbf388d85
7
+ data.tar.gz: eceb8e025f83cdbc9e237405eac982aa3b7c7ef0f54d803fcd80d1ed837b833d4f07fe549f0eb0eaa443edb5cdc84bcad79555a67a886e7fc706b46aa5d37b35
@@ -4,21 +4,33 @@ Each change should fall into categories that would affect whether the release is
4
4
 
5
5
  As such, a _Feature_ would map to either major or minor. A _bug fix_ to a patch. And _misc_ is either minor or patch, the difference being kind of fuzzy for the purposes of history. Adding tests would be patch level.
6
6
 
7
- ### Master [changes](https://github.com/mbleigh/acts-as-taggable-on/compare/v3.1.0...master)
8
-
9
- * Breaking Changes
10
- * Features
11
- * [@chess #413 Hook to support STI subclasses of Tag in save_tags](https://github.com/mbleigh/acts-as-taggable-on/pull/413)
12
- * Fixes
13
- * [@jdelStrother #515 Rename Compatibility methods to reduce chance of conflicts ](https://github.com/mbleigh/acts-as-taggable-on/pull/515)
14
- * [@seuros #512 fix for << method](https://github.com/mbleigh/acts-as-taggable-on/pull/512)
15
- * [@sonots #510 fix IN subquery error for mysql](https://github.com/mbleigh/acts-as-taggable-on/pull/510)
16
- * [@jonseaberg #499 fix for race condition when multiple processes try to add the same tag](https://github.com/mbleigh/acts-as-taggable-on/pull/499)
17
- * [@leklund #496 Fix for distinct and postgresql json columns errors](https://github.com/mbleigh/acts-as-taggable-on/pull/496)
18
- * [@thatbettina & @plexus #394 Multiple quoted tags](https://github.com/mbleigh/acts-as-taggable-on/pull/496)
19
- * Performance
20
- * Misc
21
- * [@seuros #511 Rspec 3](https://github.com/mbleigh/acts-as-taggable-on/pull/511)
7
+ ### Master [changes](https://github.com/mbleigh/acts-as-taggable-on/compare/v3.2.0...master)
8
+
9
+ * Breaking Changes
10
+ * Taggable models are not extend with ActsAsTaggableOn::Utils anymore
11
+ * Features
12
+ * Fixes
13
+ * Performance
14
+ * Misc
15
+ * Deleted outdated benchmark script
16
+
17
+
18
+ ### [3.2.0 / 2014-05-1](https://github.com/mbleigh/acts-as-taggable-on/compare/v3.1.1...v3.2.0)
19
+
20
+ * Breaking Changes
21
+ * ActsAsTaggableOn::Tag is not extend with ActsAsTaggableOn::Utils anymore
22
+ * Features
23
+ * [@chess #413 Hook to support STI subclasses of Tag in save_tags](https://github.com/mbleigh/acts-as-taggable-on/pull/413)
24
+ * Fixes
25
+ * [@jdelStrother #515 Rename Compatibility methods to reduce chance of conflicts ](https://github.com/mbleigh/acts-as-taggable-on/pull/515)
26
+ * [@seuros #512 fix for << method](https://github.com/mbleigh/acts-as-taggable-on/pull/512)
27
+ * [@sonots #510 fix IN subquery error for mysql](https://github.com/mbleigh/acts-as-taggable-on/pull/510)
28
+ * [@jonseaberg #499 fix for race condition when multiple processes try to add the same tag](https://github.com/mbleigh/acts-as-taggable-on/pull/499)
29
+ * [@leklund #496 Fix for distinct and postgresql json columns errors](https://github.com/mbleigh/acts-as-taggable-on/pull/496)
30
+ * [@thatbettina & @plexus #394 Multiple quoted tags](https://github.com/mbleigh/acts-as-taggable-on/pull/496)
31
+ * Performance
32
+ * Misc
33
+ * [@seuros #511 Rspec 3](https://github.com/mbleigh/acts-as-taggable-on/pull/511)
22
34
 
23
35
  ### [3.1.0 / 2014-03-31](https://github.com/mbleigh/acts-as-taggable-on/compare/v3.0.1...v3.1.0)
24
36
 
data/README.md CHANGED
@@ -135,11 +135,13 @@ these methods are added to the model: `skill_list`(and `skill_list.add`, `skill_
135
135
  # => ["joking", "clowning", "boxing", "coding"]
136
136
 
137
137
  @another_user = User.new(:name => "Alice")
138
- @another_story.skill_list.add("joking")
139
- @another_story.save
138
+ @another_user.skill_list.add("clowning")
139
+ @another_user.save
140
140
 
141
141
  User.skill_counts
142
- => [#<ActsAsTaggableOn::Tag id: 1, name: "joking", taggings_count: 2>, #<ActsAsTaggableOn::Tag id: 2, name: "clowning", taggings_count: 1>, ...]
142
+ => [#<ActsAsTaggableOn::Tag id: 1, name: "joking", taggings_count: 1>,
143
+ #<ActsAsTaggableOn::Tag id: 2, name: "clowning", taggings_count: 2>,
144
+ #<ActsAsTaggableOn::Tag id: 3, name: "boxing", taggings_count: 1>]
143
145
  ```
144
146
 
145
147
  To preserve the order in which tags are created use `acts_as_ordered_taggable`:
@@ -176,22 +178,22 @@ end
176
178
  User.tagged_with("awesome").by_join_date
177
179
  User.tagged_with("awesome").by_join_date.paginate(:page => params[:page], :per_page => 20)
178
180
 
179
- # Find a user with matching all tags, not just one:
181
+ # Find users that matches all given tags:
180
182
  User.tagged_with(["awesome", "cool"], :match_all => true)
181
183
 
182
- # Find a user with any of the tags:
184
+ # Find users with any of the specified tags:
183
185
  User.tagged_with(["awesome", "cool"], :any => true)
184
186
 
185
- # Find a user that not tags with awesome or cool:
187
+ # Find users that has not been tagged with awesome or cool:
186
188
  User.tagged_with(["awesome", "cool"], :exclude => true)
187
189
 
188
- # Find a user with any of tags based on context:
190
+ # Find users with any of the tags based on context:
189
191
  User.tagged_with(['awesome', 'cool'], :on => :tags, :any => true).tagged_with(['smart', 'shy'], :on => :skills, :any => true)
190
192
  ```
191
193
 
192
- You can also use `:wild => true` option along with `:any` or `:exclude` option. It will looking for `%awesome%` and `%cool%` in sql.
194
+ You can also use `:wild => true` option along with `:any` or `:exclude` option. It will be looking for `%awesome%` and `%cool%` in SQL.
193
195
 
194
- __Tip:__ `User.tagged_with([])` or `User.tagged_with('')` will return `[]`, but not all records.
196
+ __Tip:__ `User.tagged_with([])` or `User.tagged_with('')` will return `[]`, an empty set of records.
195
197
 
196
198
  ### Relationships
197
199
 
@@ -273,7 +275,7 @@ Photo.tagged_with("paris", :on => :locations, :owned_by => @some_user)
273
275
  To construct tag clouds, the frequency of each tag needs to be calculated.
274
276
  Because we specified `acts_as_taggable_on` on the `User` class, we can
275
277
  get a calculation of all the tag counts by using `User.tag_counts_on(:customs)`. But what if we wanted a tag count for
276
- an single user's posts? To achieve this we call tag_counts on the association:
278
+ a single user's posts? To achieve this we call tag_counts on the association:
277
279
 
278
280
  ```ruby
279
281
  User.find(:first).posts.tag_counts_on(:tags)
@@ -360,6 +362,11 @@ We have a long list of valued contributors. [Check them all](https://github.com/
360
362
 
361
363
  * [Joost Baaij](https://github.com/tilsammans)
362
364
 
365
+ ## TODO
366
+
367
+ - Write benchmark script
368
+ - Resolve concurrency issues
369
+
363
370
  ## Testing
364
371
 
365
372
  Acts As Taggable On uses RSpec for its test coverage. Inside the gem
@@ -26,13 +26,13 @@ Gem::Specification.new do |gem|
26
26
  gem.add_runtime_dependency 'actionpack', ['>= 3', '< 5']
27
27
 
28
28
  gem.add_development_dependency 'sqlite3'
29
- gem.add_development_dependency 'mysql2', '~> 0.3.7'
29
+ gem.add_development_dependency 'mysql2'
30
30
  gem.add_development_dependency 'pg'
31
31
 
32
- gem.add_development_dependency 'rspec-rails' , '~> 3.0.0.beta'
33
- gem.add_development_dependency 'rspec-its'
34
- gem.add_development_dependency 'rspec'
35
- gem.add_development_dependency 'ammeter'
36
- gem.add_development_dependency 'barrier'
37
- gem.add_development_dependency 'database_cleaner'
32
+ gem.add_development_dependency 'rspec-rails' , '~> 3.0.0.beta2'
33
+ gem.add_development_dependency 'rspec-its', '~> 1.0'
34
+ gem.add_development_dependency 'rspec', '3.0.0.beta2'
35
+ gem.add_development_dependency 'ammeter', '~> 1.0'
36
+ gem.add_development_dependency 'barrier', '~> 1.0'
37
+ gem.add_development_dependency 'database_cleaner', '~> 1.2'
38
38
  end
@@ -31,6 +31,7 @@ module ActsAsTaggableOn::Taggable
31
31
  # to mimic the underlying behavior. While processing this first
32
32
  # call to columns, we do the caching column check and dynamically add
33
33
  # the class and instance methods
34
+ # FIXME: this method cannot compile in rubinius
34
35
  def columns
35
36
  @acts_as_taggable_on_cache_columns ||= begin
36
37
  db_columns = super
@@ -24,16 +24,16 @@ module ActsAsTaggableOn::Taggable
24
24
  # when preserving tag order, include order option so that for a 'tags' context
25
25
  # the associations tag_taggings & tags are always returned in created order
26
26
  has_many_with_taggable_compatibility context_taggings, as: :taggable,
27
- dependent: :destroy,
28
- class_name: 'ActsAsTaggableOn::Tagging',
29
- order: taggings_order,
30
- conditions: ["#{ActsAsTaggableOn::Tagging.table_name}.context = (?)", tags_type],
31
- include: :tag
27
+ dependent: :destroy,
28
+ class_name: 'ActsAsTaggableOn::Tagging',
29
+ order: taggings_order,
30
+ conditions: ["#{ActsAsTaggableOn::Tagging.table_name}.context = (?)", tags_type],
31
+ include: :tag
32
32
 
33
33
  has_many_with_taggable_compatibility context_tags, through: context_taggings,
34
- source: :tag,
35
- class_name: 'ActsAsTaggableOn::Tag',
36
- order: taggings_order
34
+ source: :tag,
35
+ class_name: 'ActsAsTaggableOn::Tag',
36
+ order: taggings_order
37
37
 
38
38
  end
39
39
 
@@ -130,7 +130,7 @@ module ActsAsTaggableOn::Taggable
130
130
  taggings_context = context ? "_#{context}" : ''
131
131
 
132
132
  taggings_alias = adjust_taggings_alias(
133
- "#{alias_base_name[0..4]}#{taggings_context[0..6]}_taggings_#{sha_prefix(tags.map(&:name).join('_'))}"
133
+ "#{alias_base_name[0..4]}#{taggings_context[0..6]}_taggings_#{ActsAsTaggableOn::Utils.sha_prefix(tags.map(&:name).join('_'))}"
134
134
  )
135
135
 
136
136
  tagging_join = "JOIN #{ActsAsTaggableOn::Tagging.table_name} #{taggings_alias}" \
@@ -145,9 +145,9 @@ module ActsAsTaggableOn::Taggable
145
145
  if owned_by
146
146
  tagging_join << ' AND ' +
147
147
  sanitize_sql([
148
- "#{taggings_alias}.tagger_id = ? AND #{taggings_alias}.tagger_type = ?",
149
- owned_by.id,
150
- owned_by.class.base_class.to_s
148
+ "#{taggings_alias}.tagger_id = ? AND #{taggings_alias}.tagger_type = ?",
149
+ owned_by.id,
150
+ owned_by.class.base_class.to_s
151
151
  ])
152
152
  end
153
153
 
@@ -159,7 +159,7 @@ module ActsAsTaggableOn::Taggable
159
159
  return empty_result unless tags.length == tag_list.length
160
160
 
161
161
  tags.each do |tag|
162
- taggings_alias = adjust_taggings_alias("#{alias_base_name[0..11]}_taggings_#{sha_prefix(tag.name)}")
162
+ taggings_alias = adjust_taggings_alias("#{alias_base_name[0..11]}_taggings_#{ActsAsTaggableOn::Utils.sha_prefix(tag.name)}")
163
163
  tagging_join = "JOIN #{ActsAsTaggableOn::Tagging.table_name} #{taggings_alias}" \
164
164
  " ON #{taggings_alias}.taggable_id = #{quote}#{table_name}#{quote}.#{primary_key}" +
165
165
  " AND #{taggings_alias}.taggable_type = #{quote_value(base_class.name, nil)}" +
@@ -170,9 +170,9 @@ module ActsAsTaggableOn::Taggable
170
170
  if owned_by
171
171
  tagging_join << ' AND ' +
172
172
  sanitize_sql([
173
- "#{taggings_alias}.tagger_id = ? AND #{taggings_alias}.tagger_type = ?",
174
- owned_by.id,
175
- owned_by.class.base_class.to_s
173
+ "#{taggings_alias}.tagger_id = ? AND #{taggings_alias}.tagger_type = ?",
174
+ owned_by.id,
175
+ owned_by.class.base_class.to_s
176
176
  ])
177
177
  end
178
178
 
@@ -202,13 +202,13 @@ module ActsAsTaggableOn::Taggable
202
202
 
203
203
  order_by << options[:order] if options[:order].present?
204
204
 
205
- request = select(select_clause).
206
- joins(joins.join(' ')).
207
- where(conditions.join(' AND ')).
208
- group(group).
209
- having(having).
210
- order(order_by.join(', ')).
211
- readonly(false)
205
+ select(select_clause)
206
+ .joins(joins.join(' '))
207
+ .where(conditions.join(' AND '))
208
+ .group(group)
209
+ .having(having)
210
+ .order(order_by.join(', '))
211
+ .readonly(false)
212
212
  end
213
213
 
214
214
  def is_taggable?
@@ -61,11 +61,11 @@ module ActsAsTaggableOn::Taggable
61
61
  end
62
62
 
63
63
  def related_where(klass, conditions)
64
- klass.select("#{klass.table_name}.*, COUNT(#{ActsAsTaggableOn::Tag.table_name}.#{ActsAsTaggableOn::Tag.primary_key}) AS count").
65
- from("#{klass.table_name}, #{ActsAsTaggableOn::Tag.table_name}, #{ActsAsTaggableOn::Tagging.table_name}").
66
- group(group_columns(klass)).
67
- order('count DESC').
68
- where(conditions)
64
+ klass.select("#{klass.table_name}.*, COUNT(#{ActsAsTaggableOn::Tag.table_name}.#{ActsAsTaggableOn::Tag.primary_key}) AS count")
65
+ .from("#{klass.table_name}, #{ActsAsTaggableOn::Tag.table_name}, #{ActsAsTaggableOn::Tagging.table_name}")
66
+ .group(group_columns(klass))
67
+ .order('count DESC')
68
+ .where(conditions)
69
69
  end
70
70
  end
71
71
  end
@@ -149,9 +149,10 @@ module ActsAsTaggableOn
149
149
 
150
150
  private
151
151
 
152
- # Remove whitespace, duplicates, and blanks.
152
+ # Convert everything to string, remove whitespace, duplicates, and blanks.
153
153
  def clean!
154
154
  reject!(&:blank?)
155
+ map!(&:to_s)
155
156
  map!(&:strip)
156
157
  map! { |tag| tag.mb_chars.downcase.to_s } if ActsAsTaggableOn.force_lowercase
157
158
  map!(&:parameterize) if ActsAsTaggableOn.force_parameterize
@@ -85,8 +85,6 @@ module ActsAsTaggableOn
85
85
  def self.taggable?
86
86
  true
87
87
  end
88
-
89
- extend ActsAsTaggableOn::Utils
90
88
  end
91
89
  end
92
90
 
@@ -1,62 +1,62 @@
1
1
  module ActsAsTaggableOn
2
2
  module Utils
3
- extend self
4
-
5
- # Use ActsAsTaggableOn::Tag connection
6
- def connection
7
- ActsAsTaggableOn::Tag.connection
8
- end
3
+ class << self
4
+ # Use ActsAsTaggableOn::Tag connection
5
+ def connection
6
+ ActsAsTaggableOn::Tag.connection
7
+ end
9
8
 
10
- def using_postgresql?
11
- connection && connection.adapter_name == 'PostgreSQL'
12
- end
9
+ def using_postgresql?
10
+ connection && connection.adapter_name == 'PostgreSQL'
11
+ end
13
12
 
14
- def postgresql_version
15
- if using_postgresql?
16
- connection.execute("SHOW SERVER_VERSION").first["server_version"].to_f
13
+ def postgresql_version
14
+ if using_postgresql?
15
+ connection.execute('SHOW SERVER_VERSION').first['server_version'].to_f
16
+ end
17
17
  end
18
- end
19
18
 
20
- def postgresql_support_json?
21
- postgresql_version >= 9.2
22
- end
19
+ def postgresql_support_json?
20
+ postgresql_version >= 9.2
21
+ end
23
22
 
24
- def using_sqlite?
25
- connection && connection.adapter_name == 'SQLite'
26
- end
23
+ def using_sqlite?
24
+ connection && connection.adapter_name == 'SQLite'
25
+ end
27
26
 
28
- def using_mysql?
29
- #We should probably use regex for mysql to support prehistoric adapters
30
- connection && connection.adapter_name == 'Mysql2'
31
- end
27
+ def using_mysql?
28
+ #We should probably use regex for mysql to support prehistoric adapters
29
+ connection && connection.adapter_name == 'Mysql2'
30
+ end
32
31
 
33
- def using_case_insensitive_collation?
34
- using_mysql? && connection.collation =~ /_ci\Z/
35
- end
32
+ def using_case_insensitive_collation?
33
+ using_mysql? && connection.collation =~ /_ci\Z/
34
+ end
36
35
 
37
- def supports_concurrency?
38
- !using_sqlite?
39
- end
36
+ def supports_concurrency?
37
+ !using_sqlite?
38
+ end
40
39
 
41
- def sha_prefix(string)
42
- Digest::SHA1.hexdigest("#{string}#{rand}")[0..6]
43
- end
40
+ def sha_prefix(string)
41
+ Digest::SHA1.hexdigest("#{string}#{rand}")[0..6]
42
+ end
44
43
 
45
- def active_record4?
46
- ::ActiveRecord::VERSION::MAJOR == 4
47
- end
44
+ def active_record4?
45
+ ::ActiveRecord::VERSION::MAJOR == 4
46
+ end
48
47
 
49
- def active_record42?
50
- active_record4? && ::ActiveRecord::VERSION::MINOR >= 2
51
- end
48
+ def active_record42?
49
+ active_record4? && ::ActiveRecord::VERSION::MINOR >= 2
50
+ end
52
51
 
53
- def like_operator
54
- using_postgresql? ? 'ILIKE' : 'LIKE'
55
- end
52
+ def like_operator
53
+ using_postgresql? ? 'ILIKE' : 'LIKE'
54
+ end
56
55
 
57
- # escape _ and % characters in strings, since these are wildcards in SQL.
58
- def escape_like(str)
59
- str.gsub(/[!%_]/) { |x| '!' + x }
56
+ # escape _ and % characters in strings, since these are wildcards in SQL.
57
+ def escape_like(str)
58
+ str.gsub(/[!%_]/) { |x| '!' + x }
59
+ end
60
60
  end
61
61
  end
62
62
  end
@@ -1,4 +1,4 @@
1
1
  module ActsAsTaggableOn
2
- VERSION = '3.2.1'
2
+ VERSION = '3.2.2'
3
3
  end
4
4
 
@@ -3,8 +3,11 @@ require 'spec_helper'
3
3
  require 'db/migrate/2_add_missing_unique_indices.rb'
4
4
 
5
5
  shared_examples_for 'without unique index' do
6
- before { AddMissingUniqueIndices.down }
7
- after { ActsAsTaggableOn::Tag.delete_all; AddMissingUniqueIndices.up }
6
+ prepend_before(:all) { AddMissingUniqueIndices.down }
7
+ append_after(:all) do
8
+ ActsAsTaggableOn::Tag.delete_all
9
+ AddMissingUniqueIndices.up
10
+ end
8
11
  end
9
12
 
10
13
  describe ActsAsTaggableOn::Tag do
@@ -14,10 +17,9 @@ describe ActsAsTaggableOn::Tag do
14
17
  end
15
18
 
16
19
 
17
-
18
20
  describe 'named like any' do
19
- context 'case insensitive collation and unique index on tag name' do
20
- if ActsAsTaggableOn::Utils.using_case_insensitive_collation?
21
+ if ActsAsTaggableOn::Utils.using_case_insensitive_collation?
22
+ context 'case insensitive collation and unique index on tag name' do
21
23
  before(:each) do
22
24
  ActsAsTaggableOn::Tag.create(name: 'Awesome')
23
25
  ActsAsTaggableOn::Tag.create(name: 'epic')
@@ -621,8 +621,8 @@ describe 'Taggable' do
621
621
  it 'should return all column names joined for Tag GROUP clause' do
622
622
  # NOTE: type column supports an STI Tag subclass in the test suite, though
623
623
  # isn't included by default in the migration generator
624
- expect(@taggable.grouped_column_names_for(ActsAsTaggableOn::Tag)).
625
- to eq('tags.id, tags.name, tags.taggings_count, tags.type')
624
+ expect(@taggable.grouped_column_names_for(ActsAsTaggableOn::Tag))
625
+ .to eq('tags.id, tags.name, tags.taggings_count, tags.type')
626
626
  end
627
627
 
628
628
  it 'should return all column names joined for TaggableModel GROUP clause' do
@@ -847,33 +847,34 @@ describe 'Taggable' do
847
847
  end
848
848
  end
849
849
 
850
-
851
850
  if ActsAsTaggableOn::Utils.using_postgresql?
852
- describe 'Taggable model with json columns' do
853
- before(:each) do
854
- @taggable = TaggableModelWithJson.new(:name => 'Bob Jones')
855
- @taggables = [@taggable, TaggableModelWithJson.new(:name => 'John Doe')]
856
- end
851
+ if ActsAsTaggableOn::Utils.postgresql_support_json?
852
+ describe 'Taggable model with json columns' do
853
+ before(:each) do
854
+ @taggable = TaggableModelWithJson.new(:name => 'Bob Jones')
855
+ @taggables = [@taggable, TaggableModelWithJson.new(:name => 'John Doe')]
856
+ end
857
857
 
858
- it 'should be able to find by tag with context' do
859
- @taggable.skill_list = 'ruby, rails, css'
860
- @taggable.tag_list = 'bob, charlie'
861
- @taggable.save
858
+ it 'should be able to find by tag with context' do
859
+ @taggable.skill_list = 'ruby, rails, css'
860
+ @taggable.tag_list = 'bob, charlie'
861
+ @taggable.save
862
862
 
863
- expect(TaggableModelWithJson.tagged_with('ruby').first).to eq(@taggable)
864
- expect(TaggableModelWithJson.tagged_with('ruby, css').first).to eq(@taggable)
865
- expect(TaggableModelWithJson.tagged_with('bob', :on => :skills).first).to_not eq(@taggable)
866
- expect(TaggableModelWithJson.tagged_with('bob', :on => :tags).first).to eq(@taggable)
867
- end
863
+ expect(TaggableModelWithJson.tagged_with('ruby').first).to eq(@taggable)
864
+ expect(TaggableModelWithJson.tagged_with('ruby, css').first).to eq(@taggable)
865
+ expect(TaggableModelWithJson.tagged_with('bob', :on => :skills).first).to_not eq(@taggable)
866
+ expect(TaggableModelWithJson.tagged_with('bob', :on => :tags).first).to eq(@taggable)
867
+ end
868
868
 
869
- it 'should be able to find tagged with any tag' do
870
- bob = TaggableModelWithJson.create(:name => 'Bob', :tag_list => 'fitter, happier, more productive', :skill_list => 'ruby, rails, css')
871
- frank = TaggableModelWithJson.create(:name => 'Frank', :tag_list => 'weaker, depressed, inefficient', :skill_list => 'ruby, rails, css')
872
- steve = TaggableModelWithJson.create(:name => 'Steve', :tag_list => 'fitter, happier, more productive', :skill_list => 'c++, java, ruby')
869
+ it 'should be able to find tagged with any tag' do
870
+ bob = TaggableModelWithJson.create(:name => 'Bob', :tag_list => 'fitter, happier, more productive', :skill_list => 'ruby, rails, css')
871
+ frank = TaggableModelWithJson.create(:name => 'Frank', :tag_list => 'weaker, depressed, inefficient', :skill_list => 'ruby, rails, css')
872
+ steve = TaggableModelWithJson.create(:name => 'Steve', :tag_list => 'fitter, happier, more productive', :skill_list => 'c++, java, ruby')
873
873
 
874
- expect(TaggableModelWithJson.tagged_with(%w(ruby java), :order => 'taggable_model_with_jsons.name', :any => true).to_a).to eq([bob, frank, steve])
875
- expect(TaggableModelWithJson.tagged_with(%w(c++ fitter), :order => 'taggable_model_with_jsons.name', :any => true).to_a).to eq([bob, steve])
876
- expect(TaggableModelWithJson.tagged_with(%w(depressed css), :order => 'taggable_model_with_jsons.name', :any => true).to_a).to eq([bob, frank])
874
+ expect(TaggableModelWithJson.tagged_with(%w(ruby java), :order => 'taggable_model_with_jsons.name', :any => true).to_a).to eq([bob, frank, steve])
875
+ expect(TaggableModelWithJson.tagged_with(%w(c++ fitter), :order => 'taggable_model_with_jsons.name', :any => true).to_a).to eq([bob, steve])
876
+ expect(TaggableModelWithJson.tagged_with(%w(depressed css), :order => 'taggable_model_with_jsons.name', :any => true).to_a).to eq([bob, frank])
877
+ end
877
878
  end
878
879
  end
879
880
  end
@@ -1,21 +1,15 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe ActsAsTaggableOn::Utils do
4
- describe 'like_operator' do
5
- before(:each) do
6
- TaggableModel.acts_as_taggable_on(:tags, :languages, :skills, :needs, :offerings)
7
- @taggable = TaggableModel.new(name: 'Bob Jones')
8
- end
9
-
10
-
4
+ describe '#like_operator' do
11
5
  it 'should return \'ILIKE\' when the adapter is PostgreSQL' do
12
- allow(TaggableModel.connection).to receive(:adapter_name) { 'PostgreSQL' }
13
- expect(TaggableModel.send(:like_operator)).to eq('ILIKE')
6
+ allow(ActsAsTaggableOn::Utils.connection).to receive(:adapter_name) { 'PostgreSQL' }
7
+ expect(ActsAsTaggableOn::Utils.like_operator).to eq('ILIKE')
14
8
  end
15
9
 
16
10
  it 'should return \'LIKE\' when the adapter is not PostgreSQL' do
17
- allow(TaggableModel.connection).to receive(:adapter_name) { 'MySQL' }
18
- expect(TaggableModel.send(:like_operator)).to eq('LIKE')
11
+ allow(ActsAsTaggableOn::Utils.connection).to receive(:adapter_name) { 'MySQL' }
12
+ expect(ActsAsTaggableOn::Utils.like_operator).to eq('LIKE')
19
13
  end
20
14
  end
21
15
  end
@@ -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 self.
89
+ if ActsAsTaggableOn::Utils.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
@@ -6,6 +6,10 @@ RSpec.configure do |config|
6
6
  DatabaseCleaner.clean
7
7
  end
8
8
 
9
+ config.after(:suite) do
10
+ DatabaseCleaner.clean
11
+ end
12
+
9
13
  config.before(:each) do
10
14
  DatabaseCleaner.start
11
15
  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.2.1
4
+ version: 3.2.2
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-05-06 00:00:00.000000000 Z
12
+ date: 2014-05-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activerecord
@@ -69,16 +69,16 @@ dependencies:
69
69
  name: mysql2
70
70
  requirement: !ruby/object:Gem::Requirement
71
71
  requirements:
72
- - - "~>"
72
+ - - ">="
73
73
  - !ruby/object:Gem::Version
74
- version: 0.3.7
74
+ version: '0'
75
75
  type: :development
76
76
  prerelease: false
77
77
  version_requirements: !ruby/object:Gem::Requirement
78
78
  requirements:
79
- - - "~>"
79
+ - - ">="
80
80
  - !ruby/object:Gem::Version
81
- version: 0.3.7
81
+ version: '0'
82
82
  - !ruby/object:Gem::Dependency
83
83
  name: pg
84
84
  requirement: !ruby/object:Gem::Requirement
@@ -99,84 +99,84 @@ dependencies:
99
99
  requirements:
100
100
  - - "~>"
101
101
  - !ruby/object:Gem::Version
102
- version: 3.0.0.beta
102
+ version: 3.0.0.beta2
103
103
  type: :development
104
104
  prerelease: false
105
105
  version_requirements: !ruby/object:Gem::Requirement
106
106
  requirements:
107
107
  - - "~>"
108
108
  - !ruby/object:Gem::Version
109
- version: 3.0.0.beta
109
+ version: 3.0.0.beta2
110
110
  - !ruby/object:Gem::Dependency
111
111
  name: rspec-its
112
112
  requirement: !ruby/object:Gem::Requirement
113
113
  requirements:
114
- - - ">="
114
+ - - "~>"
115
115
  - !ruby/object:Gem::Version
116
- version: '0'
116
+ version: '1.0'
117
117
  type: :development
118
118
  prerelease: false
119
119
  version_requirements: !ruby/object:Gem::Requirement
120
120
  requirements:
121
- - - ">="
121
+ - - "~>"
122
122
  - !ruby/object:Gem::Version
123
- version: '0'
123
+ version: '1.0'
124
124
  - !ruby/object:Gem::Dependency
125
125
  name: rspec
126
126
  requirement: !ruby/object:Gem::Requirement
127
127
  requirements:
128
- - - ">="
128
+ - - '='
129
129
  - !ruby/object:Gem::Version
130
- version: '0'
130
+ version: 3.0.0.beta2
131
131
  type: :development
132
132
  prerelease: false
133
133
  version_requirements: !ruby/object:Gem::Requirement
134
134
  requirements:
135
- - - ">="
135
+ - - '='
136
136
  - !ruby/object:Gem::Version
137
- version: '0'
137
+ version: 3.0.0.beta2
138
138
  - !ruby/object:Gem::Dependency
139
139
  name: ammeter
140
140
  requirement: !ruby/object:Gem::Requirement
141
141
  requirements:
142
- - - ">="
142
+ - - "~>"
143
143
  - !ruby/object:Gem::Version
144
- version: '0'
144
+ version: '1.0'
145
145
  type: :development
146
146
  prerelease: false
147
147
  version_requirements: !ruby/object:Gem::Requirement
148
148
  requirements:
149
- - - ">="
149
+ - - "~>"
150
150
  - !ruby/object:Gem::Version
151
- version: '0'
151
+ version: '1.0'
152
152
  - !ruby/object:Gem::Dependency
153
153
  name: barrier
154
154
  requirement: !ruby/object:Gem::Requirement
155
155
  requirements:
156
- - - ">="
156
+ - - "~>"
157
157
  - !ruby/object:Gem::Version
158
- version: '0'
158
+ version: '1.0'
159
159
  type: :development
160
160
  prerelease: false
161
161
  version_requirements: !ruby/object:Gem::Requirement
162
162
  requirements:
163
- - - ">="
163
+ - - "~>"
164
164
  - !ruby/object:Gem::Version
165
- version: '0'
165
+ version: '1.0'
166
166
  - !ruby/object:Gem::Dependency
167
167
  name: database_cleaner
168
168
  requirement: !ruby/object:Gem::Requirement
169
169
  requirements:
170
- - - ">="
170
+ - - "~>"
171
171
  - !ruby/object:Gem::Version
172
- version: '0'
172
+ version: '1.2'
173
173
  type: :development
174
174
  prerelease: false
175
175
  version_requirements: !ruby/object:Gem::Requirement
176
176
  requirements:
177
- - - ">="
177
+ - - "~>"
178
178
  - !ruby/object:Gem::Version
179
- version: '0'
179
+ version: '1.2'
180
180
  description: With ActsAsTaggableOn, you can tag a single model on several contexts,
181
181
  such as skills, interests, and awards. It also provides other advanced functionality.
182
182
  email:
@@ -236,7 +236,6 @@ files:
236
236
  - spec/acts_as_taggable_on/tagging_spec.rb
237
237
  - spec/acts_as_taggable_on/tags_helper_spec.rb
238
238
  - spec/acts_as_taggable_on/utils_spec.rb
239
- - spec/bm.rb
240
239
  - spec/internal/app/models/altered_inheriting_taggable_model.rb
241
240
  - spec/internal/app/models/cached_model.rb
242
241
  - spec/internal/app/models/cached_model_with_array.rb
@@ -309,7 +308,6 @@ test_files:
309
308
  - spec/acts_as_taggable_on/tagging_spec.rb
310
309
  - spec/acts_as_taggable_on/tags_helper_spec.rb
311
310
  - spec/acts_as_taggable_on/utils_spec.rb
312
- - spec/bm.rb
313
311
  - spec/internal/app/models/altered_inheriting_taggable_model.rb
314
312
  - spec/internal/app/models/cached_model.rb
315
313
  - spec/internal/app/models/cached_model_with_array.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
- }