Sha256: 77e3b8b84c50f8905b470a595f886d462752a7878610c434bffafafb28874120

Contents?: true

Size: 1.21 KB

Versions: 2

Compression:

Stored size: 1.21 KB

Contents

require 'couchbase_doc_store'

# haven't written this one yet... it's a copy of Stack code
module CouchbaseStructures
  class SortedList
    include CouchbaseDocStore

    attr_accessor :sort_type, :sort_key
    
    def initialize(key, attr = {})
      
      if attr.has_key? :sort_type
        case attr[:sort_type]
        when :json
          @sort_type = :json
          @sort_key = attr[:sort_key] 
        when :simple
          @sort_type = :simple
        end
      end
      
      @key = key
      @list_key = "#{key}::sorted_list"
      initialize_document(@list_key, { :sorted_list => [], :last_updated => Time.now.utc.to_i })
      self      
    end

    def add(value)
      doc = get_document(@list_key)
      list = doc["sorted_list"]
      list << value
      
      # simple sort only for singular values, string, integer, float, etc.
      list.sort!
      
      # complex sort for Hash types
      
      doc["sorted_list"] = list
      doc["last_updated"] = Time.now.utc.to_i
      replace_document(@list_key, doc)
      list
    end

    def items
      doc = get_document(@list_key)
      doc["sorted_list"]
    end

    def size
      doc = get_document(@list_key)
      doc["sorted_list"].size
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
couchbase-structures-0.0.9 lib/couchbase_structures/sorted_list.rb
couchbase-structures-0.0.4 lib/couchbase_structures/sorted_list.rb