Sha256: 731113750fa19601b25c2f58a58bb161c3b6f3f638bf372a7b0ff8339d0c6e0c

Contents?: true

Size: 1.94 KB

Versions: 17

Compression:

Stored size: 1.94 KB

Contents

module ActiveRecord
  module Persistence
    silence_warnings do
      def relation_for_destroy
        # CPK
        if self.composite?
          relation = self.class.unscoped

          Array(self.class.primary_key).each do |key|
            column     = self.class.arel_table[key]
            value      = self[key]
            relation = relation.where(column.eq(value))
          end

          relation
        else
          self.class.unscoped.where(self.class.primary_key => id)
        end
      end

      def touch(*names, time: nil)
        raise ActiveRecordError, "cannot touch on a new record object" unless persisted?

        time ||= current_time_from_proper_timezone
        attributes = timestamp_attributes_for_update_in_model
        attributes.concat(names)

        unless attributes.empty?
          changes = {}

          attributes.each do |column|
            column = column.to_s
            changes[column] = write_attribute(column, time)
          end

          clear_attribute_changes(changes.keys)
          primary_key = self.class.primary_key
          scope = self.class.unscoped.where(primary_key => _read_attribute(primary_key))

          if locking_enabled?
            locking_column = self.class.locking_column
            scope = scope.where(locking_column => _read_attribute(locking_column))
            changes[locking_column] = increment_lock
          end

          # CPK
          if composite?
            primary_key_predicate = self.class.unscoped.cpk_id_predicate(self.class.arel_table, Array(primary_key), Array(id))
            scope = self.class.unscoped.where(primary_key_predicate)
          end

          result = scope.update_all(changes) == 1

          if !result && locking_enabled?
            raise ActiveRecord::StaleObjectError.new(self, "touch")
          end

          result
        else
          true
        end
      end
    end
  end
end

Version data entries

17 entries across 17 versions & 1 rubygems

Version Path
composite_primary_keys-10.0.5 lib/composite_primary_keys/persistence.rb
composite_primary_keys-9.0.10 lib/composite_primary_keys/persistence.rb
composite_primary_keys-10.0.4 lib/composite_primary_keys/persistence.rb
composite_primary_keys-9.0.9 lib/composite_primary_keys/persistence.rb
composite_primary_keys-10.0.3 lib/composite_primary_keys/persistence.rb
composite_primary_keys-10.0.2 lib/composite_primary_keys/persistence.rb
composite_primary_keys-10.0.1 lib/composite_primary_keys/persistence.rb
composite_primary_keys-9.0.8 lib/composite_primary_keys/persistence.rb
composite_primary_keys-10.0.0 lib/composite_primary_keys/persistence.rb
composite_primary_keys-9.0.7 lib/composite_primary_keys/persistence.rb
composite_primary_keys-9.0.6 lib/composite_primary_keys/persistence.rb
composite_primary_keys-9.0.5 lib/composite_primary_keys/persistence.rb
composite_primary_keys-9.0.4 lib/composite_primary_keys/persistence.rb
composite_primary_keys-9.0.2 lib/composite_primary_keys/persistence.rb
composite_primary_keys-9.0.1 lib/composite_primary_keys/persistence.rb
composite_primary_keys-9.0.0 lib/composite_primary_keys/persistence.rb
composite_primary_keys-9.0.0.beta1 lib/composite_primary_keys/persistence.rb