couchbase-jruby-client 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +17 -0
- data/.jrubyrc +722 -0
- data/.ruby-version +1 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +203 -0
- data/README.md +349 -0
- data/Rakefile +10 -0
- data/couchbase-jruby-client.gemspec +31 -0
- data/lib/couchbase/async/callback.rb +19 -0
- data/lib/couchbase/async/queue.rb +26 -0
- data/lib/couchbase/async.rb +140 -0
- data/lib/couchbase/bucket.rb +556 -0
- data/lib/couchbase/cluster.rb +105 -0
- data/lib/couchbase/constants.rb +12 -0
- data/lib/couchbase/design_doc.rb +61 -0
- data/lib/couchbase/error.rb +43 -0
- data/lib/couchbase/jruby/couchbase_client.rb +22 -0
- data/lib/couchbase/jruby/future.rb +8 -0
- data/lib/couchbase/operations/arithmetic.rb +301 -0
- data/lib/couchbase/operations/delete.rb +104 -0
- data/lib/couchbase/operations/design_docs.rb +99 -0
- data/lib/couchbase/operations/get.rb +282 -0
- data/lib/couchbase/operations/stats.rb +26 -0
- data/lib/couchbase/operations/store.rb +461 -0
- data/lib/couchbase/operations/touch.rb +136 -0
- data/lib/couchbase/operations/unlock.rb +192 -0
- data/lib/couchbase/operations/utils.rb +44 -0
- data/lib/couchbase/operations.rb +27 -0
- data/lib/couchbase/query.rb +73 -0
- data/lib/couchbase/result.rb +43 -0
- data/lib/couchbase/transcoder.rb +77 -0
- data/lib/couchbase/utils.rb +62 -0
- data/lib/couchbase/version.rb +3 -0
- data/lib/couchbase/view.rb +367 -0
- data/lib/couchbase/view_row.rb +193 -0
- data/lib/couchbase.rb +157 -0
- data/lib/jars/commons-codec-1.5.jar +0 -0
- data/lib/jars/couchbase-client-1.2.0-javadoc.jar +0 -0
- data/lib/jars/couchbase-client-1.2.0-sources.jar +0 -0
- data/lib/jars/couchbase-client-1.2.0.jar +0 -0
- data/lib/jars/httpcore-4.1.1.jar +0 -0
- data/lib/jars/httpcore-nio-4.1.1.jar +0 -0
- data/lib/jars/jettison-1.1.jar +0 -0
- data/lib/jars/netty-3.5.5.Final.jar +0 -0
- data/lib/jars/spymemcached-2.10.0-javadoc.jar +0 -0
- data/lib/jars/spymemcached-2.10.0-sources.jar +0 -0
- data/lib/jars/spymemcached-2.10.0.jar +0 -0
- data/test/profile/.gitignore +1 -0
- data/test/profile/.jrubyrc +722 -0
- data/test/profile/Gemfile +6 -0
- data/test/profile/benchmark.rb +168 -0
- data/test/profile/profile.rb +59 -0
- data/test/setup.rb +203 -0
- data/test/test_arithmetic.rb +177 -0
- data/test/test_async.rb +324 -0
- data/test/test_bucket.rb +213 -0
- data/test/test_cas.rb +79 -0
- data/test/test_couchbase.rb +29 -0
- data/test/test_couchbase_rails_cache_store.rb +341 -0
- data/test/test_delete.rb +125 -0
- data/test/test_design_docs.rb +72 -0
- data/test/test_errors.rb +82 -0
- data/test/test_format.rb +161 -0
- data/test/test_get.rb +417 -0
- data/test/test_query.rb +23 -0
- data/test/test_stats.rb +57 -0
- data/test/test_store.rb +213 -0
- data/test/test_timer.rb +43 -0
- data/test/test_touch.rb +97 -0
- data/test/test_unlock.rb +121 -0
- data/test/test_utils.rb +58 -0
- data/test/test_version.rb +53 -0
- data/test/test_view.rb +94 -0
- metadata +255 -0
data/lib/couchbase.rb
ADDED
@@ -0,0 +1,157 @@
|
|
1
|
+
|
2
|
+
unless RUBY_PLATFORM =~ /java/
|
3
|
+
error "This gem is only compatible with a java-based ruby environment like JRuby."
|
4
|
+
exit 255
|
5
|
+
end
|
6
|
+
|
7
|
+
require 'java'
|
8
|
+
require 'jars/commons-codec-1.5.jar'
|
9
|
+
require 'jars/couchbase-client-1.2.0.jar'
|
10
|
+
require 'jars/jettison-1.1.jar'
|
11
|
+
require 'jars/httpcore-4.1.1.jar'
|
12
|
+
require 'jars/netty-3.5.5.Final.jar'
|
13
|
+
require 'jars/spymemcached-2.10.0.jar'
|
14
|
+
require 'jars/httpcore-nio-4.1.1.jar'
|
15
|
+
require 'couchbase/version'
|
16
|
+
require 'uri'
|
17
|
+
require 'atomic'
|
18
|
+
require 'couchbase/transcoder'
|
19
|
+
require 'couchbase/async'
|
20
|
+
require 'couchbase/operations'
|
21
|
+
require 'couchbase/error'
|
22
|
+
require 'couchbase/constants'
|
23
|
+
require 'couchbase/utils'
|
24
|
+
require 'couchbase/bucket'
|
25
|
+
require 'couchbase/view_row'
|
26
|
+
require 'couchbase/view'
|
27
|
+
require 'couchbase/result'
|
28
|
+
require 'couchbase/cluster'
|
29
|
+
require 'couchbase/design_doc'
|
30
|
+
require 'couchbase/view'
|
31
|
+
require 'couchbase/query'
|
32
|
+
|
33
|
+
include Java
|
34
|
+
|
35
|
+
import Java::com.couchbase.client.CouchbaseClient;
|
36
|
+
|
37
|
+
at_exit do
|
38
|
+
Couchbase.disconnect
|
39
|
+
end
|
40
|
+
|
41
|
+
# Couchbase jruby client
|
42
|
+
module Couchbase
|
43
|
+
|
44
|
+
@@buckets = Atomic.new({})
|
45
|
+
|
46
|
+
class << self
|
47
|
+
|
48
|
+
# The method +connect+ initializes new Bucket instance with all arguments passed.
|
49
|
+
#
|
50
|
+
# @since 1.0.0
|
51
|
+
#
|
52
|
+
# @see Bucket#initialize
|
53
|
+
#
|
54
|
+
# @example Use default values for all options
|
55
|
+
# Couchbase.connect
|
56
|
+
#
|
57
|
+
# @example Establish connection with couchbase default pool and default bucket
|
58
|
+
# Couchbase.connect("http://localhost:8091/pools/default")
|
59
|
+
#
|
60
|
+
# @example Select custom bucket
|
61
|
+
# Couchbase.connect("http://localhost:8091/pools/default", :bucket => 'blog')
|
62
|
+
#
|
63
|
+
# @example Specify bucket credentials
|
64
|
+
# Couchbase.connect("http://localhost:8091/pools/default", :bucket => 'blog', :username => 'bucket', :password => 'secret')
|
65
|
+
#
|
66
|
+
# @example Use URL notation
|
67
|
+
# Couchbase.connect("http://bucket:secret@localhost:8091/pools/default/buckets/blog")
|
68
|
+
#
|
69
|
+
# @return [Bucket] connection instance
|
70
|
+
def connect(*options)
|
71
|
+
Bucket.new(*(options.flatten))
|
72
|
+
# disconnect
|
73
|
+
# @@bucket.update { |bucket| bucket ||= Bucket.new(*(options.flatten)) }
|
74
|
+
# @@bucket.value
|
75
|
+
end
|
76
|
+
alias :new :connect
|
77
|
+
|
78
|
+
# Default connection options
|
79
|
+
#
|
80
|
+
# @since 1.1.0
|
81
|
+
#
|
82
|
+
# @example Using {Couchbase#connection_options} to change the bucket
|
83
|
+
# Couchbase.connection_options = {:bucket => 'blog'}
|
84
|
+
# Couchbase.bucket.name #=> "blog"
|
85
|
+
#
|
86
|
+
# @return [Hash, String]
|
87
|
+
attr_accessor :connection_options
|
88
|
+
|
89
|
+
# The connection instance for current thread
|
90
|
+
#
|
91
|
+
# @since 1.1.0
|
92
|
+
#
|
93
|
+
# @see Couchbase.connection_options
|
94
|
+
#
|
95
|
+
# @example
|
96
|
+
# Couchbase.bucket.set("foo", "bar")
|
97
|
+
#
|
98
|
+
# @example Set connection options using Hash
|
99
|
+
# Couchbase.connection_options = {:node_list => ["example.com:8091"]}
|
100
|
+
# Couchbase.bucket("slot1").set("foo", "bar")
|
101
|
+
# Couchbase.bucket("slot1").bucket #=> "default"
|
102
|
+
# Couchbase.connection_options[:bucket] = "test"
|
103
|
+
# Couchbase.bucket("slot2").bucket #=> "test"
|
104
|
+
#
|
105
|
+
# @example Set connection options using URI
|
106
|
+
# Couchbase.connection_options = "http://example.com:8091/pools"
|
107
|
+
# Couchbase.bucket("slot1").set("foo", "bar")
|
108
|
+
# Couchbase.bucket("slot1").bucket #=> "default"
|
109
|
+
# Couchbase.connection_options = "http://example.com:8091/pools/buckets/test"
|
110
|
+
# Couchbase.bucket("slot2").bucket #=> "test"
|
111
|
+
#
|
112
|
+
# @example Use named slots to keep a connection
|
113
|
+
# Couchbase.connection_options = {
|
114
|
+
# :node_list => ["example.com", "example.org"],
|
115
|
+
# :bucket => "users"
|
116
|
+
# }
|
117
|
+
# Couchbase.bucket("users").set("john", {"balance" => 0})
|
118
|
+
# Couchbase.connection_options[:bucket] = "orders"
|
119
|
+
# Couchbase.bucket("other").set("john:1", {"products" => [42, 66]})
|
120
|
+
#
|
121
|
+
# @return [Bucket]
|
122
|
+
def bucket(name = nil)
|
123
|
+
name ||= case @connection_options
|
124
|
+
when Hash
|
125
|
+
@connection_options[:bucket]
|
126
|
+
when String
|
127
|
+
path = URI.parse(@connection_options).path
|
128
|
+
path[%r(^(/pools/([A-Za-z0-9_.-]+)(/buckets/([A-Za-z0-9_.-]+))?)?), 3] || "default"
|
129
|
+
else
|
130
|
+
"default"
|
131
|
+
end
|
132
|
+
@@buckets.update { |buckets| buckets[name] ||= connect(connection_options) }
|
133
|
+
@@buckets.value[name]
|
134
|
+
end
|
135
|
+
|
136
|
+
# Set a connection instance for current thread
|
137
|
+
#
|
138
|
+
# @since 1.1.0
|
139
|
+
#
|
140
|
+
# @return [Bucket]
|
141
|
+
def bucket=(connection)
|
142
|
+
name ||= @connection_options && @connection_options[:bucket] || "default"
|
143
|
+
@@buckets.update { |buckets| buckets[name] = connection }
|
144
|
+
@@buckets.value[name]
|
145
|
+
end
|
146
|
+
|
147
|
+
def connected?
|
148
|
+
!!@@buckets.value.empty?
|
149
|
+
end
|
150
|
+
|
151
|
+
def disconnect
|
152
|
+
@@buckets.value.each(&:disconnect) if connected?
|
153
|
+
@@buckets = Atomic.new({})
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1 @@
|
|
1
|
+
benchmark*.log
|