couchbase-docstore 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # CouchbaseDocumentStore
1
+ # CouchbaseDocStore
2
2
 
3
3
  TODO: Write a gem description
4
4
 
@@ -0,0 +1,22 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'couchbase_doc_store/version'
5
+
6
+ Gem::Specification.new do |gem|
7
+ gem.name = "couchbase-docstore"
8
+ gem.version = CouchbaseDocStore::VERSION
9
+ gem.authors = ["Jasdeep Jaitla"]
10
+ gem.email = ["jasdeep@scalabl3.com"]
11
+ gem.description = %q{A Convenient Wrapper for the Couchbase gem, uses Map gem and adds new functionality}
12
+ gem.summary = %q{You simply use the Couchbase gem, or you can use this wrapper that encapsulates the gem and adds some subjective conveniences. }
13
+ gem.homepage = "https://github.com/scalabl3/couchbase-docstore"
14
+
15
+ gem.add_dependency('couchbase-settings', '>= 0.1.0')
16
+ gem.add_dependency('couchbase', '>= 1.2.0.z.beta3')
17
+
18
+ gem.files = `git ls-files`.split($/)
19
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
20
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
21
+ gem.require_paths = ["lib"]
22
+ end
@@ -0,0 +1,190 @@
1
+ require 'couchbase'
2
+ require 'map'
3
+ require 'couchbase_settings'
4
+ require "couchbase_doc_store/version"
5
+
6
+ module CouchbaseDocStore
7
+
8
+ Rails.logger.debug(CouchbaseSetting.pm)
9
+
10
+ setting_hash = {}
11
+ if (CouchbaseSetting.respond_to?("servers") && CouchbaseSetting.servers && !CouchbaseSetting.servers.empty?)
12
+ setting_hash[:node_list] = CouchbaseSetting.servers
13
+ elsif CouchbaseSetting.respond_to?("server")
14
+
15
+ setting_hash[:hostname] = CouchbaseSetting.server
16
+ else
17
+ raise ArgumentError, "You didn't set a Couchbase Server in your /config/couchbase.yml file!"
18
+ end
19
+ setting_hash[:pool] = "default"
20
+ setting_hash[:bucket] = CouchbaseSetting.bucket
21
+ setting_hash[:port] = 8091
22
+
23
+ if (CouchbaseSetting.respond_to?("password") && CouchbaseSetting.password && !CouchbaseSetting.password.blank?)
24
+ setting_hash[:username] = CouchbaseSetting.bucket
25
+ setting_hash[:password] = CouchbaseSetting.password
26
+ end
27
+
28
+ CB = Couchbase.connect(setting_hash)
29
+
30
+ #### INSTANCE METHODS
31
+
32
+ # Check if a key/document exists
33
+ def document_exists?(key)
34
+ return nil unless key
35
+ CouchbaseDocStore.document_exists?(key)
36
+ end
37
+
38
+ # Initialize a document, if it doesn't exist, create it, if it exists, ignore the call
39
+ def initialize_document(key, value, args={})
40
+ return nil unless key
41
+ CouchbaseDocStore.initialize_document(key, value, args)
42
+ end
43
+
44
+ # Create a new document (Couchbase#add)
45
+ def create_document(key, value, args={})
46
+ return nil unless key
47
+ CouchbaseDocStore.create_document(key, value, args) # => if !quiet, Generates Couchbase::Error::KeyExists if key already exists
48
+ end
49
+
50
+ # Replace a new document (Couchbase#replace), throws Couchbase::Error:: if it doesn't exist
51
+ def replace_document(key, value, args = {})
52
+ return nil unless key
53
+ CouchbaseDocStore.replace_document(key, value, args)
54
+ end
55
+
56
+ #
57
+ def get_document(key, args = {})
58
+ return nil unless key
59
+ CouchbaseDocStore.get_document(key, args)
60
+ end
61
+
62
+ def get_documents(keys = [], args = {})
63
+ return nil unless keys || keys.empty?
64
+ CouchbaseDocStore.get_documents(keys, args)
65
+ end
66
+
67
+ def delete_document(key, args={})
68
+ return nil unless key
69
+ CouchbaseDocStore.delete_document(key, args)
70
+ end
71
+
72
+ # @param args :amount => Fixnum||Integer, increases by that
73
+ def increase_atomic_count(key, args={})
74
+ return nil unless key
75
+ CouchbaseDocStore.increase_atomic_count(key, args)
76
+ end
77
+
78
+ def decrease_atomic_count(key, args={})
79
+ return nil unless key
80
+ CouchbaseDocStore.decrease_atomic_count(key, args)
81
+ end
82
+
83
+ # preferred way is to use create/replace to make sure there are no collisions
84
+ def force_set_document(key, value, args={})
85
+ return nil unless key
86
+ CouchbaseDocStore.force_set_document(key, value, args)
87
+ end
88
+
89
+
90
+
91
+ # end Instance Methods
92
+ #####################################################################
93
+ #### CLASS METHODS
94
+
95
+ class << self
96
+
97
+ def delete_all_documents!
98
+ CB.flush
99
+ end
100
+
101
+ def document_exists?(key)
102
+ return nil unless key
103
+
104
+ # Save quiet setting
105
+ tmp = CB.quiet
106
+
107
+ # Set quiet to be sure
108
+ CB.quiet = true
109
+
110
+ doc = CB.get(key)
111
+
112
+ # Restore quiet setting
113
+ CB.quiet = tmp
114
+
115
+ !doc.nil?
116
+ end
117
+
118
+ def initialize_document(key, value, args={})
119
+ return nil unless key
120
+ CB.quiet = true
121
+ doc = CouchbaseDocStore.get_document( key )
122
+ (value.is_a?(Fixnum) || value.is_a?(Integer) ? CB.set( key, value ) : CB.add( key, value )) unless doc
123
+ end
124
+
125
+ def create_document(key, value, args={})
126
+ return nil unless key
127
+ CB.quiet = args[:quiet] || true
128
+ CB.add(key, value, args) # => if !quiet, Generates Couchbase::Error::KeyExists if key already exists
129
+ end
130
+
131
+ def replace_document(key, value, args = {})
132
+ return nil unless key
133
+ CB.quiet = args[:quiet] || true
134
+ CB.replace(key, value) # => if !quiet, Generates Couchbase::Error::NotFound if key doesn't exist
135
+ end
136
+
137
+ def get_document(key, args = {})
138
+ return nil unless key
139
+ CB.quiet = args[:quiet] || true
140
+ doc = CB.get(key, args)
141
+ doc.is_a?(Hash) ? Map.new(doc) : doc
142
+ end
143
+
144
+ def get_documents(keys = [], args = {})
145
+ return nil unless keys || keys.empty?
146
+ values = CB.get(keys, args)
147
+
148
+ if values.is_a? Hash
149
+ tmp = []
150
+ tmp[0] = values
151
+ values = tmp
152
+ end
153
+ # convert hashes to Map (subclass of Hash with *better* indifferent access)
154
+ values.each_with_index do |v, i|
155
+ values[i] = Map.new(v) if v.is_a? Hash
156
+ end
157
+
158
+ values
159
+ end
160
+
161
+ def delete_document(key, args={})
162
+ return nil unless key
163
+ CB.quiet = args[:quiet] || true
164
+ CB.delete(key)
165
+ end
166
+
167
+ def increase_atomic_count(key, args={} )
168
+ return nil unless key
169
+ CB.quiet = args[:quiet] || true
170
+ CB.incr(key, args[:amount] || 1)
171
+ end
172
+
173
+ def decrease_atomic_count(key, args={})
174
+ return nil unless key
175
+ CB.quiet = args[:quiet] || true
176
+ CB.decr(key, args[:amount] || 1)
177
+ end
178
+
179
+ # preferred way is to use create/replace instead of this to make sure there are no collisions
180
+ def force_set_document(key, value, args={})
181
+ return nil unless key
182
+ CB.quiet = args[:quiet] || true
183
+ CB.set(key, value, args)
184
+ end
185
+
186
+ end# end ClassMethods
187
+
188
+ #####################################################################
189
+
190
+ end
@@ -0,0 +1,3 @@
1
+ module CouchbaseDocStore
2
+ VERSION = "0.1.2"
3
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: couchbase-docstore
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -56,7 +56,10 @@ files:
56
56
  - LICENSE.txt
57
57
  - README.md
58
58
  - Rakefile
59
- homepage: ''
59
+ - couchbase_doc_store.gemspec
60
+ - lib/couchbase_doc_store.rb
61
+ - lib/couchbase_doc_store/version.rb
62
+ homepage: https://github.com/scalabl3/couchbase-docstore
60
63
  licenses: []
61
64
  post_install_message:
62
65
  rdoc_options: []