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 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