momento 0.2.0 → 0.4.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (88) hide show
  1. checksums.yaml +4 -4
  2. data/.release-please-manifest.json +1 -1
  3. data/.rubocop.yml +14 -1
  4. data/.ruby-version +1 -1
  5. data/CHANGELOG.md +91 -0
  6. data/CONTRIBUTING.md +5 -6
  7. data/Gemfile +1 -6
  8. data/Gemfile.lock +30 -24
  9. data/README.md +53 -43
  10. data/README.template.md +30 -25
  11. data/examples/Gemfile +1 -1
  12. data/examples/README.md +3 -3
  13. data/examples/compact.rb +12 -8
  14. data/examples/example.rb +13 -7
  15. data/examples/file.rb +6 -5
  16. data/lib/README-generating-pb.txt +1 -1
  17. data/lib/momento/auth/credential_provider.rb +78 -0
  18. data/lib/momento/cache_client.rb +457 -0
  19. data/lib/momento/collection_ttl.rb +79 -0
  20. data/lib/momento/config/configuration.rb +16 -0
  21. data/lib/momento/config/configurations.rb +17 -0
  22. data/lib/momento/config/transport/grpc_configuration.rb +25 -0
  23. data/lib/momento/config/transport/static_transport_strategy.rb +12 -0
  24. data/lib/momento/config/transport/transport_strategy.rb +16 -0
  25. data/lib/momento/error/types.rb +15 -0
  26. data/lib/momento/generated/README.md +16 -0
  27. data/lib/momento/generated/auth_pb.rb +52 -0
  28. data/lib/momento/generated/auth_services_pb.rb +27 -0
  29. data/lib/momento/generated/cacheclient_pb.rb +203 -0
  30. data/lib/momento/generated/cacheclient_services_pb.rb +90 -0
  31. data/lib/momento/generated/cacheping_pb.rb +38 -0
  32. data/lib/momento/generated/cacheping_services_pb.rb +23 -0
  33. data/lib/momento/generated/cachepubsub_pb.rb +48 -0
  34. data/lib/momento/generated/cachepubsub_services_pb.rb +56 -0
  35. data/lib/momento/generated/common_pb.rb +44 -0
  36. data/lib/momento/generated/controlclient_pb.rb +72 -0
  37. data/lib/momento/generated/controlclient_services_pb.rb +35 -0
  38. data/lib/momento/generated/extensions_pb.rb +35 -0
  39. data/lib/momento/generated/generate_protos.sh +47 -0
  40. data/lib/momento/generated/leaderboard_pb.rb +56 -0
  41. data/lib/momento/generated/leaderboard_services_pb.rb +57 -0
  42. data/lib/momento/generated/permissionmessages_pb.rb +48 -0
  43. data/lib/momento/generated/token_pb.rb +43 -0
  44. data/lib/momento/generated/token_services_pb.rb +23 -0
  45. data/lib/momento/generated/webhook_pb.rb +49 -0
  46. data/lib/momento/generated/webhook_services_pb.rb +32 -0
  47. data/lib/momento/response/control/create_cache_response.rb +61 -0
  48. data/lib/momento/{delete_cache_response_builder.rb → response/control/delete_cache_response.rb} +24 -3
  49. data/lib/momento/response/control/list_caches_response.rb +80 -0
  50. data/lib/momento/{delete_response_builder.rb → response/delete_response.rb} +24 -2
  51. data/lib/momento/{get_response.rb → response/get_response.rb} +39 -9
  52. data/lib/momento/{response.rb → response/response.rb} +11 -14
  53. data/lib/momento/response/set_response.rb +59 -0
  54. data/lib/momento/response/sort_order.rb +11 -0
  55. data/lib/momento/response/sorted_set/sorted_set_fetch_response.rb +107 -0
  56. data/lib/momento/response/sorted_set/sorted_set_put_element_response.rb +44 -0
  57. data/lib/momento/response/sorted_set/sorted_set_put_elements_response.rb +44 -0
  58. data/lib/momento/version.rb +1 -1
  59. data/lib/momento.rb +6 -1
  60. data/momento.gemspec +5 -3
  61. data/release-please-config.json +1 -1
  62. data/sig/momento/auth/credential_provider.rbs +11 -0
  63. data/sig/momento/cache_client.rbs +12 -0
  64. data/sig/momento/collection_ttl.rbs +22 -0
  65. data/sig/momento/config/configuration.rbs +9 -0
  66. data/sig/momento/config/configurations.rbs +9 -0
  67. data/sig/momento/config/transport/grpc_configuration.rbs +7 -0
  68. data/sig/momento/config/transport/transport_strategy.rbs +7 -0
  69. data/sig/momento/list_caches_response.rbs +7 -0
  70. data/sig/momento/sorted_set_fetch_response.rbs +13 -0
  71. data/sig/momento/sorted_set_put_element_response.rbs +5 -0
  72. data/sig/momento/sorted_set_put_elements_response.rbs +5 -0
  73. metadata +101 -40
  74. data/lib/momento/cacheclient_pb.rb +0 -334
  75. data/lib/momento/cacheclient_services_pb.rb +0 -44
  76. data/lib/momento/controlclient_pb.rb +0 -73
  77. data/lib/momento/controlclient_services_pb.rb +0 -31
  78. data/lib/momento/create_cache_response.rb +0 -37
  79. data/lib/momento/create_cache_response_builder.rb +0 -27
  80. data/lib/momento/delete_cache_response.rb +0 -24
  81. data/lib/momento/delete_response.rb +0 -24
  82. data/lib/momento/get_response_builder.rb +0 -37
  83. data/lib/momento/list_caches_response.rb +0 -77
  84. data/lib/momento/list_caches_response_builder.rb +0 -25
  85. data/lib/momento/set_response.rb +0 -39
  86. data/lib/momento/set_response_builder.rb +0 -25
  87. data/lib/momento/simple_cache_client.rb +0 -336
  88. /data/lib/momento/{response_builder.rb → response/response_builder.rb} +0 -0
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
4
+ # source: webhook.proto
5
+
6
+ require 'google/protobuf'
7
+
8
+ descriptor_data = "\n\rwebhook.proto\x12\x07webhook\"6\n\n_WebhookId\x12\x12\n\ncache_name\x18\x01 \x01(\t\x12\x14\n\x0cwebhook_name\x18\x02 \x01(\t\"z\n\x08_Webhook\x12'\n\nwebhook_id\x18\x01 \x01(\x0b\x32\x13.webhook._WebhookId\x12\x12\n\ntopic_name\x18\x02 \x01(\t\x12\x31\n\x0b\x64\x65stination\x18\x03 \x01(\x0b\x32\x1c.webhook._WebhookDestination\"8\n\x12_PutWebhookRequest\x12\"\n\x07webhook\x18\x01 \x01(\x0b\x32\x11.webhook._Webhook\",\n\x13_PutWebhookResponse\x12\x15\n\rsecret_string\x18\x01 \x01(\t\"@\n\x15_DeleteWebhookRequest\x12'\n\nwebhook_id\x18\x01 \x01(\x0b\x32\x13.webhook._WebhookId\"\x18\n\x16_DeleteWebhookResponse\")\n\x13_ListWebhookRequest\x12\x12\n\ncache_name\x18\x01 \x01(\t\";\n\x15_ListWebhooksResponse\x12\"\n\x07webhook\x18\x01 \x03(\x0b\x32\x11.webhook._Webhook\"D\n\x18_GetWebhookSecretRequest\x12\x12\n\ncache_name\x18\x01 \x01(\t\x12\x14\n\x0cwebhook_name\x18\x02 \x01(\t\"\\\n\x19_GetWebhookSecretResponse\x12\x12\n\ncache_name\x18\x01 \x01(\t\x12\x14\n\x0cwebhook_name\x18\x02 \x01(\t\x12\x15\n\rsecret_string\x18\x03 \x01(\t\"1\n\x13_WebhookDestination\x12\x12\n\x08post_url\x18\x01 \x01(\tH\x00\x42\x06\n\x04kind\"F\n\x1b_RotateWebhookSecretRequest\x12'\n\nwebhook_id\x18\x01 \x01(\x0b\x32\x13.webhook._WebhookId\"5\n\x1c_RotateWebhookSecretResponse\x12\x15\n\rsecret_string\x18\x01 \x01(\t2\xbb\x03\n\x07Webhook\x12I\n\nPutWebhook\x12\x1b.webhook._PutWebhookRequest\x1a\x1c.webhook._PutWebhookResponse\"\x00\x12R\n\rDeleteWebhook\x12\x1e.webhook._DeleteWebhookRequest\x1a\x1f.webhook._DeleteWebhookResponse\"\x00\x12N\n\x0cListWebhooks\x12\x1c.webhook._ListWebhookRequest\x1a\x1e.webhook._ListWebhooksResponse\"\x00\x12[\n\x10GetWebhookSecret\x12!.webhook._GetWebhookSecretRequest\x1a\".webhook._GetWebhookSecretResponse\"\x00\x12\x64\n\x13RotateWebhookSecret\x12$.webhook._RotateWebhookSecretRequest\x1a%.webhook._RotateWebhookSecretResponse\"\x00\x42[\n\x0cgrpc.webhookP\x01Z0github.com/momentohq/client-sdk-go;client_sdk_go\xaa\x02\x16Momento.Protos.Webhookb\x06proto3"
9
+
10
+ pool = Google::Protobuf::DescriptorPool.generated_pool
11
+
12
+ begin
13
+ pool.add_serialized_file(descriptor_data)
14
+ rescue TypeError
15
+ # Compatibility code: will be removed in the next major version.
16
+ require_relative 'google/protobuf/descriptor_pb'
17
+ parsed = Google::Protobuf::FileDescriptorProto.decode(descriptor_data)
18
+ parsed.clear_dependency
19
+ serialized = parsed.class.encode(parsed)
20
+ file = pool.add_serialized_file(serialized)
21
+ warn "Warning: Protobuf detected an import path issue while loading generated file #{__FILE__}"
22
+ imports = []
23
+ imports.each do |type_name, expected_filename|
24
+ import_file = pool.lookup(type_name).file_descriptor
25
+ if import_file.name != expected_filename
26
+ warn "- #{file.name} imports #{expected_filename}, but that import was loaded as #{import_file.name}"
27
+ end
28
+ end
29
+ warn "Each proto file must use a consistent fully-qualified name."
30
+ warn "This will become an error in the next major version."
31
+ end
32
+
33
+ module MomentoProtos
34
+ module Webhook
35
+ PB__WebhookId = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("webhook._WebhookId").msgclass
36
+ PB__Webhook = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("webhook._Webhook").msgclass
37
+ PB__PutWebhookRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("webhook._PutWebhookRequest").msgclass
38
+ PB__PutWebhookResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("webhook._PutWebhookResponse").msgclass
39
+ PB__DeleteWebhookRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("webhook._DeleteWebhookRequest").msgclass
40
+ PB__DeleteWebhookResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("webhook._DeleteWebhookResponse").msgclass
41
+ PB__ListWebhookRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("webhook._ListWebhookRequest").msgclass
42
+ PB__ListWebhooksResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("webhook._ListWebhooksResponse").msgclass
43
+ PB__GetWebhookSecretRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("webhook._GetWebhookSecretRequest").msgclass
44
+ PB__GetWebhookSecretResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("webhook._GetWebhookSecretResponse").msgclass
45
+ PB__WebhookDestination = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("webhook._WebhookDestination").msgclass
46
+ PB__RotateWebhookSecretRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("webhook._RotateWebhookSecretRequest").msgclass
47
+ PB__RotateWebhookSecretResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("webhook._RotateWebhookSecretResponse").msgclass
48
+ end
49
+ end
@@ -0,0 +1,32 @@
1
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
2
+ # Source: webhook.proto for package 'webhook'
3
+
4
+ require 'grpc'
5
+ require_relative 'webhook_pb'
6
+
7
+ module MomentoProtos
8
+ module Webhook
9
+ module Webhook
10
+ # A Webhook is a mechanism to consume messages on a Topic.
11
+ # The primary purpose of webhooks in Momento is to enable
12
+ # Lambda to be a subscriber to the messages sent on a topic.
13
+ # Secondarily, webhooks open us up to a whole lot of integrations
14
+ # (slack, discord, event bridge, etc).
15
+ class Service
16
+ include ::GRPC::GenericService
17
+
18
+ self.marshal_class_method = :encode
19
+ self.unmarshal_class_method = :decode
20
+ self.service_name = 'webhook.Webhook'
21
+
22
+ rpc :PutWebhook, ::Webhook::PB__PutWebhookRequest, ::Webhook::PB__PutWebhookResponse
23
+ rpc :DeleteWebhook, ::Webhook::PB__DeleteWebhookRequest, ::Webhook::PB__DeleteWebhookResponse
24
+ rpc :ListWebhooks, ::Webhook::PB__ListWebhookRequest, ::Webhook::PB__ListWebhooksResponse
25
+ rpc :GetWebhookSecret, ::Webhook::PB__GetWebhookSecretRequest, ::Webhook::PB__GetWebhookSecretResponse
26
+ rpc :RotateWebhookSecret, ::Webhook::PB__RotateWebhookSecretRequest, ::Webhook::PB__RotateWebhookSecretResponse
27
+ end
28
+
29
+ Stub = Service.rpc_stub_class
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,61 @@
1
+ require_relative '../error'
2
+ require_relative '../../generated/controlclient_pb'
3
+
4
+ module Momento
5
+ # A response from creating a cache.
6
+ class CreateCacheResponse < Response
7
+ # Does the cache already exist?
8
+ # @return [Boolean]
9
+ def already_exists?
10
+ false
11
+ end
12
+
13
+ # Was the cache created?
14
+ # @return [Boolean]
15
+ def success?
16
+ false
17
+ end
18
+
19
+ # @private
20
+ class AlreadyExists < CreateCacheResponse
21
+ def already_exists?
22
+ true
23
+ end
24
+ end
25
+
26
+ # @private
27
+ class Success < CreateCacheResponse
28
+ def success?
29
+ true
30
+ end
31
+ end
32
+
33
+ # @private
34
+ class Error < CreateCacheResponse
35
+ include ::Momento::Response::Error
36
+ end
37
+ end
38
+
39
+ # @private
40
+ class CreateCacheResponseBuilder < ResponseBuilder
41
+ # Build a Momento::CreateCacheResponse from a block of code
42
+ # which returns a Momento::ControlClient::CreateCacheResponse.
43
+ #
44
+ # @return [Momento::CreateCacheResponse]
45
+ # @raise [StandardError] when the exception is not recognized.
46
+ # @raise [TypeError] when the response is not recognized.
47
+ def from_block
48
+ response = yield
49
+ rescue GRPC::AlreadyExists
50
+ return CreateCacheResponse::AlreadyExists.new
51
+ rescue *RESCUED_EXCEPTIONS => e
52
+ CreateCacheResponse::Error.new(
53
+ exception: e, context: context
54
+ )
55
+ else
56
+ raise TypeError unless response.is_a?(::MomentoProtos::ControlClient::PB__CreateCacheResponse)
57
+
58
+ return CreateCacheResponse::Success.new
59
+ end
60
+ end
61
+ end
@@ -1,7 +1,28 @@
1
- require 'grpc'
2
- require_relative 'controlclient_pb'
1
+ require_relative '../error'
2
+ require_relative '../../generated/controlclient_pb'
3
3
 
