couchbase 3.0.2 → 3.0.3

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 (136) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -2
  3. data/ext/CMakeLists.txt +3 -0
  4. data/ext/build_version.hxx.in +1 -1
  5. data/ext/cmake/CompilerWarnings.cmake +1 -0
  6. data/ext/cmake/PreventInSourceBuilds.cmake +4 -1
  7. data/ext/couchbase/bucket.hxx +28 -2
  8. data/ext/couchbase/cluster.hxx +8 -2
  9. data/ext/couchbase/couchbase.cxx +955 -511
  10. data/ext/couchbase/error_context/analytics.hxx +46 -0
  11. data/ext/couchbase/error_context/http.hxx +44 -0
  12. data/ext/couchbase/error_context/key_value.hxx +47 -0
  13. data/ext/couchbase/error_context/query.hxx +46 -0
  14. data/ext/couchbase/error_context/search.hxx +47 -0
  15. data/ext/couchbase/error_context/view.hxx +47 -0
  16. data/ext/couchbase/io/dns_codec.hxx +1 -2
  17. data/ext/couchbase/io/http_command.hxx +16 -3
  18. data/ext/couchbase/io/http_context.hxx +1 -1
  19. data/ext/couchbase/io/http_session.hxx +12 -6
  20. data/ext/couchbase/io/http_session_manager.hxx +25 -24
  21. data/ext/couchbase/io/mcbp_session.hxx +8 -2
  22. data/ext/couchbase/io/retry_context.hxx +1 -1
  23. data/ext/couchbase/operations/analytics_dataset_create.hxx +19 -12
  24. data/ext/couchbase/operations/analytics_dataset_drop.hxx +18 -10
  25. data/ext/couchbase/operations/analytics_dataset_get_all.hxx +16 -10
  26. data/ext/couchbase/operations/analytics_dataverse_create.hxx +18 -11
  27. data/ext/couchbase/operations/analytics_dataverse_drop.hxx +17 -11
  28. data/ext/couchbase/operations/analytics_get_pending_mutations.hxx +17 -10
  29. data/ext/couchbase/operations/analytics_index_create.hxx +17 -11
  30. data/ext/couchbase/operations/analytics_index_drop.hxx +16 -10
  31. data/ext/couchbase/operations/analytics_index_get_all.hxx +14 -10
  32. data/ext/couchbase/operations/analytics_link_connect.hxx +15 -9
  33. data/ext/couchbase/operations/analytics_link_disconnect.hxx +16 -10
  34. data/ext/couchbase/operations/bucket_create.hxx +33 -10
  35. data/ext/couchbase/operations/bucket_drop.hxx +9 -8
  36. data/ext/couchbase/operations/bucket_flush.hxx +8 -8
  37. data/ext/couchbase/operations/bucket_get.hxx +15 -10
  38. data/ext/couchbase/operations/bucket_get_all.hxx +14 -7
  39. data/ext/couchbase/operations/bucket_settings.hxx +16 -0
  40. data/ext/couchbase/operations/bucket_update.hxx +32 -10
  41. data/ext/couchbase/operations/cluster_developer_preview_enable.hxx +6 -6
  42. data/ext/couchbase/operations/collection_create.hxx +19 -13
  43. data/ext/couchbase/operations/collection_drop.hxx +18 -12
  44. data/ext/couchbase/operations/collections_manifest_get.hxx +5 -10
  45. data/ext/couchbase/operations/document_analytics.hxx +39 -17
  46. data/ext/couchbase/operations/document_append.hxx +5 -10
  47. data/ext/couchbase/operations/document_decrement.hxx +5 -10
  48. data/ext/couchbase/operations/document_exists.hxx +4 -6
  49. data/ext/couchbase/operations/document_get.hxx +6 -10
  50. data/ext/couchbase/operations/document_get_and_lock.hxx +4 -9
  51. data/ext/couchbase/operations/document_get_and_touch.hxx +4 -9
  52. data/ext/couchbase/operations/document_get_projected.hxx +21 -14
  53. data/ext/couchbase/operations/document_increment.hxx +5 -10
  54. data/ext/couchbase/operations/document_insert.hxx +5 -10
  55. data/ext/couchbase/operations/document_lookup_in.hxx +4 -9
  56. data/ext/couchbase/operations/document_mutate_in.hxx +7 -12
  57. data/ext/couchbase/operations/document_prepend.hxx +5 -10
  58. data/ext/couchbase/operations/document_query.hxx +45 -28
  59. data/ext/couchbase/operations/document_remove.hxx +5 -10
  60. data/ext/couchbase/operations/document_replace.hxx +5 -10
  61. data/ext/couchbase/operations/document_search.hxx +37 -16
  62. data/ext/couchbase/operations/document_touch.hxx +4 -9
  63. data/ext/couchbase/operations/document_unlock.hxx +4 -9
  64. data/ext/couchbase/operations/document_upsert.hxx +5 -10
  65. data/ext/couchbase/operations/document_view.hxx +29 -13
  66. data/ext/couchbase/operations/group_drop.hxx +7 -7
  67. data/ext/couchbase/operations/group_get.hxx +14 -10
  68. data/ext/couchbase/operations/group_get_all.hxx +14 -8
  69. data/ext/couchbase/operations/group_upsert.hxx +15 -9
  70. data/ext/couchbase/operations/http_noop.hxx +5 -5
  71. data/ext/couchbase/operations/mcbp_noop.hxx +3 -9
  72. data/ext/couchbase/operations/query_index_build_deferred.hxx +15 -9
  73. data/ext/couchbase/operations/query_index_create.hxx +16 -10
  74. data/ext/couchbase/operations/query_index_drop.hxx +16 -10
  75. data/ext/couchbase/operations/query_index_get_all.hxx +13 -7
  76. data/ext/couchbase/operations/role_get_all.hxx +14 -8
  77. data/ext/couchbase/operations/scope_create.hxx +19 -13
  78. data/ext/couchbase/operations/scope_drop.hxx +17 -11
  79. data/ext/couchbase/operations/scope_get_all.hxx +15 -10
  80. data/ext/couchbase/operations/search_get_stats.hxx +5 -5
  81. data/ext/couchbase/operations/search_index_analyze_document.hxx +25 -13
  82. data/ext/couchbase/operations/search_index_control_ingest.hxx +23 -11
  83. data/ext/couchbase/operations/search_index_control_plan_freeze.hxx +23 -11
  84. data/ext/couchbase/operations/search_index_control_query.hxx +23 -11
  85. data/ext/couchbase/operations/search_index_drop.hxx +22 -10
  86. data/ext/couchbase/operations/search_index_get.hxx +22 -10
  87. data/ext/couchbase/operations/search_index_get_all.hxx +13 -7
  88. data/ext/couchbase/operations/search_index_get_documents_count.hxx +24 -13
  89. data/ext/couchbase/operations/search_index_get_stats.hxx +16 -10
  90. data/ext/couchbase/operations/search_index_upsert.hxx +23 -11
  91. data/ext/couchbase/operations/user_drop.hxx +8 -8
  92. data/ext/couchbase/operations/user_get.hxx +14 -10
  93. data/ext/couchbase/operations/user_get_all.hxx +14 -8
  94. data/ext/couchbase/operations/user_upsert.hxx +15 -9
  95. data/ext/couchbase/operations/view_index_drop.hxx +7 -7
  96. data/ext/couchbase/operations/view_index_get.hxx +15 -9
  97. data/ext/couchbase/operations/view_index_get_all.hxx +15 -9
  98. data/ext/couchbase/operations/view_index_upsert.hxx +8 -8
  99. data/ext/couchbase/origin.hxx +1 -0
  100. data/ext/couchbase/platform/terminate_handler.cc +12 -8
  101. data/ext/couchbase/protocol/client_request.hxx +2 -1
  102. data/ext/couchbase/protocol/client_response.hxx +18 -15
  103. data/ext/couchbase/protocol/cmd_exists.hxx +1 -0
  104. data/ext/couchbase/protocol/cmd_get.hxx +1 -1
  105. data/ext/couchbase/protocol/cmd_mutate_in.hxx +3 -4
  106. data/ext/couchbase/protocol/enhanced_error_info.hxx +28 -0
  107. data/ext/couchbase/utils/connection_string.hxx +1 -1
  108. data/ext/couchbase/version.hxx +1 -1
  109. data/ext/extconf.rb +1 -1
  110. data/ext/test/test_native_binary_operations.cxx +18 -18
  111. data/ext/test/test_native_diagnostics.cxx +2 -2
  112. data/ext/test/test_native_trivial_crud.cxx +2 -2
  113. data/ext/third_party/json/include/tao/json/external/pegtl/internal/file_reader.hpp +1 -5
  114. data/lib/active_support/cache/couchbase_store.rb +362 -0
  115. data/lib/couchbase.rb +2 -0
  116. data/lib/couchbase/authenticator.rb +26 -0
  117. data/lib/couchbase/binary_collection.rb +1 -0
  118. data/lib/couchbase/bucket.rb +1 -0
  119. data/lib/couchbase/cluster.rb +51 -27
  120. data/lib/couchbase/collection.rb +19 -4
  121. data/lib/couchbase/collection_options.rb +10 -0
  122. data/lib/couchbase/configuration.rb +57 -0
  123. data/lib/couchbase/datastructures.rb +6 -0
  124. data/lib/couchbase/errors.rb +111 -3
  125. data/lib/couchbase/management.rb +27 -0
  126. data/lib/couchbase/management/bucket_manager.rb +9 -2
  127. data/lib/couchbase/management/collection_manager.rb +1 -1
  128. data/lib/couchbase/management/user_manager.rb +18 -2
  129. data/lib/couchbase/options.rb +33 -23
  130. data/lib/couchbase/railtie.rb +45 -0
  131. data/lib/couchbase/scope.rb +44 -3
  132. data/lib/couchbase/utils.rb +21 -0
  133. data/lib/couchbase/utils/time.rb +52 -0
  134. data/lib/couchbase/version.rb +1 -1
  135. data/lib/rails/generators/couchbase/config/config_generator.rb +27 -0
  136. metadata +19 -5
