couchbase-structures 0.0.4 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -1,3 +1,4 @@
1
+ *.sh
1
2
  *.gem
2
3
  *.rbc
3
4
  .bundle
@@ -5,25 +5,44 @@ module CouchbaseStructures
5
5
  include CouchbaseDocStore
6
6
 
7
7
  def initialize(key)
8
- @key = key
9
- @head_index_key = "#{key}::queue::head"
10
- @tail_index_key = "#{key}::queue::tail"
8
+ @user_key = key
9
+ @key = "#{key}::queue"
10
+ @head_index_key = "#{@key}::head"
11
+ @tail_index_key = "#{@key}::tail"
12
+ initialize_document(@head_index_key, 0)
13
+ initialize_document(@tail_index_key, 0)
14
+ initialize_document(@key, { :type => "queue", :class => "CouchbaseStructures::Queue", :user_key => key } )
11
15
  self
12
16
  end
13
17
 
18
+ def inspect(html = false)
19
+ if html
20
+ "<strong>key</strong> = #{@key} <br /><strong>head_index</strong> = #{get_document(@head_index_key).to_s} <br /><strong>tail_index</strong> = #{get_document(@tail_index_key).to_s} <br /><strong>items</strong> = #{self.to_a(true)}"
21
+ else
22
+ "key = #{@key} head_index = #{get_document(@head_index_key).to_s} tail_index = #{get_document(@tail_index_key).to_s} items = #{self.to_a}"
23
+ end
24
+ end
25
+
26
+ # peek at item at index (zero based)
27
+ def peek(queue_index)
28
+ self
29
+ end
30
+
31
+ # Add an item to the end of the queue (tail)
14
32
  def enqueue(value)
15
33
  new_tail_index = increase_atomic_count(@tail_index_key)
16
- create_document("#{key}::queue::#{new_tail_index}", value)
34
+ create_document("#{@key}::#{new_tail_index}", value)
17
35
  self
18
36
  end
19
37
 
38
+ # Pop an item off the front of queue (head)
20
39
  def pop()
21
40
  head_index = get_document(@head_index_key)
22
41
  tail_index = get_document(@tail_index_key)
23
- if tail_index > head_index
24
- increase_atomic_count(@head_index_key)
25
- get_document("#{key}::queue::#{head_index}")
26
- else
42
+ if tail_index > head_index # if there is an item in the queue
43
+ increase_atomic_count(@head_index_key) #incremented new_head_index is ignored, but we are incrementing and popping value
44
+ return get_document("#{@key}::#{head_index + 1}")
45
+ else #
27
46
  nil
28
47
  end
29
48
  end
@@ -31,5 +50,45 @@ module CouchbaseStructures
31
50
  def size()
32
51
  get_document(@tail_index_key) - get_document(@head_index_key)
33
52
  end
53
+
54
+ def delete
55
+ #head_index = get_document(@head_index_key) # (not needed)
56
+ tail_index = get_document(@tail_index_key)
57
+
58
+ # delete all queued documents, including those that were before the current head (those aren't deleted as of now)
59
+ 1.upto(tail_index) do |i|
60
+ delete_document("#{@key}::#{i}")
61
+ end
62
+ delete_document(@head_index_key)
63
+ delete_document(@tail_index_key)
64
+ delete_document(@key)
65
+ @user_key = nil
66
+ @key = nil
67
+ @head_index_key = nil
68
+ @tail_index_key = nil
69
+ nil
70
+ end
71
+
72
+ def to_a(html=false)
73
+ a = []
74
+ head_index = get_document(@head_index_key) + 1
75
+ tail_index = get_document(@tail_index_key)
76
+
77
+ # delete all queued documents, including those that were before the current head (those aren't deleted as of now)
78
+ head_index.upto(tail_index) do |i|
79
+ a << get_document("#{@key}::#{i}")
80
+ end
81
+
82
+ if html
83
+ str = "["
84
+ a.each do |item|
85
+ str += "<br />&nbsp;&nbsp;&nbsp;&nbsp;" + item.inspect
86
+ end
87
+ str += "<br />]"
88
+ return str
89
+ else
90
+ return a
91
+ end
92
+ end
34
93
  end
35
94
  end
@@ -5,29 +5,71 @@ module CouchbaseStructures
5
5
  include CouchbaseDocStore
6
6
 
7
7
  def initialize(key)
8
- @key = key
9
- @top_index_key = "#{key}::stack::top"
8
+ @user_key = key
9
+ @key = "#{@user_key}::stack"
10
+ @top_index_key = "#{@key}::top"
10
11
  initialize_document(@top_index_key, 0)
12
+ initialize_document(@key, { :type => "stack", :class => "CouchbaseStructures::Stack", :user_key => @user_key } )
11
13
  self
12
14
  end
15
+
16
+ def inspect(html = false)
17
+ if html
18
+ "<strong>key</strong> = #{@key} <br /><strong>top_index</strong> = #{get_document(@top_index_key).to_s} <br /><strong>items</strong> = #{self.to_a(true)}"
19
+ else
20
+ "key = #{@key}\ntop_index = #{get_document(@top_index_key).to_s}\nitems = #{self.to_a}"
21
+ end
22
+ end
13
23
 
14
24
  def push(value)
15
25
  new_top_index = increase_atomic_count(@top_index_key)
16
- create_document("#{key}::stack::#{new_top_index}", value)
26
+ create_document("#{@key}::#{new_top_index}", value)
17
27
  self
18
28
  end
19
29
 
20
30
  def pop()
21
31
  old_top_index = get_document(@top_index_key)
32
+ return nil if @top_index_key == 0 # if the stack has returned to zero items
22
33
  decrease_atomic_count(@top_index_key)
23
34
 
24
- doc = get_document("#{key}::stack::#{old_top_index}")
25
- delete_document("#{key}::stack::#{old_top_index}")
35
+ doc = get_document("#{@key}::#{old_top_index}")
36
+ delete_document("#{@key}::#{old_top_index}")
26
37
  doc
27
38
  end
28
39
 
29
40
  def size
30
41
  get_document(@top_index_key)
31
42
  end
43
+
44
+ def delete
45
+ top_index = get_document(@top_index_key)
46
+
47
+ top_index.downto(1) do |i|
48
+ delete_document("#{@key}::#{i}")
49
+ end
50
+ delete_document(@top_index_key)
51
+ delete_document(@key)
52
+ end
53
+
54
+ def to_a(html=false)
55
+ a = []
56
+ top_index = get_document(@top_index_key)
57
+
58
+ # delete all queued documents, including those that were before the current head (those aren't deleted as of now)
59
+ top_index.downto(1) do |i|
60
+ a << get_document("#{@key}::#{i}")
61
+ end
62
+
63
+ if html
64
+ str = "["
65
+ a.each do |item|
66
+ str += "<br />&nbsp;&nbsp;&nbsp;&nbsp;" + item.inspect
67
+ end
68
+ str += "<br />]"
69
+ return str
70
+ else
71
+ return a
72
+ end
73
+ end
32
74
  end
33
75
  end
@@ -1,3 +1,3 @@
1
1
  module CouchbaseStructures
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.9"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: couchbase-structures
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.9
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-10-31 00:00:00.000000000 Z
12
+ date: 2012-11-01 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: couchbase-docstore
@@ -103,3 +103,4 @@ specification_version: 3
103
103
  summary: A convenient implementation of stacks, queues and sorted lists using Couchbase
104
104
  KV patterns.
105
105
  test_files: []
106
+ has_rdoc: