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.
Files changed (75) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +17 -0
  3. data/.jrubyrc +722 -0
  4. data/.ruby-version +1 -0
  5. data/Gemfile +4 -0
  6. data/LICENSE.txt +203 -0
  7. data/README.md +349 -0
  8. data/Rakefile +10 -0
  9. data/couchbase-jruby-client.gemspec +31 -0
  10. data/lib/couchbase/async/callback.rb +19 -0
  11. data/lib/couchbase/async/queue.rb +26 -0
  12. data/lib/couchbase/async.rb +140 -0
  13. data/lib/couchbase/bucket.rb +556 -0
  14. data/lib/couchbase/cluster.rb +105 -0
  15. data/lib/couchbase/constants.rb +12 -0
  16. data/lib/couchbase/design_doc.rb +61 -0
  17. data/lib/couchbase/error.rb +43 -0
  18. data/lib/couchbase/jruby/couchbase_client.rb +22 -0
  19. data/lib/couchbase/jruby/future.rb +8 -0
  20. data/lib/couchbase/operations/arithmetic.rb +301 -0
  21. data/lib/couchbase/operations/delete.rb +104 -0
  22. data/lib/couchbase/operations/design_docs.rb +99 -0
  23. data/lib/couchbase/operations/get.rb +282 -0
  24. data/lib/couchbase/operations/stats.rb +26 -0
  25. data/lib/couchbase/operations/store.rb +461 -0
  26. data/lib/couchbase/operations/touch.rb +136 -0
  27. data/lib/couchbase/operations/unlock.rb +192 -0
  28. data/lib/couchbase/operations/utils.rb +44 -0
  29. data/lib/couchbase/operations.rb +27 -0
  30. data/lib/couchbase/query.rb +73 -0
  31. data/lib/couchbase/result.rb +43 -0
  32. data/lib/couchbase/transcoder.rb +77 -0
  33. data/lib/couchbase/utils.rb +62 -0
  34. data/lib/couchbase/version.rb +3 -0
  35. data/lib/couchbase/view.rb +367 -0
  36. data/lib/couchbase/view_row.rb +193 -0
  37. data/lib/couchbase.rb +157 -0
  38. data/lib/jars/commons-codec-1.5.jar +0 -0
  39. data/lib/jars/couchbase-client-1.2.0-javadoc.jar +0 -0
  40. data/lib/jars/couchbase-client-1.2.0-sources.jar +0 -0
  41. data/lib/jars/couchbase-client-1.2.0.jar +0 -0
  42. data/lib/jars/httpcore-4.1.1.jar +0 -0
  43. data/lib/jars/httpcore-nio-4.1.1.jar +0 -0
  44. data/lib/jars/jettison-1.1.jar +0 -0
  45. data/lib/jars/netty-3.5.5.Final.jar +0 -0
  46. data/lib/jars/spymemcached-2.10.0-javadoc.jar +0 -0
  47. data/lib/jars/spymemcached-2.10.0-sources.jar +0 -0
  48. data/lib/jars/spymemcached-2.10.0.jar +0 -0
  49. data/test/profile/.gitignore +1 -0
  50. data/test/profile/.jrubyrc +722 -0
  51. data/test/profile/Gemfile +6 -0
  52. data/test/profile/benchmark.rb +168 -0
  53. data/test/profile/profile.rb +59 -0
  54. data/test/setup.rb +203 -0
  55. data/test/test_arithmetic.rb +177 -0
  56. data/test/test_async.rb +324 -0
  57. data/test/test_bucket.rb +213 -0
  58. data/test/test_cas.rb +79 -0
  59. data/test/test_couchbase.rb +29 -0
  60. data/test/test_couchbase_rails_cache_store.rb +341 -0
  61. data/test/test_delete.rb +125 -0
  62. data/test/test_design_docs.rb +72 -0
  63. data/test/test_errors.rb +82 -0
  64. data/test/test_format.rb +161 -0
  65. data/test/test_get.rb +417 -0
  66. data/test/test_query.rb +23 -0
  67. data/test/test_stats.rb +57 -0
  68. data/test/test_store.rb +213 -0
  69. data/test/test_timer.rb +43 -0
  70. data/test/test_touch.rb +97 -0
  71. data/test/test_unlock.rb +121 -0
  72. data/test/test_utils.rb +58 -0
  73. data/test/test_version.rb +53 -0
  74. data/test/test_view.rb +94 -0
  75. 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
@@ -0,0 +1 @@
1
+ benchmark*.log