idempotent_create -> persist
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user