@@ -0,0 +1,45 @@
1
+ # Copyright 2020 Couchbase, Inc.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ require "rails"
16
+
17
+ require "couchbase/configuration"
18
+
19
+ module Rails
20
+ module Couchbase
21
+ class Railtie < ::Rails::Railtie
22
+ def self.rescue_responses
23
+ {
24
+ "Couchbase::Error::DocumentNotFound" => :not_found,
25
+ }
26
+ end
27
+
28
+ config.action_dispatch.rescue_responses&.merge!(rescue_responses)
29
+
30
+ config.couchbase = ::Couchbase::Configuration.new
31
+
32
+ initializer "couchbase.load-config" do
33
+ config_path = Rails.root.join("config", "couchbase.yml")
34
+ if config_path.file?
35
+ begin
36
+ config.couchbase.load!(config_path)
37
+ rescue ::Couchbase::Error::CouchbaseError => e
38
+ puts "There is a configuration error with the current couchbase.yml"
39
+ puts e.message
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -1,4 +1,4 @@
1
- # Copyright 2020 Couchbase, Inc.
1
+ # Copyright 2020-2021 Couchbase, Inc.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@ require "couchbase/collection"
16
16
  require "couchbase/query_options"
17
17
 
18
18
  module Couchbase
19
+ # The scope identifies a group of collections and allows high application density as a result.
19
20
  class Scope
