culturecode-acts_as_taggable 1.0.2 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|