culturecode-acts_as_taggable 1.0.2 → 1.1.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/Rakefile +7 -14
- data/lib/acts_as_taggable/acts_as_taggable.rb +25 -12
- data/lib/acts_as_taggable/tag.rb +1 -3
- data/lib/acts_as_taggable/version.rb +1 -1
- data/lib/generators/schema.rb +1 -1
- metadata +13 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e5542053f236dded1fb60a50f75013139f44adda70305773ccdbef7079f4dff5
|
4
|
+
data.tar.gz: 32650c5441140e92be4b2a81bca37a63996b753fce5d26b2195169f7822f8512
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fced802f4a5b4a6a172fdd9999a3f037022711b7dc5a488d92c0c1212cc300d55dab940233b40b7ac1869164e12e91a84ed6cd9bd8a82f68031d1552c345520c
|
7
|
+
data.tar.gz: 3d7351ede1fbc029e162e9ae3f8bdcaa3127d794971efa5cbc145b6459c7182bbf24e9125b9c4efe47cd47582b79a31d142924024030c5d02da3e6639517f726
|
data/Rakefile
CHANGED
@@ -14,21 +14,14 @@ RDoc::Task.new(:rdoc) do |rdoc|
|
|
14
14
|
rdoc.rdoc_files.include('lib/**/*.rb')
|
15
15
|
end
|
16
16
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
17
|
Bundler::GemHelper.install_tasks
|
23
18
|
|
24
|
-
|
25
|
-
|
26
|
-
Rake::TestTask.new(:test) do |t|
|
27
|
-
t.libs << 'lib'
|
28
|
-
t.libs << 'test'
|
29
|
-
t.pattern = 'test/**/*_test.rb'
|
30
|
-
t.verbose = false
|
31
|
-
end
|
19
|
+
begin
|
20
|
+
require 'rspec/core/rake_task'
|
32
21
|
|
22
|
+
RSpec::Core::RakeTask.new(:spec)
|
33
23
|
|
34
|
-
task default
|
24
|
+
task :default => :spec
|
25
|
+
rescue LoadError
|
26
|
+
# no rspec available
|
27
|
+
end
|
@@ -14,7 +14,7 @@ module ActsAsTaggable
|
|
14
14
|
include InstanceMethods
|
15
15
|
|
16
16
|
self.acts_as_taggable_options[:types].each do |tag_type|
|
17
|
-
has_many :"#{tag_type}_taggings", -> { joins(:tag).order("#{Tagging.table_name}.id").where(Tag.table_name => {:tag_type => tag_type}) }, :as => :taggable, :after_remove => :delete_tag_if_necessary, :class_name => 'ActsAsTaggable::Tagging'
|
17
|
+
has_many :"#{tag_type}_taggings", -> { joins(:tag).order("#{Tagging.table_name}.id").where(Tag.table_name => {:tag_type => tag_type}) }, :as => :taggable, :after_add => :reset_associations, :after_remove => :delete_tag_if_necessary, :class_name => 'ActsAsTaggable::Tagging'
|
18
18
|
has_many :"#{tag_type}_tags", -> { where(:tag_type => tag_type) }, :through => :taggings, :source => :tag, :class_name => 'ActsAsTaggable::Tag', :after_add => :reset_associations
|
19
19
|
|
20
20
|
metaclass = class << self; self; end
|
@@ -31,7 +31,7 @@ module ActsAsTaggable
|
|
31
31
|
return none if tags.empty?
|
32
32
|
|
33
33
|
table_alias = "alias_#{tags.hash.abs}"
|
34
|
-
scope = all.
|
34
|
+
scope = all.distinct.select "#{table_name}.*"
|
35
35
|
scope = scope.joins "JOIN #{Tagging.table_name} AS #{table_alias} ON #{table_alias}.taggable_id = #{table_name}.id"
|
36
36
|
scope = scope.where "#{table_alias}.tag_id" => tags
|
37
37
|
|
@@ -42,7 +42,7 @@ module ActsAsTaggable
|
|
42
42
|
tags = find_tags(tags)
|
43
43
|
return none if tags.empty?
|
44
44
|
|
45
|
-
tags.inject(all.
|
45
|
+
tags.inject(all.distinct) do |scope, tag|
|
46
46
|
scope = scope.joins "LEFT OUTER JOIN #{Tagging.table_name} AS alias_#{tag.id} ON alias_#{tag.id}.taggable_id = #{table_name}.id"
|
47
47
|
scope = scope.where "alias_#{tag.id}.tag_id" => tag
|
48
48
|
end
|
@@ -78,14 +78,21 @@ module ActsAsTaggable
|
|
78
78
|
HelperMethods.filter_tags_by_current_tag_scope([input])
|
79
79
|
when String
|
80
80
|
tags.where(:name => input.split(acts_as_taggable_options[:delimiter]).collect {|tag_name| tag_name.strip}).to_a
|
81
|
+
tags.where(:name => input.split(acts_as_taggable_options[:delimiter]).collect {|tag_name| sanitize_tag_name(tag_name) }).to_a
|
81
82
|
when Array
|
82
83
|
input.flat_map {|tag| find_tags(tag)}.select(&:present?).uniq
|
83
84
|
when ActiveRecord::Relation
|
84
|
-
input.
|
85
|
+
input.distinct.to_a
|
85
86
|
else
|
86
87
|
[]
|
87
88
|
end
|
88
89
|
end
|
90
|
+
|
91
|
+
def sanitize_tag_name(tag_name)
|
92
|
+
sanitized_tag_name = tag_name.to_s.squish
|
93
|
+
sanitized_tag_name.downcase! if acts_as_taggable_options[:downcase]
|
94
|
+
sanitized_tag_name
|
95
|
+
end
|
89
96
|
end
|
90
97
|
|
91
98
|
module InstanceMethods
|
@@ -114,25 +121,31 @@ module ActsAsTaggable
|
|
114
121
|
end
|
115
122
|
|
116
123
|
def tag_names=(names)
|
117
|
-
|
124
|
+
tag_objects = names.select(&:present?).collect {|tag_name| self.class.create_tag(tag_name) }.uniq
|
125
|
+
send HelperMethods.scoped_association_assignment_name, tag_objects
|
118
126
|
end
|
119
127
|
|
120
128
|
private
|
121
129
|
|
122
130
|
def delete_tag_if_necessary(tagging)
|
131
|
+
if tagging.tag.tag_type
|
132
|
+
reset_associations(tagging.tag)
|
133
|
+
else
|
134
|
+
reset_scoped_associations(tagging.tag)
|
135
|
+
end
|
123
136
|
self.class.tags.where(:id => tagging.tag_id).destroy_all if acts_as_taggable_options[:remove_tag_if_empty] && tagging.tag.taggings.count == 0
|
124
137
|
end
|
125
138
|
|
126
|
-
def
|
127
|
-
return unless record.tag_type
|
128
|
-
send("#{record.tag_type}_taggings").reset
|
129
|
-
send("#{record.tag_type}_tags").reset
|
130
|
-
end
|
131
|
-
|
132
|
-
def reset_associations(record)
|
139
|
+
def reset_associations(_)
|
133
140
|
send(:taggings).reset
|
134
141
|
send(:tags).reset
|
135
142
|
end
|
143
|
+
|
144
|
+
def reset_scoped_associations(tag)
|
145
|
+
return unless tag.tag_type
|
146
|
+
send("#{tag.tag_type}_taggings").reset
|
147
|
+
send("#{tag.tag_type}_tags").reset
|
148
|
+
end
|
136
149
|
end
|
137
150
|
|
138
151
|
module HelperMethods
|
data/lib/acts_as_taggable/tag.rb
CHANGED
data/lib/generators/schema.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: culturecode-acts_as_taggable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nicholas Jakobsen
|
@@ -9,36 +9,42 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2024-02-20 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activerecord
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
|
-
- - "
|
18
|
+
- - ">="
|
19
19
|
- !ruby/object:Gem::Version
|
20
20
|
version: 4.2.0
|
21
|
+
- - "<"
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: '8'
|
21
24
|
type: :runtime
|
22
25
|
prerelease: false
|
23
26
|
version_requirements: !ruby/object:Gem::Requirement
|
24
27
|
requirements:
|
25
|
-
- - "
|
28
|
+
- - ">="
|
26
29
|
- !ruby/object:Gem::Version
|
27
30
|
version: 4.2.0
|
31
|
+
- - "<"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '8'
|
28
34
|
- !ruby/object:Gem::Dependency
|
29
35
|
name: rspec-rails
|
30
36
|
requirement: !ruby/object:Gem::Requirement
|
31
37
|
requirements:
|
32
38
|
- - "~>"
|
33
39
|
- !ruby/object:Gem::Version
|
34
|
-
version: 3
|
40
|
+
version: '3'
|
35
41
|
type: :development
|
36
42
|
prerelease: false
|
37
43
|
version_requirements: !ruby/object:Gem::Requirement
|
38
44
|
requirements:
|
39
45
|
- - "~>"
|
40
46
|
- !ruby/object:Gem::Version
|
41
|
-
version: 3
|
47
|
+
version: '3'
|
42
48
|
- !ruby/object:Gem::Dependency
|
43
49
|
name: sqlite3
|
44
50
|
requirement: !ruby/object:Gem::Requirement
|
@@ -87,8 +93,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
87
93
|
- !ruby/object:Gem::Version
|
88
94
|
version: '0'
|
89
95
|
requirements: []
|
90
|
-
|
91
|
-
rubygems_version: 2.7.9
|
96
|
+
rubygems_version: 3.3.23
|
92
97
|
signing_key:
|
93
98
|
specification_version: 4
|
94
99
|
summary: Simple record tagging
|