Module: UtilityScopes::Ordered

Defined in:
lib/utility_scopes/ordered.rb

Defined Under Namespace

Modules: ClassMethods

Class Method Summary collapse

Class Method Details

.included(base) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/utility_scopes/ordered.rb', line 5

def self.included(base)
  base.extend ClassMethods
  
  base.class_eval do
    # Provide an ordered scope
    named_scope(:ordered, lambda { |*order|
      { :order => case
        when order.empty?
          self.default_ordering
        # allow hash support for jruby or ruby 1.9
        when order.size == 1 && order[0].is_a?(Hash) && (PLATFORM=~/java/ || RUBY_VERSION=~/1\.9.*/)
          order.first.collect{|(k,v)| "#{k} #{v.to_s.upcase}"}.join(', ')
        else
          order.collect{|e| e.is_a?(Array) ? "#{e[0]} #{e[1].to_s.upcase}" : e}.join(', ')
        end
      }
    })
    
    class << self
      # Set alias order_by
      alias_method :order_by, :ordered
      # Set alias sort_by
      alias_method :sort_by, :ordered
      # Set the default order
      define_method(:default_ordering) { 'created_at DESC' }
    end
  end
end