Sha256: f3c26b99b1ff55fb2cf87cd7578f40720dffbc310a0c9c3a525aed5fbe38267a
Contents?: true
Size: 1.4 KB
Versions: 1
Compression:
Stored size: 1.4 KB
Contents
require 'bigdecimal' require 'date' require 'set' require 'time' module Cassanity class Statement def initialize(cql, options = {}) @cql = cql @options = options @cql_version = @options.fetch(:cql_version, '3.0.0') end def interpolate(variables) e = variables.to_enum @cql.gsub(/\?/) { quote(e.next) } end private def quote(var) if Array === var %([#{var.map { |v| "#{quote(v)}" }.join(',')}]) elsif Set === var %({#{var.map { |v| "#{quote(v)}" }.join(',')}}) elsif Hash === var %({#{var.map { |k, v| "#{quote(k)}:#{quote(v)}" }.join(',')}}) elsif String === var %('#{escape_string(var)}') elsif BigDecimal === var && cql2? %('#{var.to_s}') elsif Numeric === var var.to_s elsif Date === var %('#{var.strftime('%Y-%m-%d')}') elsif Time === var (var.to_f * 1000).to_i elsif TrueClass === var || FalseClass === var if cql2? %('#{var.to_s}') else var.to_s end elsif var.respond_to?(:to_guid) var.to_guid elsif var.respond_to?(:to_s) %('#{var.to_s}') else raise ArgumentError, "Unable to escape #{var} (of type #{var.class})" end end def escape_string(str) str.gsub("'", "''") end def cql2? @cql_version.start_with?('2') end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
cassanity-0.6.0 | lib/cassanity/statement.rb |