Class: OrderQuery::Condition

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(spec, scope) ⇒ Condition

Returns a new instance of Condition.

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)



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/order_query/condition.rb', line 8

def initialize(spec, scope)
  spec    = spec.dup
  options = spec.extract_options!
  @name   = spec[0]
  case spec[1]
    when Array
      @order_enum = spec[1]
      @order      = spec[2] || :desc
    else
      @order = spec[1] || :asc
  end
  @options  = options
  @unique   = if options.key?(:unique)
                !!options[:unique]
              else
                name.to_s == scope.primary_key
              end
  @complete = if options.key?(:complete)
                !!options[:complete]
              else
                !@order_enum
              end

  @sql = SQL::Condition.new(self, scope)
end

Instance Attribute Details

#nameObject (readonly)

Returns the value of attribute name.



4
5
6
# File 'lib/order_query/condition.rb', line 4

def name
  @name
end

#optionsObject (readonly)

Returns the value of attribute options.



4
5
6
# File 'lib/order_query/condition.rb', line 4

def options
  @options
end

#orderObject (readonly)

Returns the value of attribute order.



4
5
6
# File 'lib/order_query/condition.rb', line 4

def order
  @order
end

#order_enumObject (readonly)

Returns the value of attribute order_enum.



4
5
6
# File 'lib/order_query/condition.rb', line 4

def order_enum
  @order_enum
end

#sqlObject (readonly)

Returns the value of attribute sql.



4
5
6
# File 'lib/order_query/condition.rb', line 4

def sql
  @sql
end

Instance Method Details

#complete?Boolean

Returns:

  • (Boolean)


38
39
40
# File 'lib/order_query/condition.rb', line 38

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)



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/order_query/condition.rb', line 45

def filter_values(value, mode, strict = true)
  ord = order_enum
  pos = ord.index(value)
  if pos
    dir = 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

#inspectObject



61
62
63
# File 'lib/order_query/condition.rb', line 61

def inspect
  "Condition(#{@name.inspect}#{" #{@order_enum.inspect}" if @order_enum} #{@order.to_s.upcase} #{'unique ' if @unique}#{@complete ? 'complete' : 'partial' if @order_enum})"
end

#unique?Boolean

Returns:

  • (Boolean)


34
35
36
# File 'lib/order_query/condition.rb', line 34

def unique?
  @unique
end