Method: Whereable::ClassMethods#whereable_deparse

Defined in:
lib/whereable.rb

#whereable_deparse(hash) ⇒ Object

deparse hash tree to Arel

Raises:



58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/whereable.rb', line 58

def whereable_deparse(hash)
  raise FilterInvalid, "Invalid hash #{hash}" if hash.size > 1

  key, value = hash.first

  case key
  when :and, :or
    arel = whereable_deparse(value.first)
    value[1..-1].each do |o|
      arel = arel.public_send(key, whereable_deparse(o))
    end
    arel
  when :eq, :not_eq, :gt, :gteq, :lt, :lteq
    column = whereable_valid_column(value[:column])
    literal = whereable_valid_literal(column, value[:literal])
    arel_table[column].public_send(key, literal)
  when :between
    column = whereable_valid_column(value[:column])
    literals = value[:literals]
    raise(FilterInvalid, "Invalid operation for #{column}") if defined_enums.key?(column)

    arel_table[column].between(literals)
  when :in
    column = whereable_valid_column(value[:column])
    literals = value[:literals].map { |l| whereable_valid_literal(column, l) }

    arel_table[column].in(literals)
  else
    raise FilterInvalid, "Invalid hash #{hash}"
  end
end