Sha256: 421b170acc86a0e3c8459a8f30d07244494d37a9b934f6b526f1bc6bd7bbcbd9

Contents?: true

Size: 1.31 KB

Versions: 17

Compression:

Stored size: 1.31 KB

Contents

module CloudSesame
  module Query
    module AST
      class Literal

        SINGLE_QUATE = Regexp.new(/\'/).freeze
        ESCAPE_QUATE = "\\'".freeze

        attr_reader :field, :value, :options

        def initialize(field, value, options = {})
          @field = field
          @options = options || default_options
          @value = parse_value(value) if value
        end

        def actual_field_name
          @options[:as] || @field
        end

        def applied(included)
          { field: @field, value: @value, included: included } if @value
        end

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

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

        private

        def standard_format
          "#{ actual_field_name }:#{ @value.compile }"
        end

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

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

        def parse_value(value)
          LazyObject.new { (@options[:type] || Value).parse(value) }
        end

        def default_options
          { type: Value }
        end

      end
    end
  end
end

Version data entries

17 entries across 17 versions & 1 rubygems

Version Path
CloudSesame-1.0.0 lib/cloud_sesame/query/ast/literal.rb
CloudSesame-0.9.4 lib/cloud_sesame/query/ast/literal.rb
CloudSesame-0.9.3 lib/cloud_sesame/query/ast/literal.rb
CloudSesame-0.9.2 lib/cloud_sesame/query/ast/literal.rb
CloudSesame-0.9.1 lib/cloud_sesame/query/ast/literal.rb
CloudSesame-0.9.0 lib/cloud_sesame/query/ast/literal.rb
CloudSesame-0.8.3 lib/cloud_sesame/query/ast/literal.rb
CloudSesame-0.8.2 lib/cloud_sesame/query/ast/literal.rb
CloudSesame-0.8.1 lib/cloud_sesame/query/ast/literal.rb
CloudSesame-0.8.0 lib/cloud_sesame/query/ast/literal.rb
CloudSesame-0.7.13 lib/cloud_sesame/query/ast/literal.rb
CloudSesame-0.7.12 lib/cloud_sesame/query/ast/literal.rb
CloudSesame-0.7.11 lib/cloud_sesame/query/ast/literal.rb
CloudSesame-0.7.10 lib/cloud_sesame/query/ast/literal.rb
CloudSesame-0.7.9 lib/cloud_sesame/query/ast/literal.rb
CloudSesame-0.7.8 lib/cloud_sesame/query/ast/literal.rb
CloudSesame-0.7.7 lib/cloud_sesame/query/ast/literal.rb