Sha256: f1dcdb7bbd4aa6eb3abd90321ddcab8b0779762acdc08a8a1554c021c7d4e652

Contents?: true

Size: 1.63 KB

Versions: 2

Compression:

Stored size: 1.63 KB

Contents

require 'active_support/concern'

module Ardm
  module ActiveRecord
    module Persistence
      extend ActiveSupport::Concern

      included do
        class_attribute :raise_on_save_failure, instance_accessor: true
        self.raise_on_save_failure = false
      end

      module ClassMethods
        def update(*a)
          options = dump_properties_hash(a.first)
          options = dump_associations_hash(options)
          assert_valid_attributes(options)
          update_all(options) != 0
        end

        def update!(*a)
          options = dump_properties_hash(a.first)
          options = dump_associations_hash(options)
          assert_valid_attributes(options)
          update_all(options) != 0
        end

        def destroy(*a)
          destroy_all
        end

        def destroy!(*a)
          delete_all
        end
      end

      def destroy
        self.class.delete(self.send(self.class.primary_key))
      end

      def new?
        new_record?
      end

      def saved?
        !new_record?
      end

      def save_self(run_callbacks=true)
        save(run_callbacks)
      end

      def save(run_callbacks=true)
        unless run_callbacks
          raise Ardm::NotImplemented, "ActiveRecord doesn't support saving without callbacks"
        end

        super() # no args!
      end

      def save!(*args)
        save(*args) || (raise_on_save_failure && raise(Ardm::SaveFailureError, "Save Failed"))
      end

      def update(*a)
        if a.size == 1
          update_attributes(*a)
        else
          super
        end
      end

      def update!(*a)
        update_attributes!(*a)
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
ardm-0.2.7 lib/ardm/active_record/persistence.rb
ardm-0.2.6 lib/ardm/active_record/persistence.rb