acts-as-taggable-on 3.2.3 → 3.2.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +8 -7
- data/Gemfile +0 -1
- data/acts-as-taggable-on.gemspec +6 -7
- 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 +26 -20
- data/lib/acts_as_taggable_on/{acts_as_taggable_on/compatibility.rb → compatibility.rb} +0 -0
- data/lib/acts_as_taggable_on/tag_list.rb +13 -77
- data/lib/acts_as_taggable_on/tag_list_parser.rb +78 -0
- data/lib/acts_as_taggable_on/taggable.rb +7 -6
- data/lib/acts_as_taggable_on/{acts_as_taggable_on → taggable}/cache.rb +0 -0
- data/lib/acts_as_taggable_on/{acts_as_taggable_on → taggable}/collection.rb +0 -0
- data/lib/acts_as_taggable_on/{acts_as_taggable_on → taggable}/core.rb +14 -10
- data/lib/acts_as_taggable_on/{acts_as_taggable_on → taggable}/dirty.rb +0 -0
- 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 +0 -0
- data/lib/acts_as_taggable_on/utils.rb +2 -26
- 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 +29 -35
- data/spec/acts_as_taggable_on/taggable_spec.rb +55 -55
- data/spec/acts_as_taggable_on/tagger_spec.rb +1 -0
- data/spec/acts_as_taggable_on/tagging_spec.rb +2 -1
- data/spec/acts_as_taggable_on/tags_helper_spec.rb +1 -0
- data/spec/acts_as_taggable_on/utils_spec.rb +1 -0
- 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
- metadata +36 -47
- data/spec/schema.rb +0 -82
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 545d0523ad32bdf17c9ee4f78222e04311842930
|
4
|
+
data.tar.gz: 530c8f90ff6526185bddcbd43e88782d23cfbed4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b88db309cfee2467aa6aa30b0b1bb62d459ebb822c0c20a9a2901f46a6501f38c0728dd9156ac37e262a55d312b3dbf6deca9c8a919ae8737d3e78e4cce9a006
|
7
|
+
data.tar.gz: eb9ec9f85fdd8f91136b5a848075fd6e310b278345878cf3aef02293d948ed29b98d3268235aacb216ba181759080ef635b1ac1443005d44acc8472aaa28482e
|
data/.travis.yml
CHANGED
@@ -25,18 +25,19 @@ matrix:
|
|
25
25
|
allow_failures:
|
26
26
|
- gemfile: gemfiles/activerecord_edge.gemfile
|
27
27
|
- rvm: rbx-2
|
28
|
+
- rvm: ruby-head
|
28
29
|
exclude:
|
29
30
|
- rvm: 1.9.3
|
30
|
-
gemfile:
|
31
|
+
gemfile: gemfiles/activerecord_4.0.gemfile
|
31
32
|
- rvm: 1.9.3
|
32
|
-
gemfile:
|
33
|
+
gemfile: gemfiles/activerecord_4.1.gemfile
|
33
34
|
- rvm: 1.9.3
|
34
|
-
gemfile:
|
35
|
+
gemfile: gemfiles/activerecord_edge.gemfile
|
35
36
|
- rvm: rbx-2
|
36
|
-
gemfile:
|
37
|
+
gemfile: gemfiles/activerecord_3.2.gemfile
|
37
38
|
- rvm: ruby-head
|
38
|
-
gemfile:
|
39
|
+
gemfile: gemfiles/activerecord_3.2.gemfile
|
39
40
|
- rvm: ruby-head
|
40
|
-
gemfile:
|
41
|
+
gemfile: gemfiles/activerecord_4.0.gemfile
|
41
42
|
- rvm: ruby-head
|
42
|
-
gemfile:
|
43
|
+
gemfile: gemfiles/activerecord_4.1.gemfile
|
data/Gemfile
CHANGED
data/acts-as-taggable-on.gemspec
CHANGED
@@ -26,13 +26,12 @@ 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'
|
29
|
+
gem.add_development_dependency 'mysql2', '~> 0.3.7'
|
30
30
|
gem.add_development_dependency 'pg'
|
31
31
|
|
32
|
-
gem.add_development_dependency 'rspec-rails' , '~> 3.0.0.
|
33
|
-
gem.add_development_dependency 'rspec-its'
|
34
|
-
gem.add_development_dependency 'rspec'
|
35
|
-
gem.add_development_dependency '
|
36
|
-
gem.add_development_dependency '
|
37
|
-
gem.add_development_dependency 'database_cleaner', '~> 1.2'
|
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 'barrier'
|
36
|
+
gem.add_development_dependency 'database_cleaner'
|
38
37
|
end
|
data/lib/acts-as-taggable-on.rb
CHANGED
@@ -6,6 +6,30 @@ require 'action_view'
|
|
6
6
|
require 'digest/sha1'
|
7
7
|
|
8
8
|
module ActsAsTaggableOn
|
9
|
+
extend ActiveSupport::Autoload
|
10
|
+
|
11
|
+
autoload :Engine
|
12
|
+
autoload :Tag
|
13
|
+
autoload :TagList
|
14
|
+
autoload :TagListParser
|
15
|
+
autoload :Taggable
|
16
|
+
autoload :Tagger
|
17
|
+
autoload :Tagging
|
18
|
+
autoload :TagsHelper
|
19
|
+
|
20
|
+
autoload_under 'taggable' do
|
21
|
+
autoload :Cache
|
22
|
+
autoload :Collection
|
23
|
+
autoload :Core
|
24
|
+
autoload :Dirty
|
25
|
+
autoload :Ownership
|
26
|
+
autoload :Related
|
27
|
+
end
|
28
|
+
|
29
|
+
autoload :Utils
|
30
|
+
autoload :Compatibility
|
31
|
+
|
32
|
+
|
9
33
|
class DuplicateTagError < StandardError
|
10
34
|
end
|
11
35
|
|
@@ -16,7 +40,7 @@ module ActsAsTaggableOn
|
|
16
40
|
|
17
41
|
def self.method_missing(method_name, *args, &block)
|
18
42
|
@configuration.respond_to?(method_name) ?
|
19
|
-
|
43
|
+
@configuration.send(method_name, *args, &block) : super
|
20
44
|
end
|
21
45
|
|
22
46
|
def self.respond_to?(method_name, include_private=false)
|
@@ -31,7 +55,7 @@ module ActsAsTaggableOn
|
|
31
55
|
|
32
56
|
class Configuration
|
33
57
|
attr_accessor :delimiter, :force_lowercase, :force_parameterize,
|
34
|
-
|
58
|
+
:strict_case_match, :remove_unused_tags
|
35
59
|
|
36
60
|
def initialize
|
37
61
|
@delimiter = ','
|
@@ -45,24 +69,6 @@ module ActsAsTaggableOn
|
|
45
69
|
setup
|
46
70
|
end
|
47
71
|
|
48
|
-
require 'acts_as_taggable_on/utils'
|
49
|
-
|
50
|
-
require 'acts_as_taggable_on/taggable'
|
51
|
-
require 'acts_as_taggable_on/acts_as_taggable_on/compatibility'
|
52
|
-
require 'acts_as_taggable_on/acts_as_taggable_on/core'
|
53
|
-
require 'acts_as_taggable_on/acts_as_taggable_on/collection'
|
54
|
-
require 'acts_as_taggable_on/acts_as_taggable_on/cache'
|
55
|
-
require 'acts_as_taggable_on/acts_as_taggable_on/ownership'
|
56
|
-
require 'acts_as_taggable_on/acts_as_taggable_on/related'
|
57
|
-
require 'acts_as_taggable_on/acts_as_taggable_on/dirty'
|
58
|
-
|
59
|
-
require 'acts_as_taggable_on/tagger'
|
60
|
-
require 'acts_as_taggable_on/tag'
|
61
|
-
require 'acts_as_taggable_on/tag_list'
|
62
|
-
require 'acts_as_taggable_on/tags_helper'
|
63
|
-
require 'acts_as_taggable_on/tagging'
|
64
|
-
require 'acts_as_taggable_on/engine'
|
65
|
-
|
66
72
|
ActiveSupport.on_load(:active_record) do
|
67
73
|
extend ActsAsTaggableOn::Compatibility
|
68
74
|
extend ActsAsTaggableOn::Taggable
|
File without changes
|
@@ -1,3 +1,4 @@
|
|
1
|
+
|
1
2
|
require 'active_support/core_ext/module/delegation'
|
2
3
|
|
3
4
|
module ActsAsTaggableOn
|
@@ -8,82 +9,6 @@ module ActsAsTaggableOn
|
|
8
9
|
add(*args)
|
9
10
|
end
|
10
11
|
|
11
|
-
class << self
|
12
|
-
##
|
13
|
-
# Returns a new TagList using the given tag string.
|
14
|
-
#
|
15
|
-
# Example:
|
16
|
-
# tag_list = ActsAsTaggableOn::TagList.from("One , Two, Three")
|
17
|
-
# tag_list # ["One", "Two", "Three"]
|
18
|
-
def from(string)
|
19
|
-
string = string.join(ActsAsTaggableOn.glue) if string.respond_to?(:join)
|
20
|
-
|
21
|
-
new.tap do |tag_list|
|
22
|
-
string = string.to_s.dup
|
23
|
-
|
24
|
-
|
25
|
-
string.gsub!(double_quote_pattern) {
|
26
|
-
# Append the matched tag to the tag list
|
27
|
-
tag_list << Regexp.last_match[2]
|
28
|
-
# Return the matched delimiter ($3) to replace the matched items
|
29
|
-
''
|
30
|
-
}
|
31
|
-
|
32
|
-
string.gsub!(single_quote_pattern) {
|
33
|
-
# Append the matched tag ($2) to the tag list
|
34
|
-
tag_list << Regexp.last_match[2]
|
35
|
-
# Return an empty string to replace the matched items
|
36
|
-
''
|
37
|
-
}
|
38
|
-
|
39
|
-
# split the string by the delimiter
|
40
|
-
# and add to the tag_list
|
41
|
-
tag_list.add(string.split(Regexp.new delimiter))
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
def delimiter
|
46
|
-
# Parse the quoted tags
|
47
|
-
d = ActsAsTaggableOn.delimiter
|
48
|
-
# Separate multiple delimiters by bitwise operator
|
49
|
-
d = d.join('|') if d.kind_of?(Array)
|
50
|
-
|
51
|
-
d
|
52
|
-
end
|
53
|
-
|
54
|
-
def single_quote_pattern
|
55
|
-
%r{
|
56
|
-
( # Tag start delimiter ($1)
|
57
|
-
\A | # Either string start or
|
58
|
-
#{delimiter} # a delimiter
|
59
|
-
)
|
60
|
-
\s*' # quote (') optionally preceded by whitespace
|
61
|
-
(.*?) # Tag ($2)
|
62
|
-
'\s* # quote (') optionally followed by whitespace
|
63
|
-
(?= # Tag end delimiter (not consumed; is zero-length lookahead)
|
64
|
-
#{delimiter}\s* | # Either a delimiter optionally followed by whitespace or
|
65
|
-
\z # string end
|
66
|
-
)
|
67
|
-
}x
|
68
|
-
end
|
69
|
-
|
70
|
-
def double_quote_pattern
|
71
|
-
%r{
|
72
|
-
( # Tag start delimiter ($1)
|
73
|
-
\A | # Either string start or
|
74
|
-
#{delimiter} # a delimiter
|
75
|
-
)
|
76
|
-
\s*" # quote (") optionally preceded by whitespace
|
77
|
-
(.*?) # Tag ($2)
|
78
|
-
"\s* # quote (") optionally followed by whitespace
|
79
|
-
(?= # Tag end delimiter (not consumed; is zero-length lookahead)
|
80
|
-
#{delimiter}\s* | # Either a delimiter optionally followed by whitespace or
|
81
|
-
\z # string end
|
82
|
-
)
|
83
|
-
}x
|
84
|
-
end
|
85
|
-
|
86
|
-
end
|
87
12
|
##
|
88
13
|
# Add tags to the tag_list. Duplicate or blank tags will be ignored.
|
89
14
|
# Use the <tt>:parse</tt> option to add an unparsed tag string.
|
@@ -165,12 +90,23 @@ module ActsAsTaggableOn
|
|
165
90
|
options = args.last.is_a?(Hash) ? args.pop : {}
|
166
91
|
options.assert_valid_keys :parse
|
167
92
|
|
168
|
-
args.map! { |a|
|
93
|
+
args.map! { |a| TagListParser.parse(a) } if options[:parse]
|
169
94
|
|
170
95
|
args.flatten!
|
171
96
|
end
|
172
97
|
|
173
98
|
|
99
|
+
## DEPRECATED
|
100
|
+
def self.from(string)
|
101
|
+
ActiveRecord::Base.logger.warn <<WARNING
|
102
|
+
ActsAsTaggableOn::TagList.from is deprecated \
|
103
|
+
and will be removed from v4.0+, use \
|
104
|
+
ActsAsTaggableOn::TagListParser.parse instead
|
105
|
+
WARNING
|
106
|
+
TagListParser.parse(string)
|
107
|
+
end
|
108
|
+
|
109
|
+
|
174
110
|
end
|
175
111
|
end
|
176
112
|
|
@@ -0,0 +1,78 @@
|
|
1
|
+
module ActsAsTaggableOn
|
2
|
+
##
|
3
|
+
# Returns a new TagList using the given tag string.
|
4
|
+
#
|
5
|
+
# Example:
|
6
|
+
# tag_list = ActsAsTaggableOn::TagListParser.parse("One , Two, Three")
|
7
|
+
# tag_list # ["One", "Two", "Three"]
|
8
|
+
module TagListParser
|
9
|
+
class << self
|
10
|
+
def parse(string)
|
11
|
+
string = string.join(ActsAsTaggableOn.glue) if string.respond_to?(:join)
|
12
|
+
TagList.new.tap do |tag_list|
|
13
|
+
string = string.to_s.dup
|
14
|
+
|
15
|
+
|
16
|
+
string.gsub!(double_quote_pattern) {
|
17
|
+
# Append the matched tag to the tag list
|
18
|
+
tag_list << Regexp.last_match[2]
|
19
|
+
# Return the matched delimiter ($3) to replace the matched items
|
20
|
+
''
|
21
|
+
}
|
22
|
+
|
23
|
+
string.gsub!(single_quote_pattern) {
|
24
|
+
# Append the matched tag ($2) to the tag list
|
25
|
+
tag_list << Regexp.last_match[2]
|
26
|
+
# Return an empty string to replace the matched items
|
27
|
+
''
|
28
|
+
}
|
29
|
+
|
30
|
+
# split the string by the delimiter
|
31
|
+
# and add to the tag_list
|
32
|
+
tag_list.add(string.split(Regexp.new delimiter))
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
|
37
|
+
# private
|
38
|
+
def delimiter
|
39
|
+
# Parse the quoted tags
|
40
|
+
d = ActsAsTaggableOn.delimiter
|
41
|
+
# Separate multiple delimiters by bitwise operator
|
42
|
+
d = d.join('|') if d.kind_of?(Array)
|
43
|
+
d
|
44
|
+
end
|
45
|
+
|
46
|
+
# ( # Tag start delimiter ($1)
|
47
|
+
# \A | # Either string start or
|
48
|
+
# #{delimiter} # a delimiter
|
49
|
+
# )
|
50
|
+
# \s*" # quote (") optionally preceded by whitespace
|
51
|
+
# (.*?) # Tag ($2)
|
52
|
+
# "\s* # quote (") optionally followed by whitespace
|
53
|
+
# (?= # Tag end delimiter (not consumed; is zero-length lookahead)
|
54
|
+
# #{delimiter}\s* | # Either a delimiter optionally followed by whitespace or
|
55
|
+
# \z # string end
|
56
|
+
# )
|
57
|
+
def double_quote_pattern
|
58
|
+
/(\A|#{delimiter})\s*"(.*?)"\s*(?=#{delimiter}\s*|\z)/
|
59
|
+
end
|
60
|
+
|
61
|
+
# ( # Tag start delimiter ($1)
|
62
|
+
# \A | # Either string start or
|
63
|
+
# #{delimiter} # a delimiter
|
64
|
+
# )
|
65
|
+
# \s*' # quote (') optionally preceded by whitespace
|
66
|
+
# (.*?) # Tag ($2)
|
67
|
+
# '\s* # quote (') optionally followed by whitespace
|
68
|
+
# (?= # Tag end delimiter (not consumed; is zero-length lookahead)
|
69
|
+
# #{delimiter}\s* | d # Either a delimiter optionally followed by whitespace or
|
70
|
+
# \z # string end
|
71
|
+
# )
|
72
|
+
def single_quote_pattern
|
73
|
+
/(\A|#{delimiter})\s*'(.*?)'\s*(?=#{delimiter}\s*|\z)/
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
module ActsAsTaggableOn
|
2
2
|
module Taggable
|
3
|
+
|
3
4
|
def taggable?
|
4
5
|
false
|
5
6
|
end
|
@@ -90,12 +91,12 @@ module ActsAsTaggableOn
|
|
90
91
|
|
91
92
|
# each of these add context-specific methods and must be
|
92
93
|
# called on each call of taggable_on
|
93
|
-
include
|
94
|
-
include
|
95
|
-
include
|
96
|
-
include
|
97
|
-
include
|
98
|
-
include
|
94
|
+
include Core
|
95
|
+
include Collection
|
96
|
+
include Cache
|
97
|
+
include Ownership
|
98
|
+
include Related
|
99
|
+
include Dirty
|
99
100
|
end
|
100
101
|
end
|
101
102
|
end
|
File without changes
|
File without changes
|
@@ -82,7 +82,7 @@ module ActsAsTaggableOn::Taggable
|
|
82
82
|
# User.tagged_with("awesome", "cool", :match_all => true) # Users that are tagged with just awesome and cool
|
83
83
|
# User.tagged_with("awesome", "cool", :owned_by => foo ) # Users that are tagged with just awesome and cool by 'foo'
|
84
84
|
def tagged_with(tags, options = {})
|
85
|
-
tag_list = ActsAsTaggableOn::
|
85
|
+
tag_list = ActsAsTaggableOn::TagListParser.parse(tags)
|
86
86
|
options = options.dup
|
87
87
|
empty_result = where('1 = 0')
|
88
88
|
|
@@ -116,7 +116,7 @@ module ActsAsTaggableOn::Taggable
|
|
116
116
|
" AND #{ActsAsTaggableOn::Tagging.table_name}.tagger_type = #{quote_value(owned_by.class.base_class.to_s, nil)}"
|
117
117
|
end
|
118
118
|
|
119
|
-
elsif options.delete(:any)
|
119
|
+
elsif any = options.delete(:any)
|
120
120
|
# get tags, drop out if nothing returned (we need at least one)
|
121
121
|
tags = if options.delete(:wild)
|
122
122
|
ActsAsTaggableOn::Tag.named_like_any(tag_list)
|
@@ -141,7 +141,7 @@ module ActsAsTaggableOn::Taggable
|
|
141
141
|
|
142
142
|
# don't need to sanitize sql, map all ids and join with OR logic
|
143
143
|
conditions << tags.map { |t| "#{taggings_alias}.tag_id = #{quote_value(t.id, nil)}" }.join(' OR ')
|
144
|
-
select_clause
|
144
|
+
select_clause << " #{table_name}.*" unless context and tag_types.one?
|
145
145
|
|
146
146
|
if owned_by
|
147
147
|
tagging_join << ' AND ' +
|
@@ -153,7 +153,10 @@ module ActsAsTaggableOn::Taggable
|
|
153
153
|
end
|
154
154
|
|
155
155
|
joins << tagging_join
|
156
|
-
|
156
|
+
unless any == 'distinct' # Fix issue #544
|
157
|
+
group = "#{table_name}.#{primary_key}"
|
158
|
+
select_clause << group
|
159
|
+
end
|
157
160
|
else
|
158
161
|
tags = ActsAsTaggableOn::Tag.named_any(tag_list)
|
159
162
|
|
@@ -183,7 +186,7 @@ module ActsAsTaggableOn::Taggable
|
|
183
186
|
|
184
187
|
group ||= [] # Rails interprets this as a no-op in the group() call below
|
185
188
|
if options.delete(:order_by_matching_tag_count)
|
186
|
-
select_clause
|
189
|
+
select_clause << "#{table_name}.*, COUNT(#{taggings_alias}.tag_id) AS #{taggings_alias}_count"
|
187
190
|
group_columns = ActsAsTaggableOn::Utils.using_postgresql? ? grouped_column_names_for(self) : "#{table_name}.#{primary_key}"
|
188
191
|
group = group_columns
|
189
192
|
order_by << "#{taggings_alias}_count DESC"
|
@@ -203,8 +206,9 @@ module ActsAsTaggableOn::Taggable
|
|
203
206
|
|
204
207
|
order_by << options[:order] if options[:order].present?
|
205
208
|
|
206
|
-
|
207
|
-
.
|
209
|
+
query = self
|
210
|
+
query = self.select(select_clause.join(',')) unless select_clause.empty?
|
211
|
+
query.joins(joins.join(' '))
|
208
212
|
.where(conditions.join(' AND '))
|
209
213
|
.group(group)
|
210
214
|
.having(having)
|
@@ -259,7 +263,7 @@ module ActsAsTaggableOn::Taggable
|
|
259
263
|
if instance_variable_get(variable_name)
|
260
264
|
instance_variable_get(variable_name)
|
261
265
|
elsif cached_tag_list_on(context) && self.class.caching_tag_list_on?(context)
|
262
|
-
instance_variable_set(variable_name, ActsAsTaggableOn::
|
266
|
+
instance_variable_set(variable_name, ActsAsTaggableOn::TagListParser.parse(cached_tag_list_on(context)))
|
263
267
|
else
|
264
268
|
instance_variable_set(variable_name, ActsAsTaggableOn::TagList.new(tags_on(context).map(&:name)))
|
265
269
|
end
|
@@ -309,7 +313,7 @@ module ActsAsTaggableOn::Taggable
|
|
309
313
|
variable_name = "@#{context.to_s.singularize}_list"
|
310
314
|
process_dirty_object(context, new_list) unless custom_contexts.include?(context.to_s)
|
311
315
|
|
312
|
-
instance_variable_set(variable_name, ActsAsTaggableOn::
|
316
|
+
instance_variable_set(variable_name, ActsAsTaggableOn::TagListParser.parse(new_list))
|
313
317
|
end
|
314
318
|
|
315
319
|
def tagging_contexts
|
@@ -383,7 +387,7 @@ module ActsAsTaggableOn::Taggable
|
|
383
387
|
|
384
388
|
# Destroy old taggings:
|
385
389
|
if old_tags.present?
|
386
|
-
|
390
|
+
taggings.not_owned.by_context(context).destroy_all(tag_id: old_tags)
|
387
391
|
end
|
388
392
|
|
389
393
|
# Create new taggings:
|