Sha256: ebaa17a2f85251e60397097c8fd8cb289979ad3f45f6d25f967adf4a1d828306

Contents?: true

Size: 1.17 KB

Versions: 3

Compression:

Stored size: 1.17 KB

Contents

module CloudSesame
  module Query
    module AST
      class RangeValue < Value

        def initialize(range = nil)
          @data = range && range.kind_of?(Range) ? [true, to_value(range.begin), to_value(range.end), !range.exclude_end?] : [false, nil, nil, false]
        end

        def compile
          "#{ lb }#{ data[1].to_s },#{ data[2].to_s }#{ ub }"
        end

        def gt(value)
          data[0], data[1] = false, to_value(value)
          return self
        end

        def gte(value)
          data[0], data[1] = true, to_value(value)
          return self
        end

        def lt(value)
          data[2], data[3] = to_value(value), false
          return self
        end

        def lte(value)
          data[2], data[3] = to_value(value), true
          return self
        end

        private

        def to_value(value)
          return value if value.kind_of? Value
          return DateValue.new(value) if value.kind_of?(Date) || value.kind_of?(Time)
          Value.new value
        end

        def lb
          data[1] && data[0] ? '[' : '{'
        end

        def ub
          data[2] && data[3] ? ']' : '}'
        end

      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
CloudSesame-0.2.2 lib/cloud_sesame/query/ast/range_value.rb
CloudSesame-0.2.1 lib/cloud_sesame/query/ast/range_value.rb
CloudSesame-0.2.0 lib/cloud_sesame/query/ast/range_value.rb