From f5eb1dea0ff99dc138b8e84f5435b5af49e7e4c5 Mon Sep 17 00:00:00 2001 From: Florian Eck Date: Sat, 29 Sep 2018 01:51:47 +0200 Subject: [PATCH 1/6] added scope - untested --- lib/acts_as_taggable_on/tag.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/acts_as_taggable_on/tag.rb b/lib/acts_as_taggable_on/tag.rb index 75036150d..59dd0e98d 100644 --- a/lib/acts_as_taggable_on/tag.rb +++ b/lib/acts_as_taggable_on/tag.rb @@ -21,6 +21,7 @@ def validates_name_uniqueness? ### SCOPES: scope :most_used, ->(limit = 20) { order('taggings_count desc').limit(limit) } scope :least_used, ->(limit = 20) { order('taggings_count asc').limit(limit) } + scope :for_taggable_type, -> (type = nil) { joins(:taggings).where('taggings.taggable_type' => type) } def self.named(name) if ActsAsTaggableOn.strict_case_match From 014155e13ff4ee0406e1c09a51ca571dfc390647 Mon Sep 17 00:00:00 2001 From: Florian Eck Date: Sat, 29 Sep 2018 02:02:16 +0200 Subject: [PATCH 2/6] force .to_s to avoid weird nil exceptions --- lib/acts_as_taggable_on/tag.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/acts_as_taggable_on/tag.rb b/lib/acts_as_taggable_on/tag.rb index 59dd0e98d..b54b13661 100644 --- a/lib/acts_as_taggable_on/tag.rb +++ b/lib/acts_as_taggable_on/tag.rb @@ -21,7 +21,7 @@ def validates_name_uniqueness? ### SCOPES: scope :most_used, ->(limit = 20) { order('taggings_count desc').limit(limit) } scope :least_used, ->(limit = 20) { order('taggings_count asc').limit(limit) } - scope :for_taggable_type, -> (type = nil) { joins(:taggings).where('taggings.taggable_type' => type) } + scope :for_taggable_type, -> (type = nil) { joins(:taggings).where('taggings.taggable_type' => type.to_s) } def self.named(name) if ActsAsTaggableOn.strict_case_match From c3e0528256c102866ea38f76bb0860e9a0bc96ef Mon Sep 17 00:00:00 2001 From: Florian Eck Date: Sat, 29 Sep 2018 02:08:21 +0200 Subject: [PATCH 3/6] added 'gem sqlite3' to gemfile to run specs --- Gemfile | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Gemfile b/Gemfile index e2eff4df8..36ade0926 100644 --- a/Gemfile +++ b/Gemfile @@ -2,6 +2,10 @@ source 'https://rubygems.org' gemspec +group :test do + gem 'sqlite3' +end + group :local_development do gem 'guard' gem 'guard-rspec' From 05cd04ab0cd03cc258dfbb08c40e01a88680d129 Mon Sep 17 00:00:00 2001 From: Florian Eck Date: Sat, 29 Sep 2018 02:27:58 +0200 Subject: [PATCH 4/6] added specs --- lib/acts_as_taggable_on/tag.rb | 2 +- spec/acts_as_taggable_on/tag_spec.rb | 24 +++++++++++++++++++++++- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/lib/acts_as_taggable_on/tag.rb b/lib/acts_as_taggable_on/tag.rb index b54b13661..98e9ecdf4 100644 --- a/lib/acts_as_taggable_on/tag.rb +++ b/lib/acts_as_taggable_on/tag.rb @@ -21,7 +21,7 @@ def validates_name_uniqueness? ### SCOPES: scope :most_used, ->(limit = 20) { order('taggings_count desc').limit(limit) } scope :least_used, ->(limit = 20) { order('taggings_count asc').limit(limit) } - scope :for_taggable_type, -> (type = nil) { joins(:taggings).where('taggings.taggable_type' => type.to_s) } + scope :for_taggable_type, -> (type = nil) { joins(:taggings).where('taggings.taggable_type' => Array.wrap(type)) } def self.named(name) if ActsAsTaggableOn.strict_case_match diff --git a/spec/acts_as_taggable_on/tag_spec.rb b/spec/acts_as_taggable_on/tag_spec.rb index 392e0f929..c75254c96 100644 --- a/spec/acts_as_taggable_on/tag_spec.rb +++ b/spec/acts_as_taggable_on/tag_spec.rb @@ -16,7 +16,29 @@ @tag = ActsAsTaggableOn::Tag.new @user = TaggableModel.create(name: 'Pablo') end - + + + # scopes + describe 'for_taggable_type' do + before(:each) do + @tag_1 = ActsAsTaggableOn::Tag.create(name: 'Awesome') + @tag_2 = ActsAsTaggableOn::Tag.create(name: 'notSoCool') + @tagging_1 = ActsAsTaggableOn::Tagging.create(taggable: @user, tag: @tag_1, context: 'tags') + @tagging_2 = ActsAsTaggableOn::Tagging.create(taggable_type: 'AnyClass', taggable_id: 1, tag: @tag_2, context: 'tags') + # this one is not to be found... + @tagging_3 = ActsAsTaggableOn::Tagging.create(taggable_type: 'DontCare', taggable_id: 1, tag: @tag_2, context: 'tags') + end + + specify "finds one given taggable type" do + expect(ActsAsTaggableOn::Tag.for_taggable_type(TaggableModel.to_s)).to match_array([@tag_1]) + end + + specify "finds multiple give taggable type" do + expect(ActsAsTaggableOn::Tag.for_taggable_type([TaggableModel.to_s, @tagging_2.taggable_type])).to match_array([@tag_1, @tag_2]) + end + + + end describe 'named like any' do context 'case insensitive collation and unique index on tag name', if: using_case_insensitive_collation? do From 992ebf9231867462fb14f2e952aa97bb7208a01a Mon Sep 17 00:00:00 2001 From: Florian Eck Date: Sat, 29 Sep 2018 02:28:36 +0200 Subject: [PATCH 5/6] update version --- lib/acts_as_taggable_on/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/acts_as_taggable_on/version.rb b/lib/acts_as_taggable_on/version.rb index 117bd0615..5e834c189 100644 --- a/lib/acts_as_taggable_on/version.rb +++ b/lib/acts_as_taggable_on/version.rb @@ -1,3 +1,3 @@ module ActsAsTaggableOn - VERSION = '6.0.1' + VERSION = '6.0.2' end From 74116855bf8538f5a952e86785f936a22be0ebac Mon Sep 17 00:00:00 2001 From: Abdelkader Boudih Date: Sat, 6 Oct 2018 21:00:10 +0100 Subject: [PATCH 6/6] Update Gemfile --- Gemfile | 4 ---- 1 file changed, 4 deletions(-) diff --git a/Gemfile b/Gemfile index 36ade0926..e2eff4df8 100644 --- a/Gemfile +++ b/Gemfile @@ -2,10 +2,6 @@ source 'https://rubygems.org' gemspec -group :test do - gem 'sqlite3' -end - group :local_development do gem 'guard' gem 'guard-rspec'