Class: Cassandra::Composite

### Home Classes Methods

### In Files

- lib/cassandra/composite.rb

### Parent

Object

### Methods

- ::new
- ::new_from_packed
- ::new_from_parts
- #<=>
- #[]
- #fast_unpack
- #inspect
- #make_from_parts
- #pack
- #slice_end_of_component
- #to_s

### Included Modules

- ::Comparable

### Files

- CHANGELOG
- LICENSE
- Makefile

### Class/Module Index

Quicksearch

- Cassandra
- Cassandra::Batch
- Cassandra::ColumnFamily
- Cassandra::Comparable
- Cassandra::Composite
- Cassandra::Consistency
- Cassandra::Constants
- Cassandra::DynamicComposite
- Cassandra::Helpers
- Cassandra::Keyspace
- Cassandra::Long
- Cassandra::Mock
- CassandraThrift
- CassandraThrift::Cassandra
- CassandraThrift::Cassandra::Client
- SimpleUUID
- SimpleUUID::UUID
- Array
- Time

No matching classes.

# Cassandra::Composite

### Attributes

column_slice[R]
parts[R]

### Public Class Methods

new(*parts) click to toggle source

    # File lib/cassandra/composite.rb, line 7
    def initialize(*parts)
      return if parts.empty?

      options = {}
      if parts.last.is_a?(Hash)
        options = parts.pop
      end

      if parts.length == 1 && parts[0].instance_of?(self.class)
        make_from_parts(parts[0].parts, :slice => parts[0].column_slice)
      elsif parts.length == 1 && parts[0].instance_of?(String) && @column_slice.nil? && try_packed_composite(parts[0])
        @hash = parts[0].hash
      else
        make_from_parts(parts, options)
      end
    end

new_from_packed(packed) click to toggle source

    # File lib/cassandra/composite.rb, line 24
    def self.new_from_packed(packed)
      obj = new
      obj.fast_unpack(packed)
      return obj
    end

new_from_parts(parts, args={}) click to toggle source

    # File lib/cassandra/composite.rb, line 30
    def self.new_from_parts(parts, args={})
      obj = new
      obj.make_from_parts(parts, args)

      return obj
    end

### Public Instance Methods

<=>(other) click to toggle source

    # File lib/cassandra/composite.rb, line 56
    def <=>(other)
      if !other.instance_of?(self.class)
        return @parts.first <=> other
      end
      eoc = slice_end_of_component.unpack('c')[0]
      other_eoc = other.slice_end_of_component.unpack('c')[0]
      @parts.zip(other.parts).each do |a, b|
        next if a == b
        if a.nil? && b.nil?
          return eoc <=> other_eoc
        end

        if a.nil?
          return @column_slice == :after ? 1 : -1
        end
        if b.nil?
          return other.column_slice == :after ? -1 : 1
        end
        return -1 if a < b
        return 1 if a > b
      end
      return 0
    end

[](*args) click to toggle source

    # File lib/cassandra/composite.rb, line 37
    def [](*args)
      return @parts[*args]
    end

fast_unpack(packed_string) click to toggle source

    # File lib/cassandra/composite.rb, line 93
    def fast_unpack(packed_string)
      @hash = packed_string.hash

      @parts = []
      end_of_component = packed_string.slice(packed_string.length-1, 1)
      while packed_string.length > 0
        length = packed_string.unpack('n')[0]
        @parts << packed_string.slice(2, length)

        packed_string.slice!(0, length+3)
      end

      @column_slice = :after if end_of_component == "\x01"
      @column_slice = :before if end_of_component == "\xFF"
    end

inspect() click to toggle source

    # File lib/cassandra/composite.rb, line 80
    def inspect
      return "#<#{self.class}:#{@column_slice} #{@parts.inspect}>"
    end

make_from_parts(parts, args) click to toggle source

    # File lib/cassandra/composite.rb, line 109
    def make_from_parts(parts, args)
      @parts = parts
      @column_slice = args[:slice]
      raise ArgumentError if @column_slice != nil && ![:before, :after].include?(@column_slice)
    end

pack() click to toggle source

    # File lib/cassandra/composite.rb, line 41
    def pack
      packed = @parts.map do |part|
        [part.length].pack('n') + part + "\x00"
      end
      if @column_slice
        part = @parts[-1]
        packed[-1] = [part.length].pack('n') + part + slice_end_of_component
      end
      return packed.join('')
    end

slice_end_of_component() click to toggle source

    # File lib/cassandra/composite.rb, line 84
    def slice_end_of_component
      ret = "\x00"
      ret = "\x01" if @column_slice == :after
      ret = "\xFF" if @column_slice == :before

      ret.force_encoding('BINARY') if ret.respond_to?(:force_encoding)
      return ret
    end

to_s() click to toggle source

    # File lib/cassandra/composite.rb, line 52
    def to_s
      return pack
    end

[Validate]

Generated with the Darkfish Rdoc Generator 2.