couchbase-jruby-client 0.1.0-java

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 (65) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +17 -0
  3. data/.ruby-version +1 -0
  4. data/Gemfile +4 -0
  5. data/LICENSE.txt +203 -0
  6. data/README.md +347 -0
  7. data/Rakefile +10 -0
  8. data/couchbase-jruby-client.gemspec +30 -0
  9. data/lib/couchbase/async/callback.rb +19 -0
  10. data/lib/couchbase/async/queue.rb +26 -0
  11. data/lib/couchbase/async.rb +139 -0
  12. data/lib/couchbase/bucket.rb +663 -0
  13. data/lib/couchbase/cluster.rb +105 -0
  14. data/lib/couchbase/constants.rb +12 -0
  15. data/lib/couchbase/error.rb +28 -0
  16. data/lib/couchbase/jruby/couchbase_client.rb +22 -0
  17. data/lib/couchbase/jruby/future.rb +8 -0
  18. data/lib/couchbase/operations/arithmetic.rb +301 -0
  19. data/lib/couchbase/operations/delete.rb +104 -0
  20. data/lib/couchbase/operations/get.rb +298 -0
  21. data/lib/couchbase/operations/stats.rb +16 -0
  22. data/lib/couchbase/operations/store.rb +468 -0
  23. data/lib/couchbase/operations/touch.rb +123 -0
  24. data/lib/couchbase/operations/utils.rb +49 -0
  25. data/lib/couchbase/operations.rb +23 -0
  26. data/lib/couchbase/result.rb +43 -0
  27. data/lib/couchbase/transcoder.rb +83 -0
  28. data/lib/couchbase/utils.rb +62 -0
  29. data/lib/couchbase/version.rb +3 -0
  30. data/lib/couchbase/view.rb +506 -0
  31. data/lib/couchbase/view_row.rb +272 -0
  32. data/lib/couchbase.rb +177 -0
  33. data/lib/jars/commons-codec-1.5.jar +0 -0
  34. data/lib/jars/couchbase-client-1.2.0-javadoc.jar +0 -0
  35. data/lib/jars/couchbase-client-1.2.0-sources.jar +0 -0
  36. data/lib/jars/couchbase-client-1.2.0.jar +0 -0
  37. data/lib/jars/httpcore-4.1.1.jar +0 -0
  38. data/lib/jars/httpcore-nio-4.1.1.jar +0 -0
  39. data/lib/jars/jettison-1.1.jar +0 -0
  40. data/lib/jars/netty-3.5.5.Final.jar +0 -0
  41. data/lib/jars/spymemcached-2.10.0-javadoc.jar +0 -0
  42. data/lib/jars/spymemcached-2.10.0-sources.jar +0 -0
  43. data/lib/jars/spymemcached-2.10.0.jar +0 -0
  44. data/test/profile/.gitignore +1 -0
  45. data/test/profile/Gemfile +6 -0
  46. data/test/profile/benchmark.rb +195 -0
  47. data/test/setup.rb +201 -0
  48. data/test/test_arithmetic.rb +177 -0
  49. data/test/test_async.rb +324 -0
  50. data/test/test_bucket.rb +213 -0
  51. data/test/test_cas.rb +78 -0
  52. data/test/test_couchbase.rb +29 -0
  53. data/test/test_couchbase_rails_cache_store.rb +341 -0
  54. data/test/test_delete.rb +125 -0
  55. data/test/test_errors.rb +82 -0
  56. data/test/test_format.rb +161 -0
  57. data/test/test_get.rb +417 -0
  58. data/test/test_stats.rb +57 -0
  59. data/test/test_store.rb +216 -0
  60. data/test/test_timer.rb +42 -0
  61. data/test/test_touch.rb +97 -0
  62. data/test/test_unlock.rb +119 -0
  63. data/test/test_utils.rb +58 -0
  64. data/test/test_version.rb +52 -0
  65. metadata +226 -0
@@ -0,0 +1,139 @@
1
+ require 'couchbase/async/callback'
2
+ require 'couchbase/async/queue'
3
+
4
+ module Couchbase
5
+ module Async
6
+
7
+ def async?
8
+ !!async
9
+ end
10
+
11
+ def async
12
+ Thread.current[:bucket_async] ||= @async
13
+ end
14
+
15
+ def async=(val)
16
+ Thread.current[:bucket_async] = val
17
+ end
18
+
19
+ def running?
20
+ !!running
21
+ end
22
+
23
+ def running
24
+ Thread.current[:bucket_running] ||= false
25
+ end
26
+
27
+ def running=(val)
28
+ Thread.current[:bucket_running] = val
29
+ end
30
+
31
+ def async_queue
32
+ Thread.current[:bucket_async_queue] ||= Couchbase::Async::Queue.new(self)
33
+ end
34
+
35
+ def end_async_queue
36
+ Thread.current[:bucket_async_queue] = nil
37
+ end
38
+
39
+ public
40
+
41
+ # Run the event loop.
42
+ #
43
+ # @since 1.0.0
44
+ #
45
+ # @param [Hash] options The options for operation for connection
46
+ # @option options [Fixnum] :send_threshold (0) if the internal command
47
+ # buffer will exceeds this value, then the library will start network
48
+ # interaction and block the current thread until all scheduled commands
49
+ # will be completed.
50
+ #
51
+ # @yieldparam [Bucket] bucket the bucket instance
52
+ #
53
+ # @example Use block to run the loop
54
+ # c = Couchbase.new
55
+ # c.run do
56
+ # c.get("foo") {|ret| puts ret.value}
57
+ # end
58
+ #
59
+ # @example Use lambda to run the loop
60
+ # c = Couchbase.new
61
+ # operations = lambda do |c|
62
+ # c.get("foo") {|ret| puts ret.value}
63
+ # end
64
+ # c.run(&operations)
65
+ #
66
+ # @example Use threshold to send out commands automatically
67
+ # c = Couchbase.connect
68
+ # sent = 0
69
+ # c.run(:send_threshold => 8192) do # 8Kb
70
+ # c.set("foo1", "x" * 100) {|r| sent += 1}
71
+ # # 128 bytes buffered, sent is 0 now
72
+ # c.set("foo2", "x" * 10000) {|r| sent += 1}
73
+ # # 10028 bytes added, sent is 2 now
74
+ # c.set("foo3", "x" * 100) {|r| sent += 1}
75
+ # end
76
+ # # all commands were executed and sent is 3 now
77
+ #
78
+ # @example Use {Couchbase::Bucket#run} without block for async connection
79
+ # c = Couchbase.new(:async => true)
80
+ # c.run # ensure that instance connected
81
+ # c.set("foo", "bar"){|r| puts r.cas}
82
+ # c.run
83
+ #
84
+ # @return [nil]
85
+ #
86
+ # @raise [Couchbase::Error::Connect] if connection closed (see {Bucket#reconnect})
87
+ #
88
+ def run(options = {})
89
+ do_async_setup(block_given?)
90
+ yield(self)
91
+ async_queue.join
92
+
93
+ # TODO: deal with exceptions
94
+ nil
95
+ ensure
96
+ do_async_ensure
97
+ end
98
+
99
+ def run_async(options = {})
100
+ do_async_setup(block_given?)
101
+ yield(self)
102
+ nil
103
+ ensure
104
+ do_async_ensure
105
+ end
106
+
107
+ private
108
+
109
+ def do_async_setup(block_given)
110
+ raise LocalJumpError.new('block required for async run') unless block_given
111
+ # TODO: check for connection
112
+ raise Error::Invalid.new('nested #run') if running?
113
+ # TOOD: deal with thresholds
114
+
115
+ self.async = true
116
+ self.running = true
117
+ end
118
+
119
+ def do_async_ensure
120
+ self.async = false
121
+ self.running = false
122
+ end_async_queue
123
+ end
124
+
125
+ def register_future(future, options, &block)
126
+ if async_queue
127
+ async_queue.add_future(future, options, &block)
128
+ else
129
+ register_callback(future, &block)
130
+ end
131
+ end
132
+
133
+ def register_callback(future, &block)
134
+ callback = Couchbase::Callback.new(:set, &block)
135
+ future.addListener(callback)
136
+ end
137
+
138
+ end
139
+ end