Class: Query::Decompiler

Inherits:
Object show all
Defined in:
lib/query/decompiler.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(parsed) ⇒ Decompiler

Returns a new instance of Decompiler.



5
6
7
# File 'lib/query/decompiler.rb', line 5

def initialize(parsed)
  @parsed = parsed
end

Class Method Details

.decompileObject



9
10
11
# File 'lib/query/decompiler.rb', line 9

def self.decompile(...)
  new(...).decompile
end

Instance Method Details

#decompileObject



13
14
15
16
17
18
19
20
21
# File 'lib/query/decompiler.rb', line 13

def decompile
  if parsed.is_a?(Hash) && parsed.key?(:left)
    format_logic_operator(parsed)
  elsif parsed.is_a?(Hash) && parsed.key?(:right)
    format_not_operator(parsed)
  else
    format_value(parsed)
  end
end

#format_logic_operator(parsed) ⇒ Object



23
24
25
26
27
28
# File 'lib/query/decompiler.rb', line 23

def format_logic_operator(parsed)
  left = self.class.decompile(parsed[:left])
  right = self.class.decompile(parsed[:right])

  "(#{left} #{parsed[:operator]} #{right})"
end

#format_not_operator(parsed) ⇒ Object



30
31
32
33
34
# File 'lib/query/decompiler.rb', line 30

def format_not_operator(parsed)
  right = self.class.decompile(parsed[:right])

  "(#{parsed[:operator]} #{right})"
end

#format_value(value) ⇒ Object



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/query/decompiler.rb', line 36

def format_value(value)
  if value.is_a?(Hash)
    "#{value[:key]}#{value[:operator]}#{format_value(value[:value])}"
  elsif value.is_a?(String)
    Query.evaluate(value).is_a?(Hash) ? value.inspect : value
  elsif value.is_a?(BigDecimal)
    value.to_s("F")
  elsif value.is_a?(Range)
    left = value.first
    right = value.last
    operator = value.exclude_end? ? "..." : ".."
    "#{format_value(left)}#{operator}#{format_value(right)}"
  else
    value.to_s
  end
end