Sha256: 2f4c8a6e32b303ced77b082e8f54263395d803c540086e102d720ccc53250d17

Contents?: true

Size: 1.35 KB

Versions: 3

Compression:

Stored size: 1.35 KB

Contents

require 'activerecord/sortable/acts_as_sortable/instance_methods'

require 'active_support'

module ActiveRecord
  module Sortable
    module ActsAsSortable
      extend ::ActiveSupport::Concern

      module ClassMethods
        def acts_as_sortable(&block)
          options = {
            :relation => ->(instance) {instance.class},
            :append => false,
            :position_column => :position
          }
          block.call(options) if block_given?

          cattr_accessor :sortable_relation, :instance_reader => false, :instance_writer => false
          cattr_accessor :sortable_append, :instance_reader => true, :instance_writer => false
          cattr_accessor :sortable_position_column, :instance_reader => true, :instance_writer => false

          self.sortable_relation = options[:relation]
          self.sortable_append = options[:append]
          self.sortable_position_column = options[:position_column]

          scope "ordered_by_#{self.sortable_position_column}_asc".to_sym, -> { order(self.sortable_position_column => :asc) }

          before_create :sortable_set_default_position
          after_destroy :sortable_shift_on_destroy

          include ActiveRecord::Sortable::ActsAsSortable::InstanceMethods
        end
      end
    end
  end
end

require 'active_record'
ActiveRecord::Base.send :include, ActiveRecord::Sortable::ActsAsSortable

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
activerecord-sortable-0.0.3 lib/activerecord/sortable/acts_as_sortable.rb
activerecord-sortable-0.0.2 lib/activerecord/sortable/acts_as_sortable.rb
activerecord-sortable-0.0.1 lib/activerecord/sortable/acts_as_sortable.rb