idempotent_create -> persist

This commit is contained in:
Jose Farias
2024-11-06 18:09:55 -06:00
parent 32618debf6
commit 9efe94a277
3 changed files with 9 additions and 6 deletions
+1 -1
View File
@@ -2,7 +2,7 @@ class FiltersController < ApplicationController
before_action :set_filter, :remember_params, only: :destroy
def create
@filter = Current.user.filters.idempotent_create!(filter_params).tap(&:touch)
@filter = Current.user.filters.persist! filter_params
redirect_to bubbles_path(@filter.to_params)
end
+2 -2
View File
@@ -5,12 +5,12 @@ class Filter < ApplicationRecord
has_one :account, through: :creator
class << self
def idempotent_create!(attrs)
def persist!(attrs)
filter = new(attrs)
filter.save!
filter
rescue ActiveRecord::RecordNotUnique
find_by! params: filter.params # possible thanks to denormalized params
find_by!(params: filter.params).tap(&:touch) # possible thanks to denormalized params
end
end
+6 -3
View File
@@ -1,10 +1,13 @@
require "test_helper"
class FilterTest < ActiveSupport::TestCase
test "idempotent creation" do
test "persistence" do
assert_difference "Filter.count", +1 do
filter = users(:david).filters.idempotent_create!(indexed_by: "most_boosted")
assert_equal filter, users(:david).filters.idempotent_create!(indexed_by: "most_boosted")
filter = users(:david).filters.persist!(indexed_by: "most_boosted")
assert_changes "filter.reload.updated_at" do
assert_equal filter, users(:david).filters.persist!(indexed_by: "most_boosted")
end
end
end