4
4
  module Momento
5
+ # A response from deleting a cache.
6
+ class DeleteCacheResponse < Response
7
+ # Was the cache deleted?
8
+ # @return [Boolean]
9
+ def success?
10
+ false
11
+ end
12
+
13
+ # @private
14
+ class Error < DeleteCacheResponse
15
+ include ::Momento::Response::Error
16
+ end
17
+
18
+ # @private
19
+ class Success < DeleteCacheResponse
20
+ def success?
21
+ true
22
+ end
23
+ end
24
+ end
25
+
5
26
  # @private
6
27
  class DeleteCacheResponseBuilder < ResponseBuilder
7
28
  # Build a Momento::DeleteCacheResponse from a block of code
@@ -17,7 +38,7 @@ module Momento
17
38
  exception: e, context: context
18
39
  )
19
40
  else
20
- raise TypeError unless response.is_a?(::Momento::ControlClient::DeleteCacheResponse)
41
+ raise TypeError unless response.is_a?(::MomentoProtos::ControlClient::PB__DeleteCacheResponse)
21
42
 
22
43
  return DeleteCacheResponse::Success.new
23
44
  end
@@ -0,0 +1,80 @@
1
+ require_relative '../error'
2
+ require_relative '../../generated/controlclient_pb'
3
+
4
+ module Momento
5
+ # A response from listing the caches.
6
+ class ListCachesResponse < Response
7
+ # Did it get a list of caches?
8
+ # @return [Boolean]
9
+ def success?
10
+ false
11
+ end
12
+
13
+ # The names of the caches.
14
+ # @return [Array,nil]
15
+ def cache_names
16
+ nil
17
+ end
18
+
19
+ # @!method to_s
20
+ # Displays the response and the list of cache names.
21
+ # The list of cache names will be truncated.
22
+ # @return [String]
23
+
24
+ # @private
25
+ class Success < ListCachesResponse
26
+ CACHE_NAMES_TO_DISPLAY = 5
27
+
28
+ # rubocop:disable Lint/MissingSuper
29
+ def initialize(grpc_response:)
30
+ @grpc_response = grpc_response
31
+ end
32
+ # rubocop:enable Lint/MissingSuper
33
+
34
+ def success?
35
+ true
36
+ end
37
+
38
+ def cache_names
39
+ @grpc_response.cache.map(&:cache_name)
40
+ end
41
+
42
+ def to_s
43
+ "#{super}: #{display_cache_names}"
44
+ end
45
+
46
+ private
47
+
48
+ def display_cache_names
49
+ display = cache_names&.take(CACHE_NAMES_TO_DISPLAY)&.join(", ")
50
+ cache_names&.size&.>(CACHE_NAMES_TO_DISPLAY) ? "#{display}, ..." : display.to_s
51
+ end
52
+ end
53
+
54
+ # @private
55
+ class Error < ListCachesResponse
56
+ include ::Momento::Response::Error
57
+ end
58
+ end
59
+
60
+ # @private
61
+ class ListCachesResponseBuilder < ResponseBuilder
62
+ # Build a Momento::ListCachesResponse from a block of code
63
+ # which returns a Momento::ControlClient::ListCachesResponse..
64
+ #
65
+ # @return [Momento::ListCachesResponse]
66
+ # @raise [StandardError] when the exception is not recognized.
67
+ # @raise [TypeError] when the response is not recognized.
68
+ def from_block
69
+ response = yield
70
+ rescue GRPC::BadStatus => e
71
+ ListCachesResponse::Error.new(
72
+ exception: e, context: context
73
+ )
74
+ else
75
+ raise TypeError unless response.is_a?(::MomentoProtos::ControlClient::PB__ListCachesResponse)
76
+
77
+ return ListCachesResponse::Success.new(grpc_response: response)
78
+ end
79
+ end
80
+ end
@@ -1,7 +1,29 @@
1
+ require_relative 'error'
1
2
  require 'grpc'
