Sha256: 02466ac75710aa2115ac9f66ff28fbb02edeed0a72a942adf5303aca5ca164ed

Contents?: true

Size: 1.31 KB

Versions: 15

Compression:

Stored size: 1.31 KB

Contents

module CloudSesame
  module Query
    module AST
      class Literal

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

        attr_accessor :field
        attr_reader :options, :value

        def initialize(field, value = nil, options = {})
          @field, @options = field, options
          self.value = value
        end

        def value=(value)
          if value
            @value = Value.parse value
            is_included
          end
        end

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

        def is_included
          applied[value] = true
        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) if value
        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

      end
    end
  end
end

Version data entries

15 entries across 15 versions & 1 rubygems

Version Path
CloudSesame-0.6.8 lib/cloud_sesame/query/ast/literal.rb
CloudSesame-0.6.7 lib/cloud_sesame/query/ast/literal.rb
CloudSesame-0.6.6 lib/cloud_sesame/query/ast/literal.rb
CloudSesame-0.6.5 lib/cloud_sesame/query/ast/literal.rb
CloudSesame-0.6.4 lib/cloud_sesame/query/ast/literal.rb
CloudSesame-0.6.3 lib/cloud_sesame/query/ast/literal.rb
CloudSesame-0.6.2 lib/cloud_sesame/query/ast/literal.rb
CloudSesame-0.6.1 lib/cloud_sesame/query/ast/literal.rb
CloudSesame-0.6.0 lib/cloud_sesame/query/ast/literal.rb
CloudSesame-0.5.5 lib/cloud_sesame/query/ast/literal.rb
CloudSesame-0.5.4 lib/cloud_sesame/query/ast/literal.rb
CloudSesame-0.5.3 lib/cloud_sesame/query/ast/literal.rb
CloudSesame-0.5.2 lib/cloud_sesame/query/ast/literal.rb
CloudSesame-0.5.1 lib/cloud_sesame/query/ast/literal.rb
CloudSesame-0.5.0 lib/cloud_sesame/query/ast/literal.rb