20
21
  attr_reader :bucket_name
21
22
  attr_reader :name
@@ -51,8 +52,8 @@ module Couchbase
51
52
  # @param [Options::Query] options the custom options for this query
52
53
  #
53
54
  # @example Select first ten hotels from travel sample dataset
54
- # cluster.query("SELECT * FROM `travel-sample` WHERE type = $type LIMIT 10",
55
- # Options::Query(named_parameters: {type: "hotel"}, metrics: true))
55
+ # scope.query("SELECT * FROM `travel-sample` WHERE type = $type LIMIT 10",
56
+ # Options::Query(named_parameters: {type: "hotel"}, metrics: true))
56
57
  #
57
58
  # @return [QueryResult]
58
59
  def query(statement, options = Options::Query.new)
@@ -82,5 +83,45 @@ module Couchbase
82
83
  res.instance_variable_set("@rows", resp[:rows])
83
84
  end
84
85
  end
86
+
87
+ # Performs an analytics query
88
+ #
89
+ # The query will be implicitly scoped using current bucket and scope names.
90
+ #
91
+ # @param [String] statement the N1QL query statement
92
+ # @param [Options::Analytics] options the custom options for this query
93
+ #
94
+ # @example Select name of the given user
95
+ # scope.analytics_query("SELECT u.name AS uname FROM GleambookUsers u WHERE u.id = $user_id ",
96
+ # Options::Analytics(named_parameters: {user_id: 2}))
97
+ #
98
+ # @return [AnalyticsResult]
99
+ def analytics_query(statement, options = Options::Analytics.new)
100
+ resp = @backend.document_analytics(statement, options.to_backend(scope_name: @name, bucket_name: @bucket_name))
101
+
102
+ AnalyticsResult.new do |res|
103
+ res.transcoder = options.transcoder
104
+ res.meta_data = AnalyticsMetaData.new do |meta|
105
+ meta.status = resp[:meta][:status]
106
+ meta.request_id = resp[:meta][:request_id]
107
+ meta.client_context_id = resp[:meta][:client_context_id]
108
+ meta.signature = JSON.parse(resp[:meta][:signature]) if resp[:meta][:signature]
109
+ meta.profile = JSON.parse(resp[:meta][:profile]) if resp[:meta][:profile]
110
+ meta.metrics = AnalyticsMetrics.new do |metrics|
111
+ if resp[:meta][:metrics]
112
+ metrics.elapsed_time = resp[:meta][:metrics][:elapsed_time]
113
+ metrics.execution_time = resp[:meta][:metrics][:execution_time]
114
+ metrics.result_count = resp[:meta][:metrics][:result_count]
115
+ metrics.result_size = resp[:meta][:metrics][:result_size]
116
+ metrics.error_count = resp[:meta][:metrics][:error_count]
117
+ metrics.warning_count = resp[:meta][:metrics][:warning_count]
118
+ metrics.processed_objects = resp[:meta][:metrics][:processed_objects]
119
+ end
120
+ end
121
+ res[:warnings] = resp[:warnings].map { |warn| QueryWarning.new(warn[:code], warn[:message]) } if resp[:warnings]
122
+ end
123
+ res.instance_variable_set("@rows", resp[:rows])
124
+ end
125
+ end
85
126
  end
