Sha256: eea8349e0337035b2934e03d48f66c391ef0c2ba1c8e981dcee790dc14474f0c

Contents?: true

Size: 1.22 KB

Versions: 5

Compression:

Stored size: 1.22 KB

Contents

require 'deleted_at/active_record'
module DeletedAt

  module Core

    def self.prepended(subclass)
      class << subclass
        cattr_accessor :deleted_at
        self.deleted_at = {}
      end

      subclass.extend(ClassMethods)
    end

    def self.raise_missing(klass)
      message = "Missing `#{klass.deleted_at[:column]}` in `#{klass.name}` when trying to employ `deleted_at`"
      raise(DeletedAt::MissingColumnError, message)
    end

    def self.has_deleted_at_column?(klass)
      klass.columns.map(&:name).include?(klass.deleted_at.dig(:column).to_s)
    end

    def self.deleted_at_ready?(klass)
      !::DeletedAt.disabled? &&
      klass != ::ActiveRecord::Base &&
      !klass.abstract_class? &&
      klass.connected? &&
      klass.table_exists? &&
      !(klass < DeletedAt::ActiveRecord)
    end

    module ClassMethods

      def with_deleted_at(options={}, &block)
        self.deleted_at = DeletedAt::DEFAULT_OPTIONS.merge(options)
        self.deleted_at[:proc] = block if block_given?

        return unless Core.deleted_at_ready?(self)
        DeletedAt::Core.raise_missing(self) unless Core.has_deleted_at_column?(self)

        self.prepend(DeletedAt::ActiveRecord)
      end
    end # End ClassMethods

  end

end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
deleted_at-0.6.0.pre.7 lib/deleted_at/core.rb
deleted_at-0.6.0.pre.6 lib/deleted_at/core.rb
deleted_at-0.6.0.pre.5 lib/deleted_at/core.rb
deleted_at-0.6.0.pre.4 lib/deleted_at/core.rb
deleted_at-0.6.0.pre.3 lib/deleted_at/core.rb