Methods
Attributes
| [R] | name | |
| [R] | test | |
| [R] | value |
Public Class methods
Initialize a Clause object with the name of the column.
[ show source ]
# File lib/og/ez/clause.rb, line 30
30: def initialize(*args)
31: @table_prefix = ''
32: @negate = false
33: case args.length
34: when 0:
35: raise 'Expected at least one parameter'
36: when 1:
37: @name = args.first.to_s
38: when 2:
39: @table_prefix = args[0].to_s + '.' unless args[0].to_s.empty?
40: @name = args[1].to_s
41: when 3:
42: @table_prefix = args[0].to_s + '.' unless args[0].to_s.empty?
43: @name = args[1].to_s
44: @negate = args[2]
45: end
46: # append ! to negate the statement
47: if @name[-1,1] == '!'
48: @negate = true
49: @name = @name.slice(0, @name.length - 1)
50: end
51: # prefix with esc_ to avoid clashes with standard methods like 'alias'
52: @name = @name.slice(4, @name.length) if @name =~ /^esc_.*/
53: end
Public Instance methods
The spaceship <=> operator has been over-ridden here to stand in for the sql ["BETWEEN ? AND ?", 1, 5] "%foobar%" clause.
[ show source ]
# File lib/og/ez/clause.rb, line 71
71: def <=>(range)
72: @test = :between
73: @value = range
74: end
The == operator has been over-ridden here to stand in for an exact match ["foo = ?", "bar"]
[ show source ]
# File lib/og/ez/clause.rb, line 57
57: def ==(other)
58: @test = :equals
59: @value = other
60: end
The === operator has been over-ridden here to stand in for the sql ["IN (?)", [1,2,3]] clause.
[ show source ]
# File lib/og/ez/clause.rb, line 78
78: def ===(range)
79: @test = :in
80: @value = range
81: end
The =~ operator has been over-ridden here to stand in for the sql LIKE "%foobar%" clause.
[ show source ]
# File lib/og/ez/clause.rb, line 64
64: def =~(pattern)
65: @test = :like
66: @value = pattern
67: end
This method_missing takes care of setting @test to any operator thats not covered above. And @value to the value
[ show source ]
# File lib/og/ez/clause.rb, line 108
108: def method_missing(name, *args)
109: @test = name
110: @value = args.first
111: end
switch on @test and build appropriate clause to match the operation.
[ show source ]
# File lib/og/ez/clause.rb, line 85
85: def to_sql
86: case @test
87: when :equals
88: if @value == :null
89: @negate ? ["#{@table_prefix}#{@name} IS NOT NULL"] : ["#{@table_prefix}#{@name} IS NULL"]
90: else
91: @negate ? ["#{@table_prefix}#{@name} != ?", @value] : ["#{@table_prefix}#{@name} = ?", @value]
92: end
93: when :like
94: @negate ? ["#{@table_prefix}#{@name} NOT LIKE ?", @value] : ["#{@table_prefix}#{@name} LIKE ?", @value]
95: when :between
96: @negate ? ["#{@table_prefix}#{@name} NOT BETWEEN ? AND ?", @value.begin, @value.end] : ["#{@table_prefix}#{@name} BETWEEN ? AND ?", @value.begin, @value.end]
97: when :in
98: # @negate ? ["#{@table_prefix}#{@name} NOT IN (?)", @value.to_a] : ["#{@table_prefix}#{@name} IN (?)", @value.to_a]
99: @negate ? ["#{@table_prefix}#{@name} NOT IN (?*)", @value.to_a] : ["#{@table_prefix}#{@name} IN (?*)", @value.to_a]
100: else
101: ["#{@table_prefix}#{@name} #{@test} ?", @value]
102: end
103: end