86
127
  end
@@ -0,0 +1,21 @@
1
+ # Copyright 2020 Couchbase, Inc.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ module Couchbase
16
+ # Module for internal tools, extensions and utilities
17
+ module Utils
18
+ end
19
+ end
20
+
21
+ require "couchbase/utils/time"
@@ -0,0 +1,52 @@
1
+ # Copyright 2020 Couchbase, Inc.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ require "time"
16
+
17
+ module Couchbase
18
+ module Utils
19
+ # Various Time utilities
20
+ module Time
21
+ RELATIVE_EXPIRY_CUTOFF_SECONDS = 30 * 24 * 60 * 60
22
+ WORKAROUND_EXPIRY_CUTOFF_SECONDS = 50 * 365 * 24 * 60 * 60
23
+
24
+ module_function
25
+
26
+ # @param [Integer, #in_seconds, Time, nil] time_or_duration expiration time to associate with the document
27
+ def extract_expiry_time(time_or_duration)
28
+ if time_or_duration.respond_to?(:in_seconds) # Duration
29
+ time_or_duration.in_seconds
30
+ elsif time_or_duration.respond_to?(:tv_sec) # Time
31
+ time_or_duration.tv_sec
32
+ elsif time_or_duration.is_a?(Integer)
33
+ if time_or_duration < RELATIVE_EXPIRY_CUTOFF_SECONDS
34
+ # looks like valid relative duration as specified in protocol (less than 30 days)
35
+ time_or_duration
36
+ elsif time_or_duration > WORKAROUND_EXPIRY_CUTOFF_SECONDS
37
+ effective_expiry = ::Time.at(time_or_duration).utc
38
+ warn "The specified expiry duration #{time_or_duration} is longer than 50 years. For bug-compatibility " \
39
+ "with previous versions of SDK 3.0.x, the number of seconds in the duration will be interpreted as " \
40
+ "the epoch second when the document should expire (#{effective_expiry}). Stuffing an epoch second " \
41
+ "into a Duration is deprecated and will no longer work in SDK 3.1. Consider using Time instance instead."
42
+ time_or_duration
43
+ else
44
+ ::Time.now.tv_sec + time_or_duration
45
+ end
46
+ else
47
+ time_or_duration
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
@@ -33,5 +33,5 @@ module Couchbase
33
33
  # :openssl_headers=>"OpenSSL 1.1.1c FIPS 28 May 2019",
