Tag exclusively by title

This commit is contained in:
David Heinemeier Hansson
2025-04-06 13:19:22 +02:00
parent ee22e69e6e
commit cdd78b41ee
3 changed files with 18 additions and 14 deletions
+9 -5
View File
@@ -11,12 +11,12 @@ module Bubble::Taggable
def toggle_tag(title)
transaction do
tag = find_or_create_tag_with_title(title)
tagged_with?(tag) ? untag_with(tag) : tag_with(tag)
tagged_with?(title) ? untagging(tag) : tagging(tag)
end
end
def tagged_with?(tag)
tags.include? tag
def tagged_with?(title)
tags.exists?(title: title)
end
private
@@ -24,11 +24,15 @@ module Bubble::Taggable
bucket.account.tags.find_or_create_by!(title: title)
end
def tag_with(tag)
def find_tag_by_title(title)
bucket.account.tags.find_by(title: title)
end
def tagging(tag)
taggings.create tag: tag
end
def untag_with(tag)
def untagging(tag)
taggings.destroy_by tag: tag
end
end
@@ -10,16 +10,16 @@ class Bubbles::TaggingsControllerTest < ActionDispatch::IntegrationTest
assert_response :success
end
test "create" do
assert_changes "bubbles(:logo).tagged_with?(tags(:mobile))", from: false, to: true do
post bubble_taggings_url(bubbles(:logo)), params: { tag_id: tags(:mobile).id }, as: :turbo_stream
test "toggle tag on" do
assert_changes "bubbles(:logo).tagged_with?(tags(:mobile).title)", from: false, to: true do
post bubble_taggings_url(bubbles(:logo)), params: { tag_title: tags(:mobile).title }, as: :turbo_stream
end
assert_response :success
end
assert_changes "bubbles(:logo).tagged_with?(tags(:web))", from: false, to: true do
assert_changes "bubbles(:logo).tagged_with?(tags(:mobile))", from: true, to: false do
post bubble_taggings_url(bubbles(:logo)), params: { tag_id: tags(:web).id }, as: :turbo_stream
end
test "toggle tag off" do
assert_changes "bubbles(:logo).tagged_with?(tags(:web).title)", from: true, to: false do
post bubble_taggings_url(bubbles(:logo)), params: { tag_title: tags(:web).title }, as: :turbo_stream
end
assert_response :success
end
+2 -2
View File
@@ -45,8 +45,8 @@ class BubbleTest < ActiveSupport::TestCase
end
test "tagged states" do
assert bubbles(:logo).tagged_with?(tags(:web))
assert_not bubbles(:logo).tagged_with?(tags(:mobile))
assert bubbles(:logo).tagged_with?(tags(:web).title)
assert_not bubbles(:logo).tagged_with?(tags(:mobile).title)
end
test "tag toggling" do