2
- require_relative 'cacheclient_pb'
3
+ require_relative '../generated/cacheclient_pb'
3
4
 
4
5
  module Momento
6
+ # A response from deleting a key.
7
+ class DeleteResponse < Response
8
+ # Was the key deleted?
9
+ # @return [Boolean]
10
+ def success?
11
+ false
12
+ end
13
+
14
+ # @private
15
+ class Success < DeleteResponse
16
+ def success?
17
+ true
18
+ end
19
+ end
20
+
21
+ # @private
22
+ class Error < DeleteResponse
23
+ include Momento::Response::Error
24
+ end
25
+ end
26
+
5
27
  # @private
6
28
  class DeleteResponseBuilder < ResponseBuilder
7
29
  # Build a Momento::DeleteResponse from a block of code
@@ -15,7 +37,7 @@ module Momento
15
37
  rescue *RESCUED_EXCEPTIONS => e
16
38
  DeleteResponse::Error.new(exception: e, context: context)
17
39
  else
18
- raise TypeError unless response.is_a?(::Momento::CacheClient::DeleteResponse)
40
+ raise TypeError unless response.is_a?(::MomentoProtos::CacheClient::PB__DeleteResponse)
19
41
 
20
42
  DeleteResponse::Success.new
21
43
  end
@@ -1,4 +1,5 @@
1
- require_relative 'response/error'
1
+ require_relative 'error'
2
+ require_relative '../generated/cacheclient_pb'
2
3
 