34
34
  # :openssl_runtime=>"OpenSSL 1.1.1c FIPS 28 May 2019"}
35
35
  VERSION = {} unless defined?(VERSION) # rubocop:disable Style/MutableConstant
36
- VERSION.update(:sdk => "3.0.2".freeze)
36
+ VERSION.update(:sdk => "3.0.3".freeze)
37
37
  end
@@ -0,0 +1,27 @@
1
+ # Copyright 2020 Couchbase, Inc.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ module Couchbase
16
+ module Generators
17
+ class ConfigGenerator < Rails::Generators::Base
18
+ desc "Creates a Couchbase configuration file at config/couchbase.yml"
19
+
20
+ source_root File.expand_path(File.join("..", "templates"), __FILE__)
21
+
22
+ def create_config_file
23
+ template "couchbase.yml", File.join("config", "couchbase.yml")
24
+ end
25
+ end
26
+ end
27
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: couchbase
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.2
4
+ version: 3.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sergey Avseyev
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-11-03 00:00:00.000000000 Z
11
+ date: 2021-02-02 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Modern SDK for Couchbase Server
14
14
  email:
@@ -59,6 +59,12 @@ files:
59
59
  - ext/couchbase/couchbase.cxx
60
60
  - ext/couchbase/diagnostics.hxx
61
61
  - ext/couchbase/document_id.hxx
62
+ - ext/couchbase/error_context/analytics.hxx
63
+ - ext/couchbase/error_context/http.hxx
64
+ - ext/couchbase/error_context/key_value.hxx
65
+ - ext/couchbase/error_context/query.hxx
66
+ - ext/couchbase/error_context/search.hxx
67
+ - ext/couchbase/error_context/view.hxx
62
68
  - ext/couchbase/error_map.hxx
63
69
  - ext/couchbase/errors.hxx
64
70
  - ext/couchbase/io/dns_client.hxx
@@ -210,6 +216,7 @@ files:
210
216
  - ext/couchbase/protocol/cmd_upsert.hxx
211
217
  - ext/couchbase/protocol/datatype.hxx
212
218
  - ext/couchbase/protocol/durability_level.hxx
