Class: OrderQuery::OrderCondition

Inherits:
Object
  • Object
show all
Defined in:
lib/order_query/order_condition.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(scope, spec) ⇒ OrderCondition

Returns a new instance of OrderCondition.



5
6
7
8
9
10
11
12
13
# File 'lib/order_query/order_condition.rb', line 5

def initialize(scope, spec)
  spec              = spec.dup
  @options          = spec.extract_options!
  @name             = spec[0]
  @order            = spec[1] || :asc
  @order_order      = spec[2] || :desc
  @scope            = scope
  @unique           = @options.key?(:unique) ? !!@options[:unique] : (name.to_s == scope.primary_key)
end

Instance Attribute Details

#nameObject (readonly)

Returns the value of attribute name.



3
4
5
# File 'lib/order_query/order_condition.rb', line 3

def name
  @name
end

#optionsObject (readonly)

Returns the value of attribute options.



3
4
5
# File 'lib/order_query/order_condition.rb', line 3

def options
  @options
end

#orderObject (readonly)

Returns the value of attribute order.



3
4
5
# File 'lib/order_query/order_condition.rb', line 3

def order
  @order
end

#order_orderObject (readonly)

Returns the value of attribute order_order.



3
4
5
# File 'lib/order_query/order_condition.rb', line 3

def order_order
  @order_order
end

#scopeObject (readonly)

Returns the value of attribute scope.



3
4
5
# File 'lib/order_query/order_condition.rb', line 3

def scope
  @scope
end

Instance Method Details

#col_name_sqlObject



42
43
44
45
46
47
48
49
50
# File 'lib/order_query/order_condition.rb', line 42

def col_name_sql
  sql = options[:sql]
  if sql
    sql = sql.call if sql.respond_to?(:call)
    sql
  else
    scope.connection.quote_table_name(scope.table_name) + '.' + scope.connection.quote_column_name(name)
  end
end

#ray?Boolean

Returns:

  • (Boolean)


19
20
21
# File 'lib/order_query/order_condition.rb', line 19

def ray?
  !order.is_a?(Array)
end

#unique?Boolean

Returns:

  • (Boolean)


15
16
17
# File 'lib/order_query/order_condition.rb', line 15

def unique?
  @unique
end

#values_around(value, mode, strict = true) ⇒ Array

Returns valid order values before / after passed (depending on the mode).

Parameters:

  • value (Object)
  • mode (:before, :after)

Returns:

  • (Array)

    valid order values before / after passed (depending on the mode)



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/order_query/order_condition.rb', line 26

def values_around(value, mode, strict = true)
  ord = order
  pos = ord.index(value)
  if pos
    dir = order_order
    if mode == :after && dir == :desc || mode == :before && dir == :asc
      ord.from pos + (strict ? 1 : 0)
    else
      ord.first pos + (strict ? 0 : 1)
    end
  else
    # default to all if current is not in sort order values
    ord
  end
end