3
4
  module Momento
4
5
  # A response containing the value retrieved from a cache.
@@ -22,15 +23,12 @@ module Momento
22
23
  nil
23
24
  end
24
25
 
25
- # The gotten value, if any, as a string using your default encoding or specified one.
26
+ # The gotten value, if any, as a UTF-8 string.
26
27
  #
27
- # @param encoding [Encoding] defaults to Encoding.default_external
28
- # @return [String,nil] the value, if any, re-encoded
29
- # rubocop:disable Lint/UnusedMethodArgument
30
- def value_string(encoding = Encoding.default_external)
28
+ # @return [String,nil] the value, if any.
29
+ def value_string
31
30
  nil
32
31
  end
33
- # rubocop:enable Lint/UnusedMethodArgument
34
32
 
35
33
  # @!method to_s
36
34
  # Displays the response and the value, if any.
@@ -53,8 +51,8 @@ module Momento
53
51
  @grpc_response.cache_body
54
52
  end
55
53
 
56
- def value_string(encoding = Encoding.default_external)
57
- value_bytes.dup.force_encoding(encoding)
54
+ def value_string
55
+ value_bytes.dup.force_encoding('UTF-8')
58
56
  end
59
57
 
60
58
  def to_s
@@ -74,4 +72,36 @@ module Momento
74
72
  include Momento::Response::Error
