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.

Parameters:

  • spec (Hash)

    a customizable set of options

Options Hash (spec):

  • :unique (String)

    Mark the attribute as unique to avoid redundant conditions

  • :complete (String)

    Mark the condition’s domain as complete to avoid redundant conditions (only for array conditions)



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/order_query/order_condition.rb', line 7

def initialize(scope, spec)
  spec         = spec.dup
  options      = spec.extract_options!
  @name        = spec[0]
  @order       = spec[1] || :asc
  @order_order = spec[2] || :desc
  @options     = options
  @scope       = scope
  @unique      = if options.key?(:unique)
                   !!options[:unique]
                 else
                   name.to_s == scope.primary_key
                 end
  @complete    = if options.key?(:complete)
                   !!options[:complete]
                 else
                   !list?
                 end
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



59
60
61
62
63
64
65
66
67
68
69
# File 'lib/order_query/order_condition.rb', line 59

def col_name_sql
  @col_name_sql ||= begin
    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
end

#complete?Boolean

Returns:

  • (Boolean)


31
32
33
# File 'lib/order_query/order_condition.rb', line 31

def complete?
  @complete
end

#filter_values(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)



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/order_query/order_condition.rb', line 43

def filter_values(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

#list?Boolean

Returns whether order is specified as a list of values.

Returns:

  • (Boolean)

    whether order is specified as a list of values



36
37
38
# File 'lib/order_query/order_condition.rb', line 36

def list?
  order.is_a?(Enumerable)
end

#unique?Boolean

Returns:

  • (Boolean)


27
28
29
# File 'lib/order_query/order_condition.rb', line 27

def unique?
  @unique
end