Sha256: 98cea7187d78fec04be30c981e8b62ad65c3a6e36de83e477cc8d005a126874c

Contents?: true

Size: 1.14 KB

Versions: 1

Compression:

Stored size: 1.14 KB

Contents

# frozen_string_literal: true
require 'active_record' unless defined? ActiveRecord
# require 'active_model' unless defined? ActiveModel

module TPRecordOptimistic
  extend ActiveSupport::Concern

  def save(*args)
    super(*args)
  end

  alias old_save save

  def save_optimistic(*args)
    old_save(*args)
  rescue ActiveRecord::RecordNotUnique => e
    errors.add('all', e.to_s)
    return false
  end

  def save!(*args)
    super(*args)
  end

  alias old_save! save!

  def save_optimistic!(*args)
    old_save!(*args)
  rescue ActiveRecord::RecordNotUnique => e
    errors.add('all', e.to_s)
    raise ActiveRecord::RecordInvalid, self
  end

  # def optimistic_unique
  #   alias_method :save, :save_optimistic
  # end
end

ActiveSupport.on_load(:active_record) do
  class ActiveRecord::Base
    def self.acts_as_unique
      include TPRecordOptimistic
      alias_method :save, :save_optimistic
      alias_method :save!, :save_optimistic!
    end
  end
end

# class UniqueOptimistic < ActiveModel::Validator
#   def validate(record)
#     record.class_eval do
#       include TPRecordOptimistic
#       record.send(:optimistic_unique)
#     end
#   end
# end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
tp_record_optimistic-0.2.0 lib/tp_record_optimistic.rb