75
73
  end
76
74
  end
75
+
76
+ # @private
77
+ class GetResponseBuilder < ResponseBuilder
78
+ # Build a Momento::GetResponse from a block of code
79
+ # which returns a Momento::ControlClient::GetResponse.
80
+ #
81
+ # @return [Momento::GetResponse]
82
+ # @raise [StandardError] when the exception is not recognized.
83
+ # @raise [TypeError] when the response is not recognized.
84
+ def from_block
85
+ response = yield
86
+ rescue *RESCUED_EXCEPTIONS => e
87
+ GetResponse::Error.new(exception: e, context: context)
88
+ else
89
+ from_response(response)
90
+ end
91
+
92
+ private
93
+
94
+ def from_response(response)
95
+ raise TypeError unless response.is_a?(MomentoProtos::CacheClient::PB__GetResponse)
96
+
97
+ case response.result
98
+ when :Hit
99
+ GetResponse::Hit.new(grpc_response: response)
100
+ when :Miss
101
+ GetResponse::Miss.new
102
+ else
103
+ raise "Unknown get result: #{response.result}"
104
+ end
105
+ end
106
+ end
77
107
  end
@@ -1,27 +1,24 @@
1
1
  require 'grpc'
2
- require_relative 'response/error'
3
2
  require_relative 'error'
4
- require_relative 'error/grpc_details'
5
- require_relative 'error/transport_details'
6
- require_relative 'error_builder'
3
+ require_relative '../error'
4
+ require_relative '../error/grpc_details'
5
+ require_relative '../error/transport_details'
6
+ require_relative '../error_builder'
7
7
  require_relative 'response_builder'
8
- require_relative 'create_cache_response'
9
- require_relative 'create_cache_response_builder'
8
+ require_relative 'control/create_cache_response'
10
9
  require_relative 'delete_response'
11
- require_relative 'delete_response_builder'
12
- require_relative 'delete_cache_response'
13
- require_relative 'delete_cache_response_builder'
10
+ require_relative 'control/delete_cache_response'
14
11
  require_relative 'get_response'
15
- require_relative 'get_response_builder'
16
- require_relative 'list_caches_response'
17
- require_relative 'list_caches_response_builder'
12
+ require_relative 'control/list_caches_response'
18
13
  require_relative 'set_response'
19
- require_relative 'set_response_builder'
14
+ require_relative 'sorted_set/sorted_set_put_element_response'
15
+ require_relative 'sorted_set/sorted_set_put_elements_response'
16
+ require_relative 'sorted_set/sorted_set_fetch_response'
20
17
 
21
18
  module Momento
22
19
  # The response from a Momento service request.
23
20
  #
24
- # {Momento::SimpleCacheClient} returns a response for both success
21
+ # {Momento::CacheClient} returns a response for both success
25
22
  # and error, as well as other states. See the documenation for each
26
23
  # type of response for more.
27
24
  #
@@ -0,0 +1,59 @@
1
+ require_relative 'error'
2
+ require_relative '../generated/cacheclient_pb'
3
+
4
+ module Momento
5
+ # A response from setting a key.
6
+ class SetResponse < Response
7
+ # Was the key/value pair added to the cache?
8
+ # @return [Boolean]
9
+ def success?
10
+ false
11
+ end
12
+
13
+ # @private
14
+ class Success < SetResponse
15
+ attr_accessor :key, :value
16
+
17
+ # rubocop:disable Lint/MissingSuper
18
+ def initialize(key:, value:)
19
+ @key = key
20
+ @value = value
21
+
22
+ return
23
+ end
24
+ # rubocop:enable Lint/MissingSuper
25
+
26
+ def success?
27
+ true
28
+ end
29
+
30
+ def to_s
31
+ "#{super}: '#{display_string(key)}' = '#{display_string(value)}'"
32
+ end
33
+ end
34
+
35
+ # @private
36
+ class Error < SetResponse
37
+ include Momento::Response::Error
38
+ end
39
+ end
40
+
41
+ # @private
42
+ class SetResponseBuilder < ResponseBuilder
43
+ # Build a Momento::SetResponse from a block of code
44
+ # which returns a Momento::CacheClient::SetResponse..
45
+ #
46
+ # @return [Momento::SetResponse]
47
+ # @raise [StandardError] when the exception is not recognized.
48
+ # @raise [TypeError] when the response is not recognized.
49
+ def from_block
50
+ response = yield
51
+ rescue *RESCUED_EXCEPTIONS => e
52
+ SetResponse::Error.new(exception: e, context: context)
53
+ else
54
+ raise TypeError unless response.is_a?(::MomentoProtos::CacheClient::PB__SetResponse)
55
+
56
+ SetResponse::Success.new(key: context[:key], value: context[:value])
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,11 @@
1
+ module Momento
2
+ # Represents whether a collection is sorted in ascending or descending fashion.
3
+ class SortOrder
4
+ ASCENDING = :ascending
5
+ DESCENDING = :descending
6
+
7
+ def self.valid?(order)
8
+ [ASCENDING, DESCENDING].include?(order)
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,107 @@
1
+ require_relative '../error'
2
+ require_relative '../../generated/cacheclient_pb'
3
+
4
+ module Momento
5
+ # A response containing the elements retrieved from a sorted set.
6
+ class SortedSetFetchResponse < Response
7
+ # The sorted set exists and any matching elements were fetched.
8
+ # @return [Boolean]
9
+ def hit?
10
+ false
11
+ end
12
+
13
+ # The sorted set does not exist.
14
+ # @return [Boolean]
15
+ def miss?
16
+ false
17
+ end
18
+
19
+ # The fetched values as UTF-8 Strings and their scores.
20
+ # @return [(Array[{ value: String, score: Float }] | nil)] the UTF-8 elements and their scores
21
+ def value_string_elements
22
+ nil
23
+ end
24
+
25
+ alias value value_string_elements
26
+
27
+ # The fetched values as ASCII_8BIT Strings and their scores.
28
+ # @return [(Array[{ value: String, score: Float }] | nil)] the ASCII_8BIT elements and their scores
29
+ def value_bytes_elements
30
+ nil
31
+ end
32
+
33
+ # @!method to_s
34
+ # Displays the response and the value, if any.
35
+ # A long value will be truncated.
36
+ # @return [String]
37
+
38
+ # @private
39
+ class Hit < SortedSetFetchResponse
40
+ # rubocop:disable Lint/MissingSuper
41
+ def initialize(grpc_response:)
42
+ @grpc_response = grpc_response
43
+ end
44
+ # rubocop:enable Lint/MissingSuper
45
+
46
+ def hit?
47
+ true
48
+ end
49
+
50
+ def value_string_elements
51
+ @grpc_response.elements.map do |element|
52
+ { value: element.value.dup.force_encoding('UTF-8'), score: element.score }
53
+ end
54
+ end
55
+
56
+ alias value value_string_elements
57
+
58
+ def value_bytes_elements
59
+ @grpc_response.elements.map do |element|
60
+ { value: element.value, score: element.score }
61
+ end
62
+ end
63
+
64
+ def to_s
65
+ "#{super}: #{display_string(value_string)}"
66
+ end
67
+ end
68
+
69
+ # @private
70
+ class Miss < SortedSetFetchResponse
71
+ def miss?
72
+ true
73
+ end
74
+ end
75
+
76
+ # @private
77
+ class Error < SortedSetFetchResponse
78
+ include Momento::Response::Error
79
+ end
80
+ end
81
+
82
+ # @private
83
+ class SortedSetFetchResponseBuilder < ResponseBuilder
84
+ # Build a Momento::SortedSetFetchResponse from a block of code
85
+ # which returns a MomentoProtos::CacheClient::PB__SortedSetFetchResponse.
86
+ #
87
+ # @return [Momento::SortedSetFetchResponse]
88
+ # @raise [StandardError] when the exception is not recognized.
89
+ # @raise [TypeError] when the response is not recognized.
90
+ def from_block
91
+ response = yield
92
+ rescue *RESCUED_EXCEPTIONS => e
93
+ SortedSetFetchResponse::Error.new(exception: e, context: context)
94
+ else
95
+ raise TypeError unless response.is_a?(MomentoProtos::CacheClient::PB__SortedSetFetchResponse)
96
+
97
+ case response.sorted_set
98
+ when :found
99
+ SortedSetFetchResponse::Hit.new(grpc_response: response.found.values_with_scores)
100
+ when :missing
101
+ SortedSetFetchResponse::Miss.new
102
+ else
103
+ raise "Unknown sorted set fetch result: #{response.sorted_set}"
104
+ end
105
+ end
106
+ end
107
+ end
@@ -0,0 +1,44 @@
1
+ require_relative '../error'
2
+ require_relative '../../generated/cacheclient_pb'
3
+
4
+ module Momento
5
+ # A response representing the result of a sorted set put element operation.
6
+ class SortedSetPutElementResponse < Response
7
+ # Was the element added to the sorted set?
8
+ # @return [Boolean]
9
+ def success?
10
+ false
11
+ end
12
+
13
+ # @private
14
+ class Success < SortedSetPutElementResponse
15
+ def success?
16
+ true
17
+ end
18
+ end
19
+
20
+ # @private
21
+ class Error < SortedSetPutElementResponse
22
+ include Momento::Response::Error
23
+ end
24
+ end
25
+
26
+ # @private
27
+ class SortedSetPutElementResponseBuilder < ResponseBuilder
28
+ # Build a Momento::SortedSetPutElementResponse from a block of code
29
+ # which returns a MomentoProtos::CacheClient::PB__SortedSetPutElementResponse.
30
+ #
31
+ # @return [Momento::SortedSetPutElementResponse]
32
+ # @raise [StandardError] when the exception is not recognized.
33
+ # @raise [TypeError] when the response is not recognized.
34
+ def from_block
35
+ response = yield
36
+ rescue *RESCUED_EXCEPTIONS => e
37
+ SortedSetPutElementResponse::Error.new(exception: e, context: context)
38
+ else
39
+ raise TypeError unless response.is_a?(::MomentoProtos::CacheClient::PB__SortedSetPutResponse)
40
+
41
+ SortedSetPutElementResponse::Success.new
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,44 @@
1
+ require_relative '../error'
2
+ require_relative '../../generated/cacheclient_pb'
3
+
4
+ module Momento
5
+ # A response representing the result of a sorted set put elements operation.
6
+ class SortedSetPutElementsResponse < Response
7
+ # Were the elements added to the sorted set?
8
+ # @return [Boolean]
9
+ def success?
10
+ false
11
+ end
12
+
13
+ # @private
14
+ class Success < SortedSetPutElementsResponse
15
+ def success?
16
+ true
17
+ end
18
+ end
19
+
20
+ # @private
21
+ class Error < SortedSetPutElementsResponse
22
+ include Momento::Response::Error
23
+ end
24
+ end
25
+
26
+ # @private
27
+ class SortedSetPutElementsResponseBuilder < ResponseBuilder
28
+ # Build a Momento::SortedSetPutElementsResponse from a block of code
29
+ # which returns a MomentoProtos::CacheClient::PB__SortedSetPutElementsResponse.
30
+ #
31
+ # @return [Momento::SortedSetPutElementsResponse]
32
+ # @raise [StandardError] when the exception is not recognized.
33
+ # @raise [TypeError] when the response is not recognized.
34
+ def from_block
35
+ response = yield
36
+ rescue *RESCUED_EXCEPTIONS => e
37
+ SortedSetPutElementsResponse::Error.new(exception: e, context: context)
38
+ else
39
+ raise TypeError unless response.is_a?(::MomentoProtos::CacheClient::PB__SortedSetPutResponse)
40
+
41
+ SortedSetPutElementsResponse::Success.new
42
+ end
43
+ end
44
+ end