Sha256: b553993fdf4ce9807939e2bd71b4f09aff2215b26ddd22a95c8e7fc7da2c1ac5

Contents?: true

Size: 1.43 KB

Versions: 3

Compression:

Stored size: 1.43 KB

Contents

# -*- encoding : utf-8 -*-
module AbAdmin
  module Concerns
    module AdminAddition
      extend ActiveSupport::Concern

      included do
        scope :admin, scoped
        scope :base, scoped
        scope :ids, lambda { |ids| where("#{quoted_table_name}.id IN (?)", AbAdmin.val_to_array(ids).push(0)) }

        class_attribute :batch_actions, :instance_writer => false
        self.batch_actions = [:destroy]
      end

      def next_prev_by_url(scope, url, prev=false)
        predicates = {'>' => '<', '<' => '>', 'desc' => 'asc', 'asc' => 'desc'}
        query = Rack::Utils.parse_nested_query(URI.parse(url).query).symbolize_keys
        query[:q] ||= {}
        order_str = query[:q]['s'] || 'id desc'
        order_col, order_mode = order_str.split
        quoted_order_col = self.class.quote_column(order_col)
        if prev
          query[:q]['s'] = ["#{order_col} #{predicates[order_mode]}", 'id desc']
          predicate = order_mode == 'desc' ? '>' : '<'
          id_predicate = '<'
        else
          query[:q]['s'] = ["#{order_col} #{order_mode}", 'id']
          predicate = order_mode == 'desc' ? '<' : '>'
          id_predicate = '>'
        end
        sql = "(#{quoted_order_col} #{predicate} :val OR (#{quoted_order_col} = :val AND #{self.class.quote_column('id')} #{id_predicate} #{self.id}))"
        scope.where(sql, :val => self.send(order_col)).ransack(query[:q]).result(:distinct => true).first
      end

    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
ab_admin-0.1.2 lib/ab_admin/concerns/admin_addition.rb
ab_admin-0.1.1 lib/ab_admin/concerns/admin_addition.rb
ab_admin-0.1.0 lib/ab_admin/concerns/admin_addition.rb