Sha256: 5485da2c2276bc05f9985bde6cea7cd2456a8437b4fdec85edecd174f8e83b8e

Contents?: true

Size: 921 Bytes

Versions: 6

Compression:

Stored size: 921 Bytes

Contents

module Para
  module Orderable
    extend ActiveSupport::Concern

    included do
      scope :ordered, -> { order("#{ table_name }.position ASC") }
      before_create :orderable_assign_position
    end

    def orderable_assign_position
      return if attribute_present?(:position)

      last_resource = self.class.unscoped
        .ordered
        .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

6 entries across 6 versions & 1 rubygems

Version Path
para-0.7.2 lib/para/orderable.rb
para-0.7.1 lib/para/orderable.rb
para-0.7.0 lib/para/orderable.rb
para-0.6.9 lib/para/orderable.rb
para-0.6.8 lib/para/orderable.rb
para-0.6.7 lib/para/orderable.rb