Sha256: a12de2ba144e287ac446d90c763cef541ec75b5f51d4be8094016b73d171a0a4

Contents?: true

Size: 1.66 KB

Versions: 4

Compression:

Stored size: 1.66 KB

Contents

# encoding: utf-8

module QueryBuilder::CQL::Operators

  class << self

    # Converts value to CQL literal
    #
    # @example
    #   fn = Operators[:cql_literal]
    #   fn[nil]      # => "NaN"
    #   fn["0x9232"] # => "0x9232"
    #   fn[:foo]     # => "'foo'"
    #
    # @param [Object] value
    #
    # @return [String]
    #
    def cql_literal(value)
      return "NaN"                    if nan?(value)
      return "Infinity"               if infinity?(value)
      return value.to_s               if unchanged?(value)
      return cql_literal_array(value) if array?(value)
      return cql_literal_hash(value)  if hash?(value)
      quote(value)
    end

    private

    def cql_literal_array(value)
      "[#{value.map(&method(:cql_literal)).join(", ")}]"
    end

    def cql_literal_hash(value)
      str =
        value
        .map { |k, v| [cql_literal(k), cql_literal(v)].join(": ") }
        .join(", ")
      "{#{str}}"
    end

    def quote(value)
      "'#{value.to_s.gsub("\'", "\'\'")}'"
    end

    def nan?(value)
      value.nil? || value.to_s.eql?("NaN")
    end

    def infinity?(value)
      value.to_s.eql?("Infinity")
    end

    def unchanged?(value)
      number?(value) || uuid?(value) || blob?(value) || bool?(value)
    end

    def uuid?(value)
      value.to_s[/^\h{8}(-\h{4}){3}-\h{12}$/]
    end

    def blob?(value)
      value.to_s[/^0[xX]./]
    end

    def number?(value)
      value.is_a? Numeric
    end

    def bool?(value)
      [true, false].include? value
    end

    def hash?(value)
      value.instance_of? Hash
    end

    def array?(value)
      value.instance_of? Array
    end

  end

end # module QueryBuilder::CQL::Operators

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
query_builder-0.0.4 lib/query_builder/cql/operators/cql_literal.rb
query_builder-0.0.3 lib/query_builder/cql/operators/cql_literal.rb
query_builder-0.0.2 lib/query_builder/cql/operators/cql_literal.rb
query_builder-0.0.1 lib/query_builder/cql/operators/cql_literal.rb