Increases/decreases custom counters when taggings are created/destroyed
This commit is contained in:
@@ -1,8 +1,24 @@
|
||||
ActsAsTaggableOn::Tagging.class_eval do
|
||||
after_destroy :touch_taggable
|
||||
after_create :increase_custom_counter
|
||||
after_destroy :touch_taggable, :decrease_custom_counter
|
||||
|
||||
def touch_taggable
|
||||
taggable.touch if taggable.present?
|
||||
end
|
||||
|
||||
end
|
||||
def increase_custom_counter
|
||||
ActsAsTaggableOn::Tag.increment_counter(custom_counter_field_name, tag_id)
|
||||
end
|
||||
|
||||
def decrease_custom_counter
|
||||
ActsAsTaggableOn::Tag.decrement_counter(custom_counter_field_name, tag_id)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def custom_counter_field_name
|
||||
"#{self.taggable_type.underscore.pluralize}_count"
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
|
||||
47
spec/lib/acts_as_taggable_on_spec.rb
Normal file
47
spec/lib/acts_as_taggable_on_spec.rb
Normal file
@@ -0,0 +1,47 @@
|
||||
require 'rails_helper'
|
||||
|
||||
describe 'ActsAsTaggableOn::Tagging' do
|
||||
|
||||
describe "when tagging debates or proposals" do
|
||||
let(:proposal) { create(:proposal) }
|
||||
let(:debate) { create(:debate) }
|
||||
|
||||
it "increases and decreases the tag's custom counters" do
|
||||
tag = ActsAsTaggableOn::Tag.create(name: "foo")
|
||||
|
||||
expect(tag.debates_count).to eq(0)
|
||||
expect(tag.proposals_count).to eq(0)
|
||||
|
||||
proposal.tag_list.add("foo")
|
||||
proposal.save
|
||||
tag.reload
|
||||
|
||||
expect(tag.debates_count).to eq(0)
|
||||
expect(tag.proposals_count).to eq(1)
|
||||
|
||||
debate.tag_list.add("foo")
|
||||
debate.save
|
||||
tag.reload
|
||||
|
||||
expect(tag.debates_count).to eq(1)
|
||||
expect(tag.proposals_count).to eq(1)
|
||||
|
||||
proposal.tag_list.remove("foo")
|
||||
proposal.save
|
||||
tag.reload
|
||||
|
||||
expect(tag.debates_count).to eq(1)
|
||||
expect(tag.proposals_count).to eq(0)
|
||||
|
||||
debate.tag_list.remove("foo")
|
||||
debate.save
|
||||
tag.reload
|
||||
|
||||
expect(tag.debates_count).to eq(0)
|
||||
expect(tag.proposals_count).to eq(0)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
Reference in New Issue
Block a user