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, :user_key => @key }) self end def inspect(html=false) if html str = "[" self.items.each do |item| str += "
    " + item.inspect end str += "
]" return "key = #{@key}
items = #{str}" else return items.inspect end 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 def delete delete_document(@list_key) end end end