Class: DynamicQuery::Querier

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

Constant Summary collapse

STMT_SUFFIX_DICT =
{
  nil           => '= ?',
  'eq'          => '= ?',
  'not_eq'      => '!= ?',
  'gt'          => '> ?',
  'ge'          => '>= ?',
  'lt'          => '< ?',
  'le'          => '<= ?',
  'in'          => 'IN (?)',
  'not_in'      => 'NOT IN (?)',
  'like'        => 'LIKE ?',
  'not_like'    => 'NOT LIKE ?',
  'btw'         => 'BETWEEN ? AND ?',
  'not_btw'     => 'NOT BETWEEN ? AND ?',
  'between'     => 'BETWEEN ? AND ?',
  'not_between' => 'NOT BETWEEN ? AND ?',
  'is'          => 'IS ?',
  'is_not'      => 'IS NOT ?'
}

Class Method Summary collapse

Class Method Details

.statement(conditions) ⇒ Object



92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
# File 'lib/dynamic_query.rb', line 92

def self.statement(conditions)
  conditions ||= []
  statement = []
  values = []
  
  conditions.each do |conds|
    and_conds = []
    conds.each do |key, val|
      col, op = key.to_s.split(/\./)
      op = STMT_SUFFIX_DICT[op]
      and_conds << "#{col} #{op}"
      if ['BETWEEN ? AND ?', 'NOT BETWEEN ? AND ?'].include? op
        values << val[0] << val[1]
      else
        values << val
      end
    end
    statement << and_conds.join(' AND ')
  end
  
  values.unshift statement.map { |s| "(#{s})" }.join(' OR ')
end