219
+ - ext/couchbase/protocol/enhanced_error_info.hxx
213
220
  - ext/couchbase/protocol/frame_info_id.hxx
214
221
  - ext/couchbase/protocol/hello_feature.hxx
215
222
  - ext/couchbase/protocol/magic.hxx
@@ -1321,6 +1328,7 @@ files:
1321
1328
  - ext/third_party/spdlog/src/fmt.cpp
1322
1329
  - ext/third_party/spdlog/src/spdlog.cpp
1323
1330
  - ext/third_party/spdlog/src/stdout_sinks.cpp
1331
+ - lib/active_support/cache/couchbase_store.rb
1324
1332
  - lib/couchbase.rb
1325
1333
  - lib/couchbase/analytics_options.rb
1326
1334
  - lib/couchbase/authenticator.rb
@@ -1330,6 +1338,7 @@ files:
1330
1338
  - lib/couchbase/cluster.rb
1331
1339
  - lib/couchbase/collection.rb
1332
1340
  - lib/couchbase/collection_options.rb
1341
+ - lib/couchbase/configuration.rb
1333
1342
  - lib/couchbase/datastructures.rb
1334
1343
  - lib/couchbase/datastructures/couchbase_list.rb
1335
1344
  - lib/couchbase/datastructures/couchbase_map.rb
@@ -1339,6 +1348,7 @@ files:
1339
1348
  - lib/couchbase/errors.rb
1340
1349
  - lib/couchbase/json_transcoder.rb
1341
1350
  - lib/couchbase/logger.rb
1351
+ - lib/couchbase/management.rb
1342
1352
  - lib/couchbase/management/analytics_index_manager.rb
1343
1353
  - lib/couchbase/management/bucket_manager.rb
1344
1354
  - lib/couchbase/management/collection_manager.rb
@@ -1349,11 +1359,15 @@ files:
1349
1359
  - lib/couchbase/mutation_state.rb
1350
1360
  - lib/couchbase/options.rb
1351
1361
  - lib/couchbase/query_options.rb
1362
+ - lib/couchbase/railtie.rb
1352
1363
  - lib/couchbase/scope.rb
1353
1364
  - lib/couchbase/search_options.rb
1354
1365
  - lib/couchbase/subdoc.rb
1366
+ - lib/couchbase/utils.rb
1367
+ - lib/couchbase/utils/time.rb
1355
1368
  - lib/couchbase/version.rb
1356
1369
  - lib/couchbase/view_options.rb
1370
+ - lib/rails/generators/couchbase/config/config_generator.rb
1357
1371
  homepage: https://www.couchbase.com
1358
1372
  licenses:
1359
1373
  - Apache-2.0
@@ -1361,9 +1375,9 @@ metadata:
1361
1375
  homepage_uri: https://docs.couchbase.com/ruby-sdk/3.0/hello-world/start-using-sdk.html
1362
1376
  bug_tracker_uri: https://couchbase.com/issues/browse/RCBC
1363
1377
  mailing_list_uri: https://forums.couchbase.com/c/ruby-sdk
1364
- source_code_uri: https://github.com/couchbase/couchbase-ruby-client/tree/3.0.2
1365
- changelog_uri: https://github.com/couchbase/couchbase-ruby-client/releases/tag/3.0.2
1366
- documentation_uri: https://docs.couchbase.com/sdk-api/couchbase-ruby-client-3.0.2/index.html
1378
+ source_code_uri: https://github.com/couchbase/couchbase-ruby-client/tree/3.0.3
1379
+ changelog_uri: https://github.com/couchbase/couchbase-ruby-client/releases/tag/3.0.3
1380
+ documentation_uri: https://docs.couchbase.com/sdk-api/couchbase-ruby-client-3.0.3/index.html
1367
1381
  github_repo: ssh://github.com/couchbase/couchbase-ruby-client
1368
1382
  post_install_message:
1369
1383
  rdoc_options: