Class: WhereRow::QueryBuilderFascade

Inherits:
Object
  • Object
show all
Defined in:
lib/where_row/query_builder_fascade.rb

Instance Method Summary collapse

Constructor Details

#initialize(relation, keys, negated = false) ⇒ QueryBuilderFascade



5
6
7
8
9
# File 'lib/where_row/query_builder_fascade.rb', line 5

def initialize(relation, keys, negated = false)
  @relation = relation
  @keys = keys
  @negated = negated
end

Instance Method Details

#eq(*values) ⇒ ActiveRecord::Relation

Generates the equivalent clause of (c1, c2, c3, …) = (v1, v2, v3, …)



31
32
33
34
35
# File 'lib/where_row/query_builder_fascade.rb', line 31

def eq(*values)
  op = @negated ? :not_eq : :eq

  QueryBuilder.new(@relation, @keys, op, values).build
end

#gt(*values) ⇒ ActiveRecord::Relation

Generates the equivalent clause of (c1, c2, c3, …) > (v1, v2, v3, …)



77
78
79
80
81
# File 'lib/where_row/query_builder_fascade.rb', line 77

def gt(*values)
  op = @negated ? :lteq : :gt

  QueryBuilder.new(@relation, @keys, op, values).build
end

#gte(*values) ⇒ ActiveRecord::Relation

Generates the equivalent clause of (c1, c2, c3, …) >= (v1, v2, v3, …)



90
91
92
93
94
# File 'lib/where_row/query_builder_fascade.rb', line 90

def gte(*values)
  op = @negated ? :lt : :gteq

  QueryBuilder.new(@relation, @keys, op, values).build
end

#in(*values) ⇒ ActiveRecord::Relation

Generates the equivalent clause of (c1, c2, c3, …) IN ((a1, a2, a3, …), (b1, b2, b3, …))



44
45
46
47
48
# File 'lib/where_row/query_builder_fascade.rb', line 44

def in(*values)
  op = @negated ? :not_in : :in

  QueryBuilder.new(@relation, @keys, op, values).build
end

#in_range(range) ⇒ Object



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/where_row/query_builder_fascade.rb', line 50

def in_range(range)
  if @negated
    result = @relation.where_row(@keys).lt(range.begin)

    if range.exclude_end?
      result.or(@relation.where_row(@keys).gte(range.end))
    else
      result.or(@relation.where_row(@keys).gt(range.end))
    end
  else
    result = @relation.where_row(@keys).gte(range.begin)

    if range.exclude_end?
      result.where_row(@keys).lt(range.end)
    else
      result.where_row(@keys).lte(range.end)
    end
  end
end

#lt(*values) ⇒ ActiveRecord::Relation

Generates the equivalent clause of (c1, c2, c3, …) < (v1, v2, v3, …)



103
104
105
106
107
# File 'lib/where_row/query_builder_fascade.rb', line 103

def lt(*values)
  op = @negated ? :gteq : :lt

  QueryBuilder.new(@relation, @keys, op, values).build
end

#lte(*values) ⇒ ActiveRecord::Relation

Generates the equivalent clause of (c1, c2, c3, …) <= (v1, v2, v3, …)



116
117
118
119
120
# File 'lib/where_row/query_builder_fascade.rb', line 116

def lte(*values)
  op = @negated ? :gt : :lteq

  QueryBuilder.new(@relation, @keys, op, values).build
end

#notWhereRow::QueryBuilderFascade

Negate the where_row condition that follows

Examples:

Rel.where_row(:c1, c2).eq(v1, v2) # Generates the equivalent of (c1, c2) = (v1, v2)
Rel.where_row(:c1, c2).not.eq(v1, v2) # Generates the equivalent of (c1, c2) != (v1, v2)


20
21
22
# File 'lib/where_row/query_builder_fascade.rb', line 20

def not
  self.class.new(@relation, @keys, true)
end