Sha256: 4cea0aeb71c639c80c7f75a6d6216277c57b30a9bdc48d3be7ce7e887d0e40ac

Contents?: true

Size: 857 Bytes

Versions: 1

Compression:

Stored size: 857 Bytes

Contents

module Para
  module Orderable
    extend ActiveSupport::Concern

    included do
      scope :ordered, -> { order('position ASC') }
      before_create :orederable_assign_position
    end

    def orederable_assign_position
      last_resource = self.class.order('position DESC')
        .where.not(position: nil)
        .select(:position)
        .first

      self.position = if last_resource && last_resource.position
        last_resource.position + 1
      else
        0
      end
    end
  end

  module ActiveRecordOrderableMixin
    extend ActiveSupport::Concern

    included do
      class_attribute :orderable
    end

    module ClassMethods
      def acts_as_orderable
        return if orderable?

        self.orderable = true
        include Para::Orderable
      end

      def orderable?
        !!orderable
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
para-0.4.0 lib/para/orderable.rb