Sha256: 50f728ca457d36148e503cd275b17fc29367b94f35f83c0d27d5d737fd04b8b7

Contents?: true

Size: 1.34 KB

Versions: 3

Compression:

Stored size: 1.34 KB

Contents

module CloudSesame
  module Query
    module AST
      class Literal

        SINGLE_QUATE = /\'/
        ESCAPE_QUATE = "\\'"

        attr_accessor :field
        attr_reader :options, :value

        def initialize(field = nil, value = nil, options = {}, &block)
          @field = field
          @value = Value.parse value if value
          @value = Value.parse ValueEvaluator.new.instance_exec &block if block_given?
          @options = options || {}
          applied[@value] = true
        end

        def is_for(field, options)
          @field = field
          @options = options.merge @options
        end

        def is_excluded
          applied[value] = applied[value] == false ? true : false
        end

        def as_field
          options[:as] || field
        end

        def compile(detailed = false)
          detailed ? detailed_format : standard_format
        end

        private

        def applied
          options[:applied] ||= {}
        end

        def standard_format
          "#{ as_field }:#{ value.compile }"
        end

        def detailed_format
          "field=#{ escape as_field.to_s } #{ value.compile }"
        end

        def escape(data)
          "'#{ data.gsub(SINGLE_QUATE) { ESCAPE_QUATE } }'"
        end

        class ValueEvaluator
          include DSL::RangeMethods
        end

      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
CloudSesame-0.4.2 lib/cloud_sesame/query/ast/literal.rb
CloudSesame-0.4.1 lib/cloud_sesame/query/ast/literal.rb
CloudSesame-0.4.0 lib/cloud_sesame/query/ast/literal.rb