jmoses-couchbase 1.3.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (91) hide show
  1. data/.gitignore +15 -0
  2. data/.travis.yml +22 -0
  3. data/.yardopts +5 -0
  4. data/CONTRIBUTING.markdown +75 -0
  5. data/Gemfile +4 -0
  6. data/LICENSE +201 -0
  7. data/Makefile +3 -0
  8. data/README.markdown +665 -0
  9. data/RELEASE_NOTES.markdown +819 -0
  10. data/Rakefile +20 -0
  11. data/couchbase.gemspec +49 -0
  12. data/examples/chat-em/Gemfile +7 -0
  13. data/examples/chat-em/README.markdown +45 -0
  14. data/examples/chat-em/server.rb +82 -0
  15. data/examples/chat-goliath-grape/Gemfile +5 -0
  16. data/examples/chat-goliath-grape/README.markdown +50 -0
  17. data/examples/chat-goliath-grape/app.rb +67 -0
  18. data/examples/chat-goliath-grape/config/app.rb +20 -0
  19. data/examples/transcoders/Gemfile +3 -0
  20. data/examples/transcoders/README.markdown +59 -0
  21. data/examples/transcoders/cb-zcat +40 -0
  22. data/examples/transcoders/cb-zcp +45 -0
  23. data/examples/transcoders/gzip_transcoder.rb +49 -0
  24. data/examples/transcoders/options.rb +54 -0
  25. data/ext/couchbase_ext/.gitignore +4 -0
  26. data/ext/couchbase_ext/arguments.c +956 -0
  27. data/ext/couchbase_ext/arithmetic.c +316 -0
  28. data/ext/couchbase_ext/bucket.c +1373 -0
  29. data/ext/couchbase_ext/context.c +65 -0
  30. data/ext/couchbase_ext/couchbase_ext.c +1364 -0
  31. data/ext/couchbase_ext/couchbase_ext.h +644 -0
  32. data/ext/couchbase_ext/delete.c +163 -0
  33. data/ext/couchbase_ext/eventmachine_plugin.c +452 -0
  34. data/ext/couchbase_ext/extconf.rb +169 -0
  35. data/ext/couchbase_ext/get.c +316 -0
  36. data/ext/couchbase_ext/gethrtime.c +129 -0
  37. data/ext/couchbase_ext/http.c +432 -0
  38. data/ext/couchbase_ext/multithread_plugin.c +1090 -0
  39. data/ext/couchbase_ext/observe.c +171 -0
  40. data/ext/couchbase_ext/plugin_common.c +171 -0
  41. data/ext/couchbase_ext/result.c +129 -0
  42. data/ext/couchbase_ext/stats.c +163 -0
  43. data/ext/couchbase_ext/store.c +542 -0
  44. data/ext/couchbase_ext/timer.c +192 -0
  45. data/ext/couchbase_ext/touch.c +186 -0
  46. data/ext/couchbase_ext/unlock.c +176 -0
  47. data/ext/couchbase_ext/utils.c +551 -0
  48. data/ext/couchbase_ext/version.c +142 -0
  49. data/lib/action_dispatch/middleware/session/couchbase_store.rb +38 -0
  50. data/lib/active_support/cache/couchbase_store.rb +430 -0
  51. data/lib/couchbase.rb +155 -0
  52. data/lib/couchbase/bucket.rb +457 -0
  53. data/lib/couchbase/cluster.rb +119 -0
  54. data/lib/couchbase/connection_pool.rb +58 -0
  55. data/lib/couchbase/constants.rb +12 -0
  56. data/lib/couchbase/result.rb +26 -0
  57. data/lib/couchbase/transcoder.rb +120 -0
  58. data/lib/couchbase/utils.rb +62 -0
  59. data/lib/couchbase/version.rb +21 -0
  60. data/lib/couchbase/view.rb +506 -0
  61. data/lib/couchbase/view_row.rb +272 -0
  62. data/lib/ext/multi_json_fix.rb +56 -0
  63. data/lib/rack/session/couchbase.rb +108 -0
  64. data/tasks/benchmark.rake +6 -0
  65. data/tasks/compile.rake +160 -0
  66. data/tasks/test.rake +100 -0
  67. data/tasks/util.rake +21 -0
  68. data/test/profile/.gitignore +1 -0
  69. data/test/profile/Gemfile +6 -0
  70. data/test/profile/benchmark.rb +195 -0
  71. data/test/setup.rb +178 -0
  72. data/test/test_arithmetic.rb +185 -0
  73. data/test/test_async.rb +316 -0
  74. data/test/test_bucket.rb +276 -0
  75. data/test/test_cas.rb +235 -0
  76. data/test/test_couchbase.rb +77 -0
  77. data/test/test_couchbase_connection_pool.rb +77 -0
  78. data/test/test_couchbase_rails_cache_store.rb +361 -0
  79. data/test/test_delete.rb +120 -0
  80. data/test/test_errors.rb +82 -0
  81. data/test/test_eventmachine.rb +70 -0
  82. data/test/test_format.rb +164 -0
  83. data/test/test_get.rb +407 -0
  84. data/test/test_stats.rb +57 -0
  85. data/test/test_store.rb +216 -0
  86. data/test/test_timer.rb +42 -0
  87. data/test/test_touch.rb +97 -0
  88. data/test/test_unlock.rb +119 -0
  89. data/test/test_utils.rb +58 -0
  90. data/test/test_version.rb +52 -0
  91. metadata +353 -0
@@ -0,0 +1,65 @@
1
+ /* vim: ft=c et ts=8 sts=4 sw=4 cino=
2
+ *
3
+ * Copyright 2011, 2012 Couchbase, Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ #include "couchbase_ext.h"
19
+
20
+ static void
21
+ cb_context_mark(void *p, struct cb_bucket_st* bucket)
22
+ {
23
+ struct cb_context_st *ctx = p;
24
+ rb_gc_mark(ctx->proc);
25
+ rb_gc_mark(ctx->rv);
26
+ rb_gc_mark(ctx->exception);
27
+ rb_gc_mark(ctx->observe_options);
28
+ rb_gc_mark(ctx->transcoder);
29
+ rb_gc_mark(ctx->transcoder_opts);
30
+ rb_gc_mark(ctx->operation);
31
+ rb_gc_mark(ctx->headers_val);
32
+ (void)bucket;
33
+ }
34
+
35
+ struct cb_context_st *
36
+ cb_context_alloc(struct cb_bucket_st* bucket)
37
+ {
38
+ struct cb_context_st *ctx = calloc(1, sizeof(*ctx));
39
+ if (ctx == NULL) {
40
+ rb_raise(cb_eClientNoMemoryError, "failed to allocate memory for context");
41
+ }
42
+ cb_gc_protect_ptr(bucket, ctx, cb_context_mark);
43
+ ctx->bucket = bucket;
44
+ ctx->exception = Qnil;
45
+ return ctx;
46
+ }
47
+
48
+ struct cb_context_st *
49
+ cb_context_alloc_common(struct cb_bucket_st *bucket, VALUE proc, size_t nqueries)
50
+ {
51
+ struct cb_context_st *ctx = cb_context_alloc(bucket);
52
+ ctx->proc = proc;
53
+ ctx->nqueries = nqueries;
54
+ if (!bucket->async) {
55
+ ctx->rv = rb_hash_new();
56
+ }
57
+ return ctx;
58
+ }
59
+
60
+ void
61
+ cb_context_free(struct cb_context_st *ctx)
62
+ {
63
+ cb_gc_unprotect_ptr(ctx->bucket, ctx);
64
+ free(ctx);
65
+ }
@@ -0,0 +1,1364 @@
1
+ /* vim: ft=c et ts=8 sts=4 sw=4 cino=
2
+ *
3
+ * Copyright 2011, 2012 Couchbase, Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+
19
+ #include "couchbase_ext.h"
20
+
21
+ /* Classes */
22
+ VALUE cb_cBucket;
23
+ VALUE cb_cCouchRequest;
24
+ VALUE cb_cResult;
25
+ VALUE cb_cTimer;
26
+
27
+ /* Modules */
28
+ VALUE cb_mCouchbase;
29
+ VALUE cb_mError;
30
+ VALUE cb_mTranscoder;
31
+ VALUE cb_mDocument;
32
+ VALUE cb_mPlain;
33
+ VALUE cb_mMarshal;
34
+ VALUE cb_mURI;
35
+ VALUE em_m;
36
+
37
+ /* Symbols */
38
+ ID cb_sym_add;
39
+ ID cb_sym_all;
40
+ ID cb_sym_append;
41
+ ID cb_sym_assemble_hash;
42
+ ID cb_sym_async;
43
+ ID cb_sym_body;
44
+ ID cb_sym_bucket;
45
+ ID cb_sym_cas;
46
+ ID cb_sym_chunked;
47
+ ID cb_sym_cluster;
48
+ ID cb_sym_connect;
49
+ ID cb_sym_content_type;
50
+ ID cb_sym_create;
51
+ ID cb_sym_decrement;
52
+ ID cb_sym_default;
53
+ ID cb_sym_default_arithmetic_init;
54
+ ID cb_sym_default_flags;
55
+ ID cb_sym_default_format;
56
+ ID cb_sym_default_observe_timeout;
57
+ ID cb_sym_default_ttl;
58
+ ID cb_sym_delete;
59
+ ID cb_sym_delta;
60
+ ID cb_sym_development;
61
+ ID cb_sym_document;
62
+ ID cb_sym_engine;
63
+ ID cb_sym_environment;
64
+ ID cb_sym_eventmachine;
65
+ ID cb_sym_extended;
66
+ ID cb_sym_first;
67
+ ID cb_sym_flags;
68
+ ID cb_sym_forced;
69
+ ID cb_sym_format;
70
+ ID cb_sym_found;
71
+ ID cb_sym_get;
72
+ ID cb_sym_hostname;
73
+ ID cb_sym_http_request;
74
+ ID cb_sym_increment;
75
+ ID cb_sym_initial;
76
+ ID cb_sym_iocp;
77
+ ID cb_sym_key_prefix;
78
+ ID cb_sym_libev;
79
+ ID cb_sym_libevent;
80
+ ID cb_sym_lock;
81
+ ID cb_sym_management;
82
+ ID cb_sym_marshal;
83
+ ID cb_sym_method;
84
+ ID cb_sym_node_list;
85
+ ID cb_sym_not_found;
86
+ ID cb_sym_num_replicas;
87
+ ID cb_sym_observe;
88
+ ID cb_sym_password;
89
+ ID cb_sym_periodic;
90
+ ID cb_sym_persisted;
91
+ ID cb_sym_plain;
92
+ ID cb_sym_pool;
93
+ ID cb_sym_port;
94
+ ID cb_sym_post;
95
+ ID cb_sym_prepend;
96
+ ID cb_sym_production;
97
+ ID cb_sym_put;
98
+ ID cb_sym_quiet;
99
+ ID cb_sym_replace;
100
+ ID cb_sym_replica;
101
+ ID cb_sym_select;
102
+ ID cb_sym_send_threshold;
103
+ ID cb_sym_set;
104
+ ID cb_sym_stats;
105
+ ID cb_sym_timeout;
106
+ ID cb_sym_touch;
107
+ ID cb_sym_transcoder;
108
+ ID cb_sym_ttl;
109
+ ID cb_sym_type;
110
+ ID cb_sym_unlock;
111
+ ID cb_sym_username;
112
+ ID cb_sym_version;
113
+ ID cb_sym_view;
114
+ ID cb_id_add_shutdown_hook;
115
+ ID cb_id_arity;
116
+ ID cb_id_call;
117
+ ID cb_id_create_timer;
118
+ ID cb_id_delete;
119
+ ID cb_id_dump;
120
+ ID cb_id_dup;
121
+ ID cb_id_flatten_bang;
122
+ ID cb_id_has_key_p;
123
+ ID cb_id_host;
124
+ ID cb_id_iv_body;
125
+ ID cb_id_iv_cas;
126
+ ID cb_id_iv_completed;
127
+ ID cb_id_iv_error;
128
+ ID cb_id_iv_flags;
129
+ ID cb_id_iv_from_master;
130
+ ID cb_id_iv_headers;
131
+ ID cb_id_iv_inner_exception;
132
+ ID cb_id_iv_key;
133
+ ID cb_id_iv_node;
134
+ ID cb_id_iv_operation;
135
+ ID cb_id_iv_status;
136
+ ID cb_id_iv_time_to_persist;
137
+ ID cb_id_iv_time_to_replicate;
138
+ ID cb_id_iv_value;
139
+ ID cb_id_load;
140
+ ID cb_id_match;
141
+ ID cb_id_next_tick;
142
+ ID cb_id_observe_and_wait;
143
+ ID cb_id_parse;
144
+ ID cb_id_parse_body_bang;
145
+ ID cb_id_password;
146
+ ID cb_id_path;
147
+ ID cb_id_port;
148
+ ID cb_id_scheme;
149
+ ID cb_id_sprintf;
150
+ ID cb_id_to_s;
151
+ ID cb_id_user;
152
+ ID cb_id_verify_observe_options;
153
+
154
+ /* Errors */
155
+ VALUE cb_eBaseError;
156
+ VALUE cb_eValueFormatError;
157
+ VALUE cb_eHTTPError;
158
+
159
+ /* LCB_SUCCESS = 0x00 */
160
+ /* LCB_AUTH_CONTINUE = 0x01 */
161
+ VALUE cb_eAuthError; /* LCB_AUTH_ERROR = 0x02 */
162
+ VALUE cb_eDeltaBadvalError; /* LCB_DELTA_BADVAL = 0x03 */
163
+ VALUE cb_eTooBigError; /* LCB_E2BIG = 0x04 */
164
+ VALUE cb_eBusyError; /* LCB_EBUSY = 0x05 */
165
+ VALUE cb_eInternalError; /* LCB_EINTERNAL = 0x06 */
166
+ VALUE cb_eInvalidError; /* LCB_EINVAL = 0x07 */
167
+ VALUE cb_eNoMemoryError; /* LCB_ENOMEM = 0x08 */
168
+ VALUE cb_eRangeError; /* LCB_ERANGE = 0x09 */
169
+ VALUE cb_eLibcouchbaseError; /* LCB_ERROR = 0x0a */
170
+ VALUE cb_eTmpFailError; /* LCB_ETMPFAIL = 0x0b */
171
+ VALUE cb_eKeyExistsError; /* LCB_KEY_EEXISTS = 0x0c */
172
+ VALUE cb_eNotFoundError; /* LCB_KEY_ENOENT = 0x0d */
173
+ VALUE cb_eDlopenFailedError; /* LCB_DLOPEN_FAILED = 0x0e */
174
+ VALUE cb_eDlsymFailedError; /* LCB_DLSYM_FAILED = 0x0f */
175
+ VALUE cb_eNetworkError; /* LCB_NETWORK_ERROR = 0x10 */
176
+ VALUE cb_eNotMyVbucketError; /* LCB_NOT_MY_VBUCKET = 0x11 */
177
+ VALUE cb_eNotStoredError; /* LCB_NOT_STORED = 0x12 */
178
+ VALUE cb_eNotSupportedError; /* LCB_NOT_SUPPORTED = 0x13 */
179
+ VALUE cb_eUnknownCommandError; /* LCB_UNKNOWN_COMMAND = 0x14 */
180
+ VALUE cb_eUnknownHostError; /* LCB_UNKNOWN_HOST = 0x15 */
181
+ VALUE cb_eProtocolError; /* LCB_PROTOCOL_ERROR = 0x16 */
182
+ VALUE cb_eTimeoutError; /* LCB_ETIMEDOUT = 0x17 */
183
+ VALUE cb_eConnectError; /* LCB_CONNECT_ERROR = 0x18 */
184
+ VALUE cb_eBucketNotFoundError; /* LCB_BUCKET_ENOENT = 0x19 */
185
+ VALUE cb_eClientNoMemoryError; /* LCB_CLIENT_ENOMEM = 0x1a */
186
+ VALUE cb_eClientTmpFailError; /* LCB_CLIENT_ETMPFAIL = 0x1b */
187
+ VALUE cb_eBadHandleError; /* LCB_EBADHANDLE = 0x1c */
188
+ VALUE cb_eServerBug; /* LCB_SERVER_BUG = 0x1d */
189
+ VALUE cb_ePluginVersionMismatch; /* LCB_PLUGIN_VERSION_MISMATCH = 0x1e */
190
+ VALUE cb_eInvalidHostFormat; /* LCB_INVALID_HOST_FORMAT = 0x1f */
191
+ VALUE cb_eInvalidChar; /* LCB_INVALID_CHAR = 0x20 */
192
+ VALUE cb_eDurabilityTooMany; /* LCB_DURABILITY_ETOOMANY = 0x21 */
193
+ VALUE cb_eDuplicateCommands; /* LCB_DUPLICATE_COMMANDS = 0x22 */
194
+ VALUE cb_eNoMatchingServer; /* LCB_NO_MATCHING_SERVER = 0x23 */
195
+ VALUE cb_eBadEnvironment; /* LCB_BAD_ENVIRONMENT = 0x24 */
196
+ VALUE cb_eBusy; /* LCB_BUSY = 0x25 */
197
+ VALUE cb_eInvalidUsername; /* LCB_INVALID_USERNAME = 0x26 */
198
+
199
+ /* Default Strings */
200
+ VALUE cb_vStrDefault;
201
+ VALUE cb_vStrEmpty;
202
+ VALUE cb_vStrLocalhost;
203
+
204
+ static VALUE
205
+ cb_intern_string(VALUE ar, const char *str)
206
+ {
207
+ VALUE tmp = STR_NEW_CSTR(str);
208
+ rb_str_freeze(tmp);
209
+ rb_ary_push(ar, tmp);
210
+ return tmp;
211
+ }
212
+
213
+ static VALUE
214
+ cb_libcouchbase_version(VALUE self)
215
+ {
216
+ const char *ver = lcb_get_version(NULL);
217
+ (void)self;
218
+ return STR_NEW_CSTR(ver);
219
+ }
220
+
221
+ /* Ruby Extension initializer */
222
+ void
223
+ Init_couchbase_ext(void)
224
+ {
225
+ VALUE interned;
226
+
227
+ /* just a holder for EventMachine module */
228
+ em_m = 0;
229
+
230
+ cb_mURI = rb_const_get(rb_cObject, rb_intern("URI"));
231
+ cb_mCouchbase = rb_define_module("Couchbase");
232
+ /* Document-method: libcouchbase_version
233
+ *
234
+ * @since 1.3.3
235
+ *
236
+ * Version of the libcouchbase library currently loaded
237
+ * @return [String]
238
+ */
239
+ rb_define_singleton_method(cb_mCouchbase, "libcouchbase_version", cb_libcouchbase_version, 0);
240
+
241
+ cb_mTranscoder = rb_const_get(cb_mCouchbase, rb_intern("Transcoder"));
242
+ cb_mDocument = rb_const_get(cb_mTranscoder, rb_intern("Document"));
243
+ cb_mMarshal = rb_const_get(cb_mTranscoder, rb_intern("Marshal"));
244
+ cb_mPlain = rb_const_get(cb_mTranscoder, rb_intern("Plain"));
245
+
246
+ cb_mError = rb_define_module_under(cb_mCouchbase, "Error");
247
+ /* Document-class: Couchbase::Error::Base
248
+ * The base error class
249
+ *
250
+ * @since 1.0.0
251
+ */
252
+ cb_eBaseError = rb_define_class_under(cb_mError, "Base", rb_eStandardError);
253
+ /* Document-class: Couchbase::Error::Auth
254
+ * Authentication error
255
+ *
256
+ * You provided an invalid username/password combination.
257
+ *
258
+ * @since 1.0.0
259
+ */
260
+ cb_eAuthError = rb_define_class_under(cb_mError, "Auth", cb_eBaseError);
261
+ /* Document-class: Couchbase::Error::BucketNotFound
262
+ * Bucket not found
263
+ *
264
+ * The requested bucket not found in the cluster
265
+ *
266
+ * @since 1.0.0
267
+ */
268
+ cb_eBucketNotFoundError = rb_define_class_under(cb_mError, "BucketNotFound", cb_eBaseError);
269
+ /* Document-class: Couchbase::Error::Busy
270
+ * The cluster is too busy
271
+ *
272
+ * The server is too busy to handle your request right now.
273
+ * please back off and try again at a later time.
274
+ *
275
+ * @since 1.0.0
276
+ */
277
+ cb_eBusyError = rb_define_class_under(cb_mError, "Busy", cb_eBaseError);
278
+ /* Document-class: Couchbase::Error::DeltaBadval
279
+ * The given value is not a number
280
+ *
281
+ * @since 1.0.0
282
+ */
283
+ cb_eDeltaBadvalError = rb_define_class_under(cb_mError, "DeltaBadval", cb_eBaseError);
284
+ /* Document-class: Couchbase::Error::Internal
285
+ * Internal error
286
+ *
287
+ * Internal error inside the library. You would have
288
+ * to destroy the instance and create a new one to recover.
289
+ *
290
+ * @since 1.0.0
291
+ */
292
+ cb_eInternalError = rb_define_class_under(cb_mError, "Internal", cb_eBaseError);
293
+ /* Document-class: Couchbase::Error::Invalid
294
+ * Invalid arguments
295
+ *
296
+ * @since 1.0.0
297
+ */
298
+ cb_eInvalidError = rb_define_class_under(cb_mError, "Invalid", cb_eBaseError);
299
+ /* Document-class: Couchbase::Error::KeyExists
300
+ * Key already exists
301
+ *
302
+ * The key already exists (with another CAS value)
303
+ *
304
+ * @since 1.0.0
305
+ */
306
+ cb_eKeyExistsError = rb_define_class_under(cb_mError, "KeyExists", cb_eBaseError);
307
+ /* Document-class: Couchbase::Error::Libcouchbase
308
+ * Generic error
309
+ *
310
+ * @since 1.0.0
311
+ */
312
+ cb_eLibcouchbaseError = rb_define_class_under(cb_mError, "Libcouchbase", cb_eBaseError);
313
+ /* Document-class: Couchbase::Error::Network
314
+ * Network error
315
+ *
316
+ * A network related problem occured (name lookup, read/write/connect
317
+ * etc)
318
+ *
319
+ * @since 1.0.0
320
+ */
321
+ cb_eNetworkError = rb_define_class_under(cb_mError, "Network", cb_eBaseError);
322
+ /* Document-class: Couchbase::Error::NoMemory
323
+ * Out of memory error (on Server)
324
+ *
325
+ * @since 1.0.0
326
+ */
327
+ cb_eNoMemoryError = rb_define_class_under(cb_mError, "NoMemory", cb_eBaseError);
328
+ /* Document-class: Couchbase::Error::ClientNoMemory
329
+ * Out of memory error (on Client)
330
+ *
331
+ * @since 1.2.0.dp6
332
+ */
333
+ cb_eClientNoMemoryError = rb_define_class_under(cb_mError, "ClientNoMemory", cb_eBaseError);
334
+ /* Document-class: Couchbase::Error::NotFound
335
+ * No such key
336
+ *
337
+ * @since 1.0.0
338
+ */
339
+ cb_eNotFoundError = rb_define_class_under(cb_mError, "NotFound", cb_eBaseError);
340
+ /* Document-class: Couchbase::Error::NotMyVbucket
341
+ * The vbucket is not located on this server
342
+ *
343
+ * The server who received the request is not responsible for the
344
+ * object anymore. (This happens during changes in the cluster
345
+ * topology)
346
+ *
347
+ * @since 1.0.0
348
+ */
349
+ cb_eNotMyVbucketError = rb_define_class_under(cb_mError, "NotMyVbucket", cb_eBaseError);
350
+ /* Document-class: Couchbase::Error::NotStored
351
+ * Not stored
352
+ *
353
+ * The object was not stored on the server
354
+ *
355
+ * @since 1.0.0
356
+ */
357
+ cb_eNotStoredError = rb_define_class_under(cb_mError, "NotStored", cb_eBaseError);
358
+ /* Document-class: Couchbase::Error::NotSupported
359
+ * Not supported
360
+ *
361
+ * The server doesn't support the requested command. This error differs
362
+ * from {Couchbase::Error::UnknownCommand} by that the server knows
363
+ * about the command, but for some reason decided to not support it.
364
+ *
365
+ * @since 1.0.0
366
+ */
367
+ cb_eNotSupportedError = rb_define_class_under(cb_mError, "NotSupported", cb_eBaseError);
368
+ /* Document-class: Couchbase::Error::Range
369
+ * Invalid range
370
+ *
371
+ * An invalid range specified
372
+ *
373
+ * @since 1.0.0
374
+ */
375
+ cb_eRangeError = rb_define_class_under(cb_mError, "Range", cb_eBaseError);
376
+ /* Document-class: Couchbase::Error::TemporaryFail
377
+ * Temporary failure
378
+ *
379
+ * The server tried to perform the requested operation, but failed
380
+ * due to a temporary constraint. Retrying the operation may work.
381
+ *
382
+ * @since 1.0.0
383
+ */
384
+ cb_eTmpFailError = rb_define_class_under(cb_mError, "TemporaryFail", cb_eBaseError);
385
+ /* Document-class: Couchbase::Error::ClientTemporaryFail
386
+ * Temporary failure (on Client)
387
+ *
388
+ * The client encountered a temporary error (retry might resolve
389
+ * the problem)
390
+ *
391
+ * @since 1.2.0
392
+ */
393
+ cb_eClientTmpFailError = rb_define_class_under(cb_mError, "ClientTemporaryFail", cb_eBaseError);
394
+ /* Document-class: Couchbase::Error::TooBig
395
+ * Object too big
396
+ *
397
+ * The sever reported that this object is too big
398
+ *
399
+ * @since 1.0.0
400
+ */
401
+ cb_eTooBigError = rb_define_class_under(cb_mError, "TooBig", cb_eBaseError);
402
+ /* Document-class: Couchbase::Error::UnknownCommand
403
+ * Unknown command
404
+ *
405
+ * The server doesn't know what that command is.
406
+ *
407
+ * @since 1.0.0
408
+ */
409
+ cb_eUnknownCommandError = rb_define_class_under(cb_mError, "UnknownCommand", cb_eBaseError);
410
+ /* Document-class: Couchbase::Error::UnknownHost
411
+ * Unknown host
412
+ *
413
+ * The server failed to resolve the requested hostname
414
+ *
415
+ * @since 1.0.0
416
+ */
417
+ cb_eUnknownHostError = rb_define_class_under(cb_mError, "UnknownHost", cb_eBaseError);
418
+ /* Document-class: Couchbase::Error::ValueFormat
419
+ * Failed to decode or encode value
420
+ *
421
+ * @since 1.0.0
422
+ */
423
+ cb_eValueFormatError = rb_define_class_under(cb_mError, "ValueFormat", cb_eBaseError);
424
+ /* Document-class: Couchbase::Error::Protocol
425
+ * Protocol error
426
+ *
427
+ * There is something wrong with the datastream received from
428
+ * the server
429
+ *
430
+ * @since 1.0.0
431
+ */
432
+ cb_eProtocolError = rb_define_class_under(cb_mError, "Protocol", cb_eBaseError);
433
+ /* Document-class: Couchbase::Error::Timeout
434
+ * Timeout error
435
+ *
436
+ * The operation timed out
437
+ *
438
+ * @since 1.1.0
439
+ */
440
+ cb_eTimeoutError = rb_define_class_under(cb_mError, "Timeout", cb_eBaseError);
441
+ /* Document-class: Couchbase::Error::Connect
442
+ * Connect error
443
+ *
444
+ * @since 1.1.0
445
+ */
446
+ cb_eConnectError = rb_define_class_under(cb_mError, "Connect", cb_eBaseError);
447
+ /* Document-class: Couchbase::Error::BadHandle
448
+ * Invalid handle type.
449
+ *
450
+ * The requested operation isn't allowed for given type.
451
+ *
452
+ * @since 1.2.0
453
+ */
454
+ cb_eBadHandleError = rb_define_class_under(cb_mError, "BadHandle", cb_eBaseError);
455
+
456
+ /* Document-class: Couchbase::Error::DlopenFailed
457
+ * dlopen() failed
458
+ *
459
+ * Failed to open shared object
460
+ *
461
+ * @since 1.2.0
462
+ */
463
+ cb_eDlopenFailedError = rb_define_class_under(cb_mError, "DlopenFailed", cb_eBaseError);
464
+
465
+ /* Document-class: Couchbase::Error::DlsymFailed
466
+ * dlsym() failed
467
+ *
468
+ * Failed to locate the requested symbol in the shared object
469
+ *
470
+ * @since 1.2.0
471
+ */
472
+ cb_eDlsymFailedError = rb_define_class_under(cb_mError, "DlsymFailed", cb_eBaseError);
473
+
474
+ /* Document-class: Couchbase::Error::ServerBug
475
+ * Server Bug
476
+ *
477
+ * Unexpected usage of the server protocol, like unexpected
478
+ * response. If you've received this error code, please record your
479
+ * steps and file the issue at:
480
+ *
481
+ * http://www.couchbase.com/issues/browse/MB
482
+ *
483
+ * @since 1.3.3
484
+ */
485
+ cb_eServerBug = rb_define_class_under(cb_mError, "ServerBug", cb_eBaseError);
486
+
487
+ /* Document-class: Couchbase::Error::PluginVersionMismatch
488
+ * Plugin Version Mismatch
489
+ *
490
+ * Libcouchbase cannot load the plugin because of version mismatch
491
+ *
492
+ * @since 1.3.3
493
+ */
494
+ cb_ePluginVersionMismatch = rb_define_class_under(cb_mError, "PluginVersionMismatch", cb_eBaseError);
495
+
496
+ /* Document-class: Couchbase::Error::InvalidHostFormat
497
+ * Invalid Host Format
498
+ *
499
+ * The bootstrap hosts list use an invalid/unsupported format
500
+ *
501
+ * @since 1.3.3
502
+ */
503
+ cb_eInvalidHostFormat = rb_define_class_under(cb_mError, "InvalidHostFormat", cb_eBaseError);
504
+
505
+ /* Document-class: Couchbase::Error::InvalidChar
506
+ * Invalid Character
507
+ *
508
+ * Invalid character used in the path component of an URL
509
+ *
510
+ * @since 1.3.3
511
+ */
512
+ cb_eInvalidChar = rb_define_class_under(cb_mError, "InvalidChar", cb_eBaseError);
513
+
514
+ /* Document-class: Couchbase::Error::DurabilityTooMany
515
+ * Too Many Nodes
516
+ *
517
+ * Too many nodes were requested for the observe criteria
518
+ *
519
+ * @since 1.3.3
520
+ */
521
+ cb_eDurabilityTooMany = rb_define_class_under(cb_mError, "DurabilityTooMany", cb_eBaseError);
522
+
523
+ /* Document-class: Couchbase::Error::DuplicateCommands
524
+ * Duplicate Commands
525
+ *
526
+ * The same key was passed multiple times in a command list
527
+ *
528
+ * @since 1.3.3
529
+ */
530
+ cb_eDuplicateCommands = rb_define_class_under(cb_mError, "DuplicateCommands", cb_eBaseError);
531
+
532
+ /* Document-class: Couchbase::Error::NoMatchingServer
533
+ * No Matching Server
534
+ *
535
+ * The config says that there is no server yet at that
536
+ * position (-1 in the cluster topology map)
537
+ *
538
+ * @since 1.3.3
539
+ */
540
+ cb_eNoMatchingServer = rb_define_class_under(cb_mError, "NoMatchingServer", cb_eBaseError);
541
+
542
+ /* Document-class: Couchbase::Error::BadEnvironment
543
+ * Busy
544
+ *
545
+ * An operation has not yet completed
546
+ *
547
+ * @since 1.3.3
548
+ */
549
+ cb_eBadEnvironment = rb_define_class_under(cb_mError, "BadEnvironment", cb_eBaseError);
550
+
551
+ /* Document-class: Couchbase::Error::Busy
552
+ * Invalid Character
553
+ *
554
+ * Invalid character used in the path component of an URL
555
+ *
556
+ * @since 1.3.3
557
+ */
558
+ cb_eBusy = rb_define_class_under(cb_mError, "Busy", cb_eBaseError);
559
+
560
+ /* Document-class: Couchbase::Error::InvalidUsername
561
+ * Invalid Username
562
+ *
563
+ * Administrator account must not be used to access the data
564
+ * in the bucket
565
+ *
566
+ * @since 1.3.3
567
+ */
568
+ cb_eInvalidUsername = rb_define_class_under(cb_mError, "InvalidUsername", cb_eBaseError);
569
+
570
+ /* Document-class: Couchbase::Error::HTTP
571
+ * HTTP error with status code
572
+ *
573
+ * @since 1.2.0
574
+ */
575
+ cb_eHTTPError = rb_define_class_under(cb_mError, "HTTP", cb_eBaseError);
576
+ cb_id_iv_body = rb_intern("@body");
577
+ /* Document-method: error
578
+ *
579
+ * The underlying libcouchbase library could return one of the following
580
+ * error codes. The ruby client will wrap these errors into appropriate
581
+ * exception class, derived from {Couchbase::Error::Base}.
582
+ *
583
+ * 0x00 :: LCB_SUCCESS (Success)
584
+ * 0x01 :: LCB_AUTH_CONTINUE (Continue authentication)
585
+ * 0x02 :: LCB_AUTH_ERROR (Authentication error)
586
+ * 0x03 :: LCB_DELTA_BADVAL (Not a number)
587
+ * 0x04 :: LCB_E2BIG (Object too big)
588
+ * 0x05 :: LCB_EBUSY (Too busy)
589
+ * 0x06 :: LCB_EINTERNAL (Internal error)
590
+ * 0x07 :: LCB_EINVAL (Invalid arguments)
591
+ * 0x08 :: LCB_ENOMEM (Out of memory)
592
+ * 0x09 :: LCB_ERANGE (Invalid range)
593
+ * 0x0a :: LCB_ERROR (Generic error)
594
+ * 0x0b :: LCB_ETMPFAIL (Temporary failure)
595
+ * 0x0c :: LCB_KEY_EEXISTS (Key exists (with a different CAS value))
596
+ * 0x0d :: LCB_KEY_ENOENT (No such key)
597
+ * 0x0e :: LCB_DLOPEN_FAILED (Failed to open shared object)
598
+ * 0x0f :: LCB_DLSYM_FAILED (Failed to locate the requested cb_symbol in shared object)
599
+ * 0x10 :: LCB_NETWORK_ERROR (Network error)
600
+ * 0x11 :: LCB_NOT_MY_VBUCKET (The vbucket is not located on this server)
601
+ * 0x12 :: LCB_NOT_STORED (Not stored)
602
+ * 0x13 :: LCB_NOT_SUPPORTED (Not supported)
603
+ * 0x14 :: LCB_UNKNOWN_COMMAND (Unknown command)
604
+ * 0x15 :: LCB_UNKNOWN_HOST (Unknown host)
605
+ * 0x16 :: LCB_PROTOCOL_ERROR (Protocol error)
606
+ * 0x17 :: LCB_ETIMEDOUT (Operation timed out)
607
+ * 0x18 :: LCB_CONNECT_ERROR (Connection failure)
608
+ * 0x19 :: LCB_BUCKET_ENOENT (No such bucket)
609
+ * 0x1a :: LCB_CLIENT_ENOMEM (Out of memory on the client)
610
+ * 0x1b :: LCB_CLIENT_ETMPFAIL (Temporary failure on the client)
611
+ * 0x1c :: LCB_EBADHANDLE (Invalid handle type)
612
+ * 0x1d :: LCB_SERVER_BUG (Server bug)
613
+ * 0x1e :: LCB_PLUGIN_VERSION_MISMATCH (Plugin version mismatch)
614
+ * 0x1f :: LCB_INVALID_HOST_FORMAT (Invalid host format)
615
+ * 0x20 :: LCB_INVALID_CHAR (Invalid character)
616
+ *
617
+ * @since 1.0.0
618
+ *
619
+ * @return [Fixnum] the error code from libcouchbase
620
+ */
621
+ rb_define_attr(cb_eBaseError, "error", 1, 0);
622
+ cb_id_iv_error = rb_intern("@error");
623
+ /* Document-method: status
624
+ *
625
+ * @since 1.2.0.beta
626
+ *
627
+ * @return [Fixnum] The HTTP status code */
628
+ rb_define_attr(cb_eBaseError, "status", 1, 0);
629
+ cb_id_iv_status = rb_intern("@status");
630
+ /* Document-method: key
631
+ *
632
+ * @since 1.0.0
633
+ *
634
+ * @return [String] the key which generated error */
635
+ rb_define_attr(cb_eBaseError, "key", 1, 0);
636
+ cb_id_iv_key = rb_intern("@key");
637
+ /* Document-method: cas
638
+ *
639
+ * @since 1.0.0
640
+ *
641
+ * @return [Fixnum] the version of the key (+nil+ unless accessible) */
642
+ rb_define_attr(cb_eBaseError, "cas", 1, 0);
643
+ cb_id_iv_cas = rb_intern("@cas");
644
+ /* Document-method: operation
645
+ *
646
+ * @since 1.0.0
647
+ *
648
+ * @return [Symbol] the operation (+nil+ unless accessible) */
649
+ rb_define_attr(cb_eBaseError, "operation", 1, 0);
650
+ cb_id_iv_operation = rb_intern("@operation");
651
+ /* Document-method: inner_exception
652
+ *
653
+ * @since 1.2.0.beta4
654
+ *
655
+ * @return [Exception] the inner exception or +nil+. Some exceptions like
656
+ * {Error::ValueFormat} wrap the original exception */
657
+ rb_define_attr(cb_eBaseError, "inner_exception", 1, 0);
658
+ cb_id_iv_inner_exception = rb_intern("@inner_exception");
659
+
660
+ /* Document-class: Couchbase::Result
661
+ *
662
+ * The object which yielded to asynchronous callbacks
663
+ *
664
+ * @since 1.0.0
665
+ */
666
+ cb_cResult = rb_define_class_under(cb_mCouchbase, "Result", rb_cObject);
667
+ rb_define_method(cb_cResult, "inspect", cb_result_inspect, 0);
668
+ rb_define_method(cb_cResult, "to_s", cb_result_inspect, 0);
669
+ rb_define_method(cb_cResult, "success?", cb_result_success_p, 0);
670
+ /* Document-method: operation
671
+ *
672
+ * @since 1.0.0
673
+ *
674
+ * @return [Symbol]
675
+ */
676
+ rb_define_attr(cb_cResult, "operation", 1, 0);
677
+ /* Document-method: error
678
+ *
679
+ * @since 1.0.0
680
+ *
681
+ * @return [Couchbase::Error::Base]
682
+ */
683
+ rb_define_attr(cb_cResult, "error", 1, 0);
684
+ /* Document-method: key
685
+ *
686
+ * @since 1.0.0
687
+ *
688
+ * @return [String]
689
+ */
690
+ rb_define_attr(cb_cResult, "key", 1, 0);
691
+ cb_id_iv_key = rb_intern("@key");
692
+ /* Document-method: value
693
+ *
694
+ * @since 1.0.0
695
+ *
696
+ * @return [String]
697
+ */
698
+ rb_define_attr(cb_cResult, "value", 1, 0);
699
+ rb_define_alias(cb_cResult, "bucket", "value");
700
+ cb_id_iv_value = rb_intern("@value");
701
+ /* Document-method: cas
702
+ *
703
+ * @since 1.0.0
704
+ *
705
+ * @return [Fixnum]
706
+ */
707
+ rb_define_attr(cb_cResult, "cas", 1, 0);
708
+ cb_id_iv_cas = rb_intern("@cas");
709
+ /* Document-method: flags
710
+ *
711
+ * @since 1.0.0
712
+ *
713
+ * @return [Fixnum]
714
+ */
715
+ rb_define_attr(cb_cResult, "flags", 1, 0);
716
+ cb_id_iv_flags = rb_intern("@flags");
717
+ /* Document-method: node
718
+ *
719
+ * @since 1.0.0
720
+ *
721
+ * @return [String]
722
+ */
723
+ rb_define_attr(cb_cResult, "node", 1, 0);
724
+ cb_id_iv_node = rb_intern("@node");
725
+ /* Document-method: headers
726
+ *
727
+ * @since 1.2.0
728
+ *
729
+ * HTTP headers
730
+ *
731
+ * @return [Hash]
732
+ */
733
+ rb_define_attr(cb_cResult, "headers", 1, 0);
734
+ cb_id_iv_headers = rb_intern("@headers");
735
+ /* Document-method: completed
736
+ * In {Bucket::CouchRequest} operations used to mark the final call
737
+ * @return [Boolean] */
738
+ rb_define_attr(cb_cResult, "completed", 1, 0);
739
+ rb_define_alias(cb_cResult, "completed?", "completed");
740
+ cb_id_iv_completed = rb_intern("@completed");
741
+ /* Document-method: status
742
+ *
743
+ * @since 1.2.0.dp6
744
+ *
745
+ * @see Bucket#observe
746
+ *
747
+ * Status of the key. Possible values:
748
+ * +:found+ :: Key found in cache, but not yet persisted
749
+ * +:persisted+ :: Key found and persisted
750
+ * +:not_found+ :: Key not found
751
+ *
752
+ * @return [Symbol]
753
+ */
754
+ rb_define_attr(cb_cResult, "status", 1, 0);
755
+ cb_id_iv_status = rb_intern("@status");
756
+ /* Document-method: from_master
757
+ *
758
+ * @since 1.2.0.dp6
759
+ *
760
+ * @see Bucket#observe
761
+ *
762
+ * True if key stored on master
763
+ * @return [Boolean]
764
+ */
765
+ rb_define_attr(cb_cResult, "from_master", 1, 0);
766
+ rb_define_alias(cb_cResult, "from_master?", "from_master");
767
+ cb_id_iv_from_master = rb_intern("@from_master");
768
+ /* Document-method: time_to_persist
769
+ *
770
+ * @since 1.2.0.dp6
771
+ *
772
+ * @see Bucket#observe
773
+ *
774
+ * Average time needed to persist key on the disk (zero if unavailable)
775
+ * @return [Fixnum]
776
+ */
777
+ rb_define_attr(cb_cResult, "time_to_persist", 1, 0);
778
+ rb_define_alias(cb_cResult, "ttp", "time_to_persist");
779
+ cb_id_iv_time_to_persist = rb_intern("@time_to_persist");
780
+ /* Document-method: time_to_persist
781
+ *
782
+ * @since 1.2.0.dp6
783
+ *
784
+ * @see Bucket#observe
785
+ *
786
+ * Average time needed to replicate key on the disk (zero if unavailable)
787
+ * @return [Fixnum]
788
+ */
789
+ rb_define_attr(cb_cResult, "time_to_replicate", 1, 0);
790
+ rb_define_alias(cb_cResult, "ttr", "time_to_replicate");
791
+ cb_id_iv_time_to_replicate = rb_intern("@time_to_replicate");
792
+
793
+ /* Document-class: Couchbase::Bucket
794
+ *
795
+ * This class in charge of all stuff connected to communication with
796
+ * Couchbase.
797
+ *
798
+ * @since 1.0.0
799
+ */
800
+ cb_cBucket = rb_define_class_under(cb_mCouchbase, "Bucket", rb_cObject);
801
+
802
+ /* 0x03: Bitmask for flag bits responsible for format */
803
+ rb_define_const(cb_cBucket, "FMT_MASK", INT2FIX(CB_FMT_MASK));
804
+ /* 0x00: Document format. The (default) format supports most of ruby
805
+ * types which could be mapped to JSON data (hashes, arrays, strings,
806
+ * numbers). Future version will be able to run map/reduce queries on
807
+ * the values in the document form (hashes). */
808
+ rb_define_const(cb_cBucket, "FMT_DOCUMENT", INT2FIX(CB_FMT_DOCUMENT));
809
+ /* 0x01: Marshal format. The format which supports transparent
810
+ * serialization of ruby objects with standard <tt>Marshal.dump</tt> and
811
+ * <tt>Marhal.load</tt> methods. */
812
+ rb_define_const(cb_cBucket, "FMT_MARSHAL", INT2FIX(CB_FMT_MARSHAL));
813
+ /* 0x02: Plain format. The format which force client don't apply any
814
+ * conversions to the value, but it should be passed as String. It
815
+ * could be useful for building custom algorithms or formats. For
816
+ * example implement set:
817
+ * http://dustin.github.com/2011/02/17/memcached-set.html */
818
+ rb_define_const(cb_cBucket, "FMT_PLAIN", INT2FIX(CB_FMT_PLAIN));
819
+
820
+ rb_define_alloc_func(cb_cBucket, cb_bucket_alloc);
821
+ rb_define_method(cb_cBucket, "initialize", cb_bucket_init, -1);
822
+ rb_define_method(cb_cBucket, "initialize_copy", cb_bucket_init_copy, 1);
823
+ rb_define_method(cb_cBucket, "inspect", cb_bucket_inspect, 0);
824
+
825
+ rb_define_method(cb_cBucket, "add", cb_bucket_add, -1);
826
+ rb_define_method(cb_cBucket, "append", cb_bucket_append, -1);
827
+ rb_define_method(cb_cBucket, "prepend", cb_bucket_prepend, -1);
828
+ rb_define_method(cb_cBucket, "replace", cb_bucket_replace, -1);
829
+ rb_define_method(cb_cBucket, "set", cb_bucket_set, -1);
830
+ rb_define_method(cb_cBucket, "get", cb_bucket_get, -1);
831
+ rb_define_method(cb_cBucket, "run", cb_bucket_run, -1);
832
+ rb_define_method(cb_cBucket, "stop", cb_bucket_stop, 0);
833
+ rb_define_method(cb_cBucket, "touch", cb_bucket_touch, -1);
834
+ rb_define_method(cb_cBucket, "delete", cb_bucket_delete, -1);
835
+ rb_define_method(cb_cBucket, "stats", cb_bucket_stats, -1);
836
+ rb_define_method(cb_cBucket, "version", cb_bucket_version, -1);
837
+ rb_define_method(cb_cBucket, "incr", cb_bucket_incr, -1);
838
+ rb_define_method(cb_cBucket, "decr", cb_bucket_decr, -1);
839
+ rb_define_method(cb_cBucket, "unlock", cb_bucket_unlock, -1);
840
+ rb_define_method(cb_cBucket, "disconnect", cb_bucket_disconnect, 0);
841
+ rb_define_method(cb_cBucket, "reconnect", cb_bucket_reconnect, -1);
842
+ rb_define_method(cb_cBucket, "make_http_request", cb_bucket_make_http_request, -1);
843
+ rb_define_method(cb_cBucket, "observe", cb_bucket_observe, -1);
844
+
845
+ rb_define_alias(cb_cBucket, "decrement", "decr");
846
+ rb_define_alias(cb_cBucket, "increment", "incr");
847
+
848
+ rb_define_alias(cb_cBucket, "[]", "get");
849
+ rb_define_alias(cb_cBucket, "[]=", "set");
850
+ rb_define_method(cb_cBucket, "[]=", cb_bucket_aset, -1);
851
+
852
+ rb_define_method(cb_cBucket, "connected?", cb_bucket_connected_p, 0);
853
+ rb_define_method(cb_cBucket, "async?", cb_bucket_async_p, 0);
854
+
855
+ /* Document-method: quiet
856
+ * Flag specifying behaviour for operations on missing keys
857
+ *
858
+ * @since 1.0.0
859
+ *
860
+ * If it is +true+, the operations will silently return +nil+ or +false+
861
+ * instead of raising {Couchbase::Error::NotFound}.
862
+ *
863
+ * @example Hiding cache miss (considering "miss" key is not stored)
864
+ * connection.quiet = true
865
+ * connection.get("miss") #=> nil
866
+ *
867
+ * @example Raising errors on miss (considering "miss" key is not stored)
868
+ * connection.quiet = false
869
+ * connection.get("miss") #=> will raise Couchbase::Error::NotFound
870
+ *
871
+ * @return [true, false] */
872
+ /* rb_define_attr(cb_cBucket, "quiet", 1, 1); */
873
+ rb_define_method(cb_cBucket, "quiet", cb_bucket_quiet_get, 0);
874
+ rb_define_method(cb_cBucket, "quiet=", cb_bucket_quiet_set, 1);
875
+ rb_define_alias(cb_cBucket, "quiet?", "quiet");
876
+
877
+ /* Document-method: default_flags
878
+ * Default flags for new values.
879
+ *
880
+ * @since 1.0.0
881
+ *
882
+ * The library reserves last two lower bits to store the format of the
883
+ * value. The can be masked via FMT_MASK constant.
884
+ *
885
+ * @example Selecting format bits
886
+ * connection.default_flags & Couchbase::Bucket::FMT_MASK
887
+ *
888
+ * @example Set user defined bits
889
+ * connection.default_flags |= 0x6660
890
+ *
891
+ * @note Amending format bit will also change #default_format value
892
+ *
893
+ * @return [Fixnum] the effective flags */
894
+ /* rb_define_attr(cb_cBucket, "default_flags", 1, 1); */
895
+ rb_define_method(cb_cBucket, "default_flags", cb_bucket_default_flags_get, 0);
896
+ rb_define_method(cb_cBucket, "default_flags=", cb_bucket_default_flags_set, 1);
897
+
898
+ /* Document-method: transcoder
899
+ * Set data transcoder for the current connection
900
+ *
901
+ * @since 1.2.4
902
+ *
903
+ * It is possible to define custom transcoder to handle all value
904
+ * transformation, for example, if you need to adopt legacy
905
+ * application. The transcoder should respond to two methods:
906
+ * +dump+ and +load+. They are accepting the data itself, the
907
+ * flags field, and the options hash from the library.
908
+ *
909
+ * @example Simple data transcoder, which use Zlib to compress documents
910
+ * class ZlibTranscoder
911
+ * FMT_ZLIB = 0x04
912
+ *
913
+ * def initialize(base)
914
+ * @base = base
915
+ * end
916
+ *
917
+ * def dump(obj, flags, options = {})
918
+ * obj, flags = @base.dump(obj, flags, options)
919
+ * z = Zlib::Deflate.new(Zlib::BEST_SPEED)
920
+ * buffer = z.deflate(obj, Zlib::FINISH)
921
+ * z.close
922
+ * [buffer, flags|FMT_ZLIB]
923
+ * end
924
+ *
925
+ * def load(blob, flags, options = {})
926
+ * # decompress value only if Zlib flag set
927
+ * if (flags & FMT_ZLIB) == FMT_ZLIB
928
+ * z = Zlib::Inflate.new
929
+ * blob = z.inflate(blob)
930
+ * z.finish
931
+ * z.close
932
+ * end
933
+ * @base.load(blob, flags, options)
934
+ * end
935
+ * end
936
+ *
937
+ * @return [Object] the data transcoder */
938
+ /* rb_define_attr(cb_cBucket, "transcoder", 1, 1); */
939
+ rb_define_method(cb_cBucket, "transcoder", cb_bucket_transcoder_get, 0);
940
+ rb_define_method(cb_cBucket, "transcoder=", cb_bucket_transcoder_set, 1);
941
+
942
+ /* Document-method: default_format
943
+ * Default format for new values.
944
+ *
945
+ * @since 1.0.0
946
+ *
947
+ * @see http://couchbase.com/docs/couchbase-manual-2.0/couchbase-views-datastore.html
948
+ *
949
+ * It uses flags field to store the format. It accepts either the Symbol
950
+ * (+:document+, +:marshal+, +:plain+) or Fixnum (use constants
951
+ * FMT_DOCUMENT, FMT_MARSHAL, FMT_PLAIN) and silently ignores all
952
+ * other value.
953
+ *
954
+ * Here is some notes regarding how to choose the format:
955
+ *
956
+ * * <tt>:document</tt> (default) format supports most of ruby types
957
+ * which could be mapped to JSON data (hashes, arrays, strings,
958
+ * numbers). Future version will be able to run map/reduce queries on
959
+ * the values in the document form (hashes).
960
+ *
961
+ * * <tt>:plain</tt> format if you no need any conversions to be applied
962
+ * to your data, but your data should be passed as String. It could be
963
+ * useful for building custom algorithms or formats. For example
964
+ * implement set: http://dustin.github.com/2011/02/17/memcached-set.html
965
+ *
966
+ * * <tt>:marshal</tt> format if you'd like to transparently serialize
967
+ * your ruby object with standard <tt>Marshal.dump</tt> and
968
+ * <tt>Marhal.load</tt> methods.
969
+ *
970
+ * @example Selecting 'plain' format using symbol
971
+ * connection.default_format = :plain
972
+ *
973
+ * @example Selecting plain format using Fixnum constant (deprecated)
974
+ * connection.default_format = Couchbase::Bucket::FMT_PLAIN
975
+ *
976
+ * @note Amending default_format will also change #default_flags value
977
+ *
978
+ * @return [Symbol] the effective format */
979
+ /* rb_define_attr(cb_cBucket, "default_format", 1, 1); */
980
+ rb_define_method(cb_cBucket, "default_format", cb_bucket_default_format_get, 0);
981
+ rb_define_method(cb_cBucket, "default_format=", cb_bucket_default_format_set, 1);
982
+
983
+ /* Document-method: timeout
984
+ *
985
+ * @since 1.1.0
986
+ *
987
+ * @return [Fixnum] The timeout for the operations in microseconds. The
988
+ * client will raise {Couchbase::Error::Timeout} exception for all
989
+ * commands which weren't completed in given timeslot. */
990
+ /* rb_define_attr(cb_cBucket, "timeout", 1, 1); */
991
+ rb_define_method(cb_cBucket, "timeout", cb_bucket_timeout_get, 0);
992
+ rb_define_method(cb_cBucket, "timeout=", cb_bucket_timeout_set, 1);
993
+
994
+ /* Document-method: default_arithmetic_init
995
+ *
996
+ * @since 1.2.0
997
+ *
998
+ * @return [Fixnum, true] The initial value for arithmetic operations
999
+ * {Bucket#incr} and {Bucket#decr}. Setting this attribute will force
1000
+ * aforementioned operations create keys unless they exists in the
1001
+ * bucket and will use given value. You can also just specify +true+
1002
+ * if you'd like just force key creation with zero default value.
1003
+ */
1004
+ /* rb_define_attr(cb_cBucket, "default_arithmetic_init", 1, 1); */
1005
+ rb_define_method(cb_cBucket, "default_arithmetic_init", cb_bucket_default_arithmetic_init_get, 0);
1006
+ rb_define_method(cb_cBucket, "default_arithmetic_init=", cb_bucket_default_arithmetic_init_set, 1);
1007
+
1008
+ /* Document-method: key_prefix
1009
+ *
1010
+ * @since 1.2.0.dp5
1011
+ *
1012
+ * @return [String] The library will prepend +key_prefix+ to each key to
1013
+ * provide simple namespacing. */
1014
+ /* rb_define_attr(cb_cBucket, "key_prefix", 1, 1); */
1015
+ rb_define_method(cb_cBucket, "key_prefix", cb_bucket_key_prefix_get, 0);
1016
+ rb_define_method(cb_cBucket, "key_prefix=", cb_bucket_key_prefix_set, 1);
1017
+
1018
+ /* Document-method: on_error
1019
+ * Error callback for asynchronous mode.
1020
+ *
1021
+ * @since 1.0.0
1022
+ *
1023
+ * This callback is using to deliver exceptions in asynchronous mode.
1024
+ *
1025
+ * @yieldparam [Exception] exc The exception instance
1026
+ *
1027
+ * @example Using lambda syntax
1028
+ * connection = Couchbase.connect
1029
+ * connection.on_error = lambda {|exc| ... }
1030
+ * connection.run do |conn|
1031
+ * conn.set("foo", "bar")
1032
+ * end
1033
+ *
1034
+ * @example Using block syntax
1035
+ * connection = Couchbase.connect
1036
+ * connection.on_error {|exc| ... }
1037
+ * connection.run do |conn|
1038
+ * conn.set("foo", "bar")
1039
+ * end
1040
+ *
1041
+ * @return [Proc] the effective callback */
1042
+ /* rb_define_attr(cb_cBucket, "on_error", 1, 1); */
1043
+ rb_define_method(cb_cBucket, "on_error", cb_bucket_on_error_get, 0);
1044
+ rb_define_method(cb_cBucket, "on_error=", cb_bucket_on_error_set, 1);
1045
+
1046
+ /* Document-method: on_connect
1047
+ * Connection callback for asynchronous mode.
1048
+ *
1049
+ * @since 1.3.0
1050
+ *
1051
+ * This callback used to notify that bucket instance is connected
1052
+ * and ready to handle requests in asynchronous mode.
1053
+ *
1054
+ * @yieldparam [Result] result The result instance, with valid
1055
+ * properties +#error+, +#success?+, +#operation+ and +#bucket+
1056
+ *
1057
+ * @example Using lambda syntax
1058
+ * connection = Couchbase.new(:async => true)
1059
+ * connection.on_connect = lambda do |ret|
1060
+ * if ret.success?
1061
+ * conn.set("foo", "bar")
1062
+ * end
1063
+ * end
1064
+ * connection.run
1065
+ *
1066
+ * @example Using block syntax
1067
+ * connection = Couchbase.new(:async => true)
1068
+ * connection.run do |conn|
1069
+ * connection.on_connect do |ret|
1070
+ * if ret.success?
1071
+ * conn.set("foo", "bar")
1072
+ * end
1073
+ * end
1074
+ * end
1075
+ *
1076
+ * @example
1077
+ * EM.run do
1078
+ * pool = Pool.new
1079
+ * connection = Couchbase.new(:engine => :eventmachine, :async => true)
1080
+ * connection.on_connect do |result|
1081
+ * unless result.success?
1082
+ * $stderr.puts "Could not connect to CouchBase #{result.error}"
1083
+ * else
1084
+ * pool.add result.bucket
1085
+ * end
1086
+ * end
1087
+ * end
1088
+ *
1089
+ * @example
1090
+ * EM.run do
1091
+ * pool = Pool.new
1092
+ * connection = Couchbase.new(:engine => :eventmachine, :async => true)
1093
+ * connection.on_connect = pool.method(:couchbase_connect_callback)
1094
+ * end
1095
+ *
1096
+ * @return [Proc] the effective callback */
1097
+ /* rb_define_attr(cb_cBucket, "on_connect", 1, 1); */
1098
+ rb_define_method(cb_cBucket, "on_connect", cb_bucket_on_connect_get, 0);
1099
+ rb_define_method(cb_cBucket, "on_connect=", cb_bucket_on_connect_set, 1);
1100
+
1101
+ /* Document-method: url
1102
+ *
1103
+ * The config url for this connection.
1104
+ *
1105
+ * Generally it is the bootstrap URL, but it could be different after
1106
+ * cluster upgrade. This url is used to fetch the cluster
1107
+ * configuration.
1108
+ *
1109
+ * @since 1.0.0
1110
+ *
1111
+ * @return [String] the address of the cluster management interface
1112
+ */
1113
+ /* rb_define_attr(cb_cBucket, "url", 1, 0); */
1114
+ rb_define_method(cb_cBucket, "url", cb_bucket_url_get, 0);
1115
+ /* Document-method: hostname
1116
+ *
1117
+ * The hostname of the current node
1118
+ *
1119
+ * @see Bucket#url
1120
+ *
1121
+ * @since 1.0.0
1122
+ *
1123
+ * @return [String] the host name of the management interface (default: "localhost")
1124
+ */
1125
+ /* rb_define_attr(cb_cBucket, "hostname", 1, 0); */
1126
+ rb_define_method(cb_cBucket, "hostname", cb_bucket_hostname_get, 0);
1127
+ /* Document-method: port
1128
+ *
1129
+ * The port of the current node
1130
+ *
1131
+ * @see Bucket#url
1132
+ *
1133
+ * @since 1.0.0
1134
+ *
1135
+ * @return [Fixnum] the port number of the management interface (default: 8091)
1136
+ */
1137
+ /* rb_define_attr(cb_cBucket, "port", 1, 0); */
1138
+ rb_define_method(cb_cBucket, "port", cb_bucket_port_get, 0);
1139
+ /* Document-method: authority
1140
+ *
1141
+ * The authority ("hostname:port") of the current node
1142
+ *
1143
+ * @see Bucket#url
1144
+ *
1145
+ * @since 1.0.0
1146
+ *
1147
+ * @return [String] host with port
1148
+ */
1149
+ /* rb_define_attr(cb_cBucket, "authority", 1, 0); */
1150
+ rb_define_method(cb_cBucket, "authority", cb_bucket_authority_get, 0);
1151
+ /* Document-method: bucket
1152
+ *
1153
+ * The bucket name of the current connection
1154
+ *
1155
+ * @see Bucket#url
1156
+ *
1157
+ * @since 1.0.0
1158
+ *
1159
+ * @return [String] the bucket name
1160
+ */
1161
+ /* rb_define_attr(cb_cBucket, "bucket", 1, 0); */
1162
+ rb_define_method(cb_cBucket, "bucket", cb_bucket_bucket_get, 0);
1163
+ rb_define_alias(cb_cBucket, "name", "bucket");
1164
+ /* Document-method: pool
1165
+ *
1166
+ * The pool name of the current connection
1167
+ *
1168
+ * @see Bucket#url
1169
+ *
1170
+ * @since 1.0.0
1171
+ *
1172
+ * @return [String] the pool name (usually "default")
1173
+ */
1174
+ /* rb_define_attr(cb_cBucket, "pool", 1, 0); */
1175
+ rb_define_method(cb_cBucket, "pool", cb_bucket_pool_get, 0);
1176
+ /* Document-method: username
1177
+ *
1178
+ * The user name used to connect to the cluster
1179
+ *
1180
+ * @see Bucket#url
1181
+ *
1182
+ * @since 1.0.0
1183
+ *
1184
+ * @return [String] the username for protected buckets (usually matches
1185
+ * the bucket name)
1186
+ */
1187
+ /* rb_define_attr(cb_cBucket, "username", 1, 0); */
1188
+ rb_define_method(cb_cBucket, "username", cb_bucket_username_get, 0);
1189
+ /* Document-method: password
1190
+ *
1191
+ * The password used to connect to the cluster
1192
+ *
1193
+ * @since 1.0.0
1194
+ *
1195
+ * @return [String] the password for protected buckets
1196
+ */
1197
+ /* rb_define_attr(cb_cBucket, "password", 1, 0); */
1198
+ rb_define_method(cb_cBucket, "password", cb_bucket_password_get, 0);
1199
+ /* Document-method: environment
1200
+ *
1201
+ * The environment of the connection (+:development+ or +:production+)
1202
+ *
1203
+ * @since 1.2.0
1204
+ *
1205
+ * @return [Symbol]
1206
+ */
1207
+ /* rb_define_attr(cb_cBucket, "environment", 1, 0); */
1208
+ rb_define_method(cb_cBucket, "environment", cb_bucket_environment_get, 0);
1209
+ /* Document-method: num_replicas
1210
+ *
1211
+ * @since 1.2.0.dp6
1212
+ *
1213
+ * The numbers of the replicas for each node in the cluster
1214
+ *
1215
+ * @return [Fixnum]
1216
+ */
1217
+ /* rb_define_attr(cb_cBucket, "num_replicas", 1, 0); */
1218
+ rb_define_method(cb_cBucket, "num_replicas", cb_bucket_num_replicas_get, 0);
1219
+ /* Document-method: default_observe_timeout
1220
+ *
1221
+ * @since 1.2.0.dp6
1222
+ *
1223
+ * The default timeout value for {Bucket#observe_and_wait} operation in
1224
+ * microseconds
1225
+ *
1226
+ * @return [Fixnum]
1227
+ */
1228
+ /* rb_define_attr(cb_cBucket, "default_observe_timeout", 1, 1); */
1229
+ rb_define_method(cb_cBucket, "default_observe_timeout", cb_bucket_default_observe_timeout_get, 0);
1230
+ rb_define_method(cb_cBucket, "default_observe_timeout=", cb_bucket_default_observe_timeout_set, 1);
1231
+
1232
+ cb_cCouchRequest = rb_define_class_under(cb_cBucket, "CouchRequest", rb_cObject);
1233
+ rb_define_alloc_func(cb_cCouchRequest, cb_http_request_alloc);
1234
+
1235
+ rb_define_method(cb_cCouchRequest, "initialize", cb_http_request_init, -1);
1236
+ rb_define_method(cb_cCouchRequest, "inspect", cb_http_request_inspect, 0);
1237
+ rb_define_method(cb_cCouchRequest, "on_body", cb_http_request_on_body, 0);
1238
+ rb_define_method(cb_cCouchRequest, "perform", cb_http_request_perform, 0);
1239
+ rb_define_method(cb_cCouchRequest, "pause", cb_http_request_pause, 0);
1240
+ rb_define_method(cb_cCouchRequest, "continue", cb_http_request_continue, 0);
1241
+
1242
+ /* rb_define_attr(cb_cCouchRequest, "path", 1, 0); */
1243
+ rb_define_method(cb_cCouchRequest, "path", cb_http_request_path_get, 0);
1244
+ /* rb_define_attr(cb_cCouchRequest, "extended", 1, 0); */
1245
+ rb_define_method(cb_cCouchRequest, "extended", cb_http_request_extended_get, 0);
1246
+ rb_define_alias(cb_cCouchRequest, "extended?", "extended");
1247
+ /* rb_define_attr(cb_cCouchRequest, "chunked", 1, 0); */
1248
+ rb_define_method(cb_cCouchRequest, "chunked", cb_http_request_chunked_get, 0);
1249
+ rb_define_alias(cb_cCouchRequest, "chunked?", "chunked");
1250
+
1251
+ cb_cTimer = rb_define_class_under(cb_mCouchbase, "Timer", rb_cObject);
1252
+ rb_define_alloc_func(cb_cTimer, cb_timer_alloc);
1253
+ rb_define_method(cb_cTimer, "initialize", cb_timer_init, -1);
1254
+ rb_define_method(cb_cTimer, "inspect", cb_timer_inspect, 0);
1255
+ rb_define_method(cb_cTimer, "cancel", cb_timer_cancel, 0);
1256
+
1257
+ /* Define cb_symbols */
1258
+ cb_id_add_shutdown_hook = rb_intern("add_shutdown_hook");
1259
+ cb_id_arity = rb_intern("arity");
1260
+ cb_id_call = rb_intern("call");
1261
+ cb_id_create_timer = rb_intern("create_timer");
1262
+ cb_id_delete = rb_intern("delete");
1263
+ cb_id_dump = rb_intern("dump");
1264
+ cb_id_dup = rb_intern("dup");
1265
+ cb_id_flatten_bang = rb_intern("flatten!");
1266
+ cb_id_has_key_p = rb_intern("has_key?");
1267
+ cb_id_host = rb_intern("host");
1268
+ cb_id_load = rb_intern("load");
1269
+ cb_id_match = rb_intern("match");
1270
+ cb_id_next_tick = rb_intern("next_tick");
1271
+ cb_id_observe_and_wait = rb_intern("observe_and_wait");
1272
+ cb_id_parse = rb_intern("parse");
1273
+ cb_id_parse_body_bang = rb_intern("parse_body!");
1274
+ cb_id_password = rb_intern("password");
1275
+ cb_id_path = rb_intern("path");
1276
+ cb_id_port = rb_intern("port");
1277
+ cb_id_scheme = rb_intern("scheme");
1278
+ cb_id_sprintf = rb_intern("sprintf");
1279
+ cb_id_to_s = rb_intern("to_s");
1280
+ cb_id_user = rb_intern("user");
1281
+ cb_id_verify_observe_options = rb_intern("verify_observe_options");
1282
+
1283
+ cb_sym_add = ID2SYM(rb_intern("add"));
1284
+ cb_sym_all = ID2SYM(rb_intern("all"));
1285
+ cb_sym_append = ID2SYM(rb_intern("append"));
1286
+ cb_sym_assemble_hash = ID2SYM(rb_intern("assemble_hash"));
1287
+ cb_sym_async = ID2SYM(rb_intern("async"));
1288
+ cb_sym_body = ID2SYM(rb_intern("body"));
1289
+ cb_sym_bucket = ID2SYM(rb_intern("bucket"));
1290
+ cb_sym_cas = ID2SYM(rb_intern("cas"));
1291
+ cb_sym_chunked = ID2SYM(rb_intern("chunked"));
1292
+ cb_sym_cluster = ID2SYM(rb_intern("cluster"));
1293
+ cb_sym_connect = ID2SYM(rb_intern("connect"));
1294
+ cb_sym_content_type = ID2SYM(rb_intern("content_type"));
1295
+ cb_sym_create = ID2SYM(rb_intern("create"));
1296
+ cb_sym_decrement = ID2SYM(rb_intern("decrement"));
1297
+ cb_sym_default = ID2SYM(rb_intern("default"));
1298
+ cb_sym_default_arithmetic_init = ID2SYM(rb_intern("default_arithmetic_init"));
1299
+ cb_sym_default_flags = ID2SYM(rb_intern("default_flags"));
1300
+ cb_sym_default_format = ID2SYM(rb_intern("default_format"));
1301
+ cb_sym_default_ttl = ID2SYM(rb_intern("default_ttl"));
1302
+ cb_sym_delete = ID2SYM(rb_intern("delete"));
1303
+ cb_sym_delta = ID2SYM(rb_intern("delta"));
1304
+ cb_sym_development = ID2SYM(rb_intern("development"));
1305
+ cb_sym_document = ID2SYM(rb_intern("document"));
1306
+ cb_sym_engine = ID2SYM(rb_intern("engine"));
1307
+ cb_sym_environment = ID2SYM(rb_intern("environment"));
1308
+ cb_sym_eventmachine = ID2SYM(rb_intern("eventmachine"));
1309
+ cb_sym_extended = ID2SYM(rb_intern("extended"));
1310
+ cb_sym_first = ID2SYM(rb_intern("first"));
1311
+ cb_sym_flags = ID2SYM(rb_intern("flags"));
1312
+ cb_sym_forced = ID2SYM(rb_intern("forced"));
1313
+ cb_sym_format = ID2SYM(rb_intern("format"));
1314
+ cb_sym_found = ID2SYM(rb_intern("found"));
1315
+ cb_sym_get = ID2SYM(rb_intern("get"));
1316
+ cb_sym_hostname = ID2SYM(rb_intern("hostname"));
1317
+ cb_sym_http_request = ID2SYM(rb_intern("http_request"));
1318
+ cb_sym_increment = ID2SYM(rb_intern("increment"));
1319
+ cb_sym_initial = ID2SYM(rb_intern("initial"));
1320
+ cb_sym_iocp = ID2SYM(rb_intern("iocp"));
1321
+ cb_sym_key_prefix = ID2SYM(rb_intern("key_prefix"));
1322
+ cb_sym_libev = ID2SYM(rb_intern("libev"));
1323
+ cb_sym_libevent = ID2SYM(rb_intern("libevent"));
1324
+ cb_sym_lock = ID2SYM(rb_intern("lock"));
1325
+ cb_sym_management = ID2SYM(rb_intern("management"));
1326
+ cb_sym_marshal = ID2SYM(rb_intern("marshal"));
1327
+ cb_sym_method = ID2SYM(rb_intern("method"));
1328
+ cb_sym_node_list = ID2SYM(rb_intern("node_list"));
1329
+ cb_sym_not_found = ID2SYM(rb_intern("not_found"));
1330
+ cb_sym_num_replicas = ID2SYM(rb_intern("num_replicas"));
1331
+ cb_sym_observe = ID2SYM(rb_intern("observe"));
1332
+ cb_sym_password = ID2SYM(rb_intern("password"));
1333
+ cb_sym_periodic = ID2SYM(rb_intern("periodic"));
1334
+ cb_sym_persisted = ID2SYM(rb_intern("persisted"));
1335
+ cb_sym_plain = ID2SYM(rb_intern("plain"));
1336
+ cb_sym_pool = ID2SYM(rb_intern("pool"));
1337
+ cb_sym_port = ID2SYM(rb_intern("port"));
1338
+ cb_sym_post = ID2SYM(rb_intern("post"));
1339
+ cb_sym_prepend = ID2SYM(rb_intern("prepend"));
1340
+ cb_sym_production = ID2SYM(rb_intern("production"));
1341
+ cb_sym_put = ID2SYM(rb_intern("put"));
1342
+ cb_sym_quiet = ID2SYM(rb_intern("quiet"));
1343
+ cb_sym_replace = ID2SYM(rb_intern("replace"));
1344
+ cb_sym_replica = ID2SYM(rb_intern("replica"));
1345
+ cb_sym_select = ID2SYM(rb_intern("select"));
1346
+ cb_sym_send_threshold = ID2SYM(rb_intern("send_threshold"));
1347
+ cb_sym_set = ID2SYM(rb_intern("set"));
1348
+ cb_sym_stats = ID2SYM(rb_intern("stats"));
1349
+ cb_sym_timeout = ID2SYM(rb_intern("timeout"));
1350
+ cb_sym_touch = ID2SYM(rb_intern("touch"));
1351
+ cb_sym_transcoder = ID2SYM(rb_intern("transcoder"));
1352
+ cb_sym_ttl = ID2SYM(rb_intern("ttl"));
1353
+ cb_sym_type = ID2SYM(rb_intern("type"));
1354
+ cb_sym_unlock = ID2SYM(rb_intern("unlock"));
1355
+ cb_sym_username = ID2SYM(rb_intern("username"));
1356
+ cb_sym_version = ID2SYM(rb_intern("version"));
1357
+ cb_sym_view = ID2SYM(rb_intern("view"));
1358
+
1359
+ interned = rb_ary_new();
1360
+ rb_const_set(cb_mCouchbase, rb_intern("_INTERNED"), interned);
1361
+ cb_vStrDefault = cb_intern_string(interned, "default");
1362
+ cb_vStrEmpty = cb_intern_string(interned, "");
1363
+ cb_vStrLocalhost = cb_intern_string(interned, "localhost");
1364
+ }