Sha256: 44e20375f9296454c0ee71cf227a458776bc043c8ce8ddfa7e6bf9b886a494b7
Contents?: true
Size: 1.52 KB
Versions: 7
Compression:
Stored size: 1.52 KB
Contents
class Card class Query class Value include Clause attr_reader :query, :operator, :value def initialize rawvalue, query @query = query @operator, @value = parse_value rawvalue canonicalize_operator end def parse_value rawvalue operator = case rawvalue when Array; rawvalue.shift when String; '=' when Integer; '=' else raise("Invalid Condition Clause #{rawvalue}.inspect}") end [operator, rawvalue] end def canonicalize_operator if target = OPERATORS[@operator.to_s] @operator = target else fail BadQuery, "Invalid Operator #{@operator}" end end def sqlize v case v when Query; v.to_sql when Array; "(" + v.flatten.collect {|x| sqlize(x)}.join(',') + ")" else quote(v.to_s) end end def to_sql field op,v = @operator, @value table = @query.table_alias field, v = case field.to_s when "name" ["#{table}.key", [v].flatten.map(&:to_name).map(&:key)] when "content" ["#{table}.db_content", v] else ["#{table}.#{safe_sql field}", v] end v = v[0] if Array===v && v.length==1 && op != 'in' if op=='~' cxn, v = match_prep(v) %{#{field} #{cxn.match(sqlize(v))}} else "#{field} #{op} #{sqlize(v)}" end end end end end
Version data entries
7 entries across 7 versions & 1 rubygems