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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 10a06d3f044e44dff881a3e5c813aa5f0340aca850e4e2a8e9ab0bada47a3bb9
4
- data.tar.gz: 41edad26dc5435161722c087e6e7fe54562fac49facf132d88b7733a171de0e6
3
+ metadata.gz: e5542053f236dded1fb60a50f75013139f44adda70305773ccdbef7079f4dff5
4
+ data.tar.gz: 32650c5441140e92be4b2a81bca37a63996b753fce5d26b2195169f7822f8512
5
5
  SHA512:
6
- metadata.gz: 3d56e39b3deb691d67f3c4abb7fbf70dac0f7f7a856ac3eef09ae7965390d14425ef358d59ee2059cd17d93cecda979f3f3c8819f9720afc8264e90b6e271a64
7
- data.tar.gz: 6d1ea09a57b7c9aa70fca6f4a65ed0db03579037f9c20618f7010efb2319d185601ace6790486940f52ce3e68bdade1ad76c632cb884e149de2f6dd04a24b998
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
- require 'rake/testtask'
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: :test
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.uniq.select "#{table_name}.*"
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.uniq) do |scope, tag|
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.uniq.to_a
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
- send HelperMethods.scoped_association_assignment_name, names.select(&:present?).collect {|tag_name| self.class.create_tag(tag_name) }
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 reset_scoped_associations(record)
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
@@ -24,9 +24,7 @@ module ActsAsTaggable
24
24
  private
25
25
 
26
26
  def sanitize_name
27
- name = self.name.to_s.squish
28
- name.downcase! if taggable_class.acts_as_taggable_options[:downcase]
29
- self.name = name
27
+ self.name = taggable_class.sanitize_tag_name(name)
30
28
  end
31
29
  end
32
30
  end
@@ -1,3 +1,3 @@
1
1
  module ActsAsTaggable
2
- VERSION = "1.0.2"
2
+ VERSION = "1.1.0"
3
3
  end
@@ -1,4 +1,4 @@
1
- class ActsAsTaggableTable < ActiveRecord::Migration
1
+ class ActsAsTaggableTable < ActiveRecord::Migration[4.2]
2
2
  def change
3
3
  create_table :acts_as_taggable_tags do |t|
4
4
  t.string :name
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.2
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: 2020-06-02 00:00:00.000000000 Z
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.0.0
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.0.0
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
- rubyforge_project:
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