momento 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 28402c3809544906082ae277798d4ffd2f82a20bf45fa9869edca7e3adf9bd9a
4
+ data.tar.gz: 4c8bac6308cc7a5ef23f025d909b6572907c4c1fc1c6386775b87006edee1a4c
5
+ SHA512:
6
+ metadata.gz: 9fad68ffd8d9dd81deee23655464af02014ddc3348bd07f0c95d9534d2acf7c9cac858f175a62489d121f3ebce9cd1c641f27dfdafac1665239697b5dcd326dd
7
+ data.tar.gz: a38ac7f169d9917e015b3da3647ec01950fb1b769a11166c16df6a1013e398c3b2e910e292c6721e204c9b3a04a5237be25bfea58e3ad5ebfed43866a990ee48
data/.editorconfig ADDED
@@ -0,0 +1,9 @@
1
+ root = true
2
+
3
+ [*]
4
+ indent_style = space
5
+ indent_size = 2
6
+ end_of_line = lf
7
+ charset = utf-8
8
+ trim_trailing_whitespace = true
9
+ insert_final_newline = true
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --format documentation
2
+ --color
3
+ --require spec_helper
data/.rubocop.yml ADDED
@@ -0,0 +1,61 @@
1
+ require:
2
+ - 'rubocop-performance'
3
+ - 'rubocop-rake'
4
+ - 'rubocop-rspec'
5
+
6
+ AllCops:
7
+ NewCops: enable
8
+ TargetRubyVersion: 2.7
9
+ Exclude:
10
+ # Generated protobuf files
11
+ - 'lib/**/*_pb.rb'
12
+ - 'vendor/**/*'
13
+
14
+ Layout/MultilineMethodCallIndentation:
15
+ EnforcedStyle: indented
16
+
17
+ Lint/AmbiguousBlockAssociation:
18
+ # For rspec
19
+ AllowedPatterns: ['change']
20
+
21
+ # The rspec defaults are way too tight.
22
+ RSpec/ExampleLength:
23
+ Max: 15
24
+ RSpec/MultipleExpectations:
25
+ Max: 4
26
+ RSpec/MultipleMemoizedHelpers:
27
+ Max: 10
28
+ RSpec/NestedGroups:
29
+ Max: 4
30
+
31
+ RSpec/ImplicitSubject:
32
+ EnforcedStyle: single_statement_only
33
+
34
+ # end.method looks really weird, and the other styles are too fussy
35
+ Style/BlockDelimiters:
36
+ Enabled: false
37
+
38
+ # Enable it if they ever do anything with it.
39
+ Style/FrozenStringLiteralComment:
40
+ Enabled: false
41
+
42
+ # In a language which returns it's last evaluated expression,
43
+ # it's useful to know when you intend to return vs when you don't.
44
+ Style/RedundantReturn:
45
+ Enabled: false
46
+
47
+ # Too fussy, doesn't solve a problem
48
+ Style/StringLiterals:
49
+ Enabled: false
50
+
51
+ Style/StringLiteralsInInterpolation:
52
+ Enabled: false
53
+
54
+ # I find the %x arrays hard to remember.
55
+ Style/SymbolArray:
56
+ Enabled: false
57
+ Style/WordArray:
58
+ Enabled: false
59
+
60
+ Layout/LineLength:
61
+ Max: 120
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ ruby-3.1.2
data/CONTRIBUTING.md ADDED
@@ -0,0 +1,53 @@
1
+ <img src="https://docs.momentohq.com/img/logo.svg" alt="logo" width="400"/>
2
+
3
+ # Welcome to client-sdk-ruby contributing guide :wave:
4
+
5
+ Thank you for taking your time to contribute to our Ruby SDK!
6
+
7
+ This guide will provide you information to start your own development and testing.
8
+
9
+ Happy coding :dancer:
10
+
11
+
12
+ ## Requirements
13
+
14
+ Check out our SDK [requirements](https://github.com/momentohq/client-sdk-ruby#Requirements)!
15
+
16
+
17
+ ## Installing Ruby
18
+
19
+ Ruby might already be installed on your computer, but we recommend instead using your own Ruby.
20
+
21
+ To install and manage your own Ruby, we suggest using either [`rvm`](https://rvm.io/) or [`rbenv`](https://github.com/rbenv/rbenv/).
22
+
23
+ If you're on Windows, use [RubyInstaller](https://rubyinstaller.org/).
24
+
25
+ You can also use a Docker image. `docker pull ruby` or any specific version of Ruby we support.
26
+
27
+
28
+ ## Setting up the dev environment
29
+
30
+ 1. Clone the repository.
31
+ 2. Change to the repository directory.
32
+ 3. Upgrade bundler: `gem install bundler`
33
+ 4. Install the dependencies: `bundle`
34
+
35
+ This will install both the runtime and development dependencies.
36
+
37
+ ## Trying it out
38
+
39
+ You can run code from the repository's `lib/` directory by adding `-Ilib` to your ruby commands. For example, `ruby -Ilib examples/basic.rb` or `irb -Ilib`. This will use the repository's code even if you have the gem installed.
40
+
41
+ You can also build a gem from local sources and install it. Run `bundle exec rake install`.
42
+
43
+ ## Running unit tests
44
+
45
+ Run `rspec`. These tests will make no network calls and do not require a Momento account.
46
+
47
+ ## Running integration tests
48
+
49
+ TODO
50
+
51
+ ## Bug reports
52
+
53
+ Bug reports and pull requests are welcome on GitHub at https://github.com/momentohq/client-sdk-ruby.
data/Gemfile ADDED
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ source "https://rubygems.org"
4
+
5
+ # Specify your gem's dependencies in momento-client.gemspec
6
+ gemspec
7
+
8
+ gem "pry-byebug"
9
+ gem "rake", "~> 13.0"
10
+ gem "rspec", "~> 3.0"
11
+ gem "rubocop", "~> 1.38"
data/Gemfile.lock ADDED
@@ -0,0 +1,118 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ momento (0.1.0)
5
+ grpc (~> 1)
6
+ jwt (~> 2)
7
+
8
+ GEM
9
+ remote: https://rubygems.org/
10
+ specs:
11
+ activesupport (7.0.4)
12
+ concurrent-ruby (~> 1.0, >= 1.0.2)
13
+ i18n (>= 1.6, < 2)
14
+ minitest (>= 5.1)
15
+ tzinfo (~> 2.0)
16
+ ast (2.4.2)
17
+ byebug (11.1.3)
18
+ coderay (1.1.3)
19
+ concurrent-ruby (1.1.10)
20
+ diff-lcs (1.5.0)
21
+ docile (1.4.0)
22
+ factory_bot (6.2.1)
23
+ activesupport (>= 5.0.0)
24
+ faker (3.0.0)
25
+ i18n (>= 1.8.11, < 2)
26
+ google-protobuf (3.21.9-x86_64-darwin)
27
+ google-protobuf (3.21.9-x86_64-linux)
28
+ googleapis-common-protos-types (1.4.0)
29
+ google-protobuf (~> 3.14)
30
+ grpc (1.50.0-x86_64-darwin)
31
+ google-protobuf (~> 3.21)
32
+ googleapis-common-protos-types (~> 1.0)
33
+ grpc (1.50.0-x86_64-linux)
34
+ google-protobuf (~> 3.21)
35
+ googleapis-common-protos-types (~> 1.0)
36
+ i18n (1.12.0)
37
+ concurrent-ruby (~> 1.0)
38
+ json (2.6.2)
39
+ jwt (2.5.0)
40
+ method_source (1.0.0)
41
+ minitest (5.16.3)
42
+ parallel (1.22.1)
43
+ parser (3.1.2.1)
44
+ ast (~> 2.4.1)
45
+ pry (0.14.1)
46
+ coderay (~> 1.1)
47
+ method_source (~> 1.0)
48
+ pry-byebug (3.10.1)
49
+ byebug (~> 11.0)
50
+ pry (>= 0.13, < 0.15)
51
+ rainbow (3.1.1)
52
+ rake (13.0.6)
53
+ regexp_parser (2.6.0)
54
+ rexml (3.2.5)
55
+ rspec (3.11.0)
56
+ rspec-core (~> 3.11.0)
57
+ rspec-expectations (~> 3.11.0)
58
+ rspec-mocks (~> 3.11.0)
59
+ rspec-core (3.11.0)
60
+ rspec-support (~> 3.11.0)
61
+ rspec-expectations (3.11.0)
62
+ diff-lcs (>= 1.2.0, < 2.0)
63
+ rspec-support (~> 3.11.0)
64
+ rspec-mocks (3.11.1)
65
+ diff-lcs (>= 1.2.0, < 2.0)
66
+ rspec-support (~> 3.11.0)
67
+ rspec-support (3.11.0)
68
+ rubocop (1.38.0)
69
+ json (~> 2.3)
70
+ parallel (~> 1.10)
71
+ parser (>= 3.1.2.1)
72
+ rainbow (>= 2.2.2, < 4.0)
73
+ regexp_parser (>= 1.8, < 3.0)
74
+ rexml (>= 3.2.5, < 4.0)
75
+ rubocop-ast (>= 1.23.0, < 2.0)
76
+ ruby-progressbar (~> 1.7)
77
+ unicode-display_width (>= 1.4.0, < 3.0)
78
+ rubocop-ast (1.23.0)
79
+ parser (>= 3.1.1.0)
80
+ rubocop-performance (1.15.0)
81
+ rubocop (>= 1.7.0, < 2.0)
82
+ rubocop-ast (>= 0.4.0)
83
+ rubocop-rake (0.6.0)
84
+ rubocop (~> 1.0)
85
+ rubocop-rspec (2.15.0)
86
+ rubocop (~> 1.33)
87
+ ruby-progressbar (1.11.0)
88
+ simplecov (0.21.2)
89
+ docile (~> 1.1)
90
+ simplecov-html (~> 0.11)
91
+ simplecov_json_formatter (~> 0.1)
92
+ simplecov-html (0.12.3)
93
+ simplecov_json_formatter (0.1.4)
94
+ tzinfo (2.0.5)
95
+ concurrent-ruby (~> 1.0)
96
+ unicode-display_width (2.3.0)
97
+
98
+ PLATFORMS
99
+ x86_64-darwin-20
100
+ x86_64-darwin-21
101
+ x86_64-linux
102
+
103
+ DEPENDENCIES
104
+ bundler (~> 2.3)
105
+ factory_bot (~> 6.2.1)
106
+ faker (~> 3.0)
107
+ momento!
108
+ pry-byebug
109
+ rake (~> 13.0)
110
+ rspec (~> 3.0)
111
+ rubocop (~> 1.38)
112
+ rubocop-performance (~> 1.15)
113
+ rubocop-rake (~> 0.6.0)
114
+ rubocop-rspec (~> 2.15)
115
+ simplecov (~> 0.21)
116
+
117
+ BUNDLED WITH
118
+ 2.3.24
data/LICENSE.txt ADDED
@@ -0,0 +1,201 @@
1
+ Apache License
2
+ Version 2.0, January 2004
3
+ http://www.apache.org/licenses/
4
+
5
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6
+
7
+ 1. Definitions.
8
+
9
+ "License" shall mean the terms and conditions for use, reproduction,
10
+ and distribution as defined by Sections 1 through 9 of this document.
11
+
12
+ "Licensor" shall mean the copyright owner or entity authorized by
13
+ the copyright owner that is granting the License.
14
+
15
+ "Legal Entity" shall mean the union of the acting entity and all
16
+ other entities that control, are controlled by, or are under common
17
+ control with that entity. For the purposes of this definition,
18
+ "control" means (i) the power, direct or indirect, to cause the
19
+ direction or management of such entity, whether by contract or
20
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
21
+ outstanding shares, or (iii) beneficial ownership of such entity.
22
+
23
+ "You" (or "Your") shall mean an individual or Legal Entity
24
+ exercising permissions granted by this License.
25
+
26
+ "Source" form shall mean the preferred form for making modifications,
27
+ including but not limited to software source code, documentation
28
+ source, and configuration files.
29
+
30
+ "Object" form shall mean any form resulting from mechanical
31
+ transformation or translation of a Source form, including but
32
+ not limited to compiled object code, generated documentation,
33
+ and conversions to other media types.
34
+
35
+ "Work" shall mean the work of authorship, whether in Source or
36
+ Object form, made available under the License, as indicated by a
37
+ copyright notice that is included in or attached to the work
38
+ (an example is provided in the Appendix below).
39
+
40
+ "Derivative Works" shall mean any work, whether in Source or Object
41
+ form, that is based on (or derived from) the Work and for which the
42
+ editorial revisions, annotations, elaborations, or other modifications
43
+ represent, as a whole, an original work of authorship. For the purposes
44
+ of this License, Derivative Works shall not include works that remain
45
+ separable from, or merely link (or bind by name) to the interfaces of,
46
+ the Work and Derivative Works thereof.
47
+
48
+ "Contribution" shall mean any work of authorship, including
49
+ the original version of the Work and any modifications or additions
50
+ to that Work or Derivative Works thereof, that is intentionally
51
+ submitted to Licensor for inclusion in the Work by the copyright owner
52
+ or by an individual or Legal Entity authorized to submit on behalf of
53
+ the copyright owner. For the purposes of this definition, "submitted"
54
+ means any form of electronic, verbal, or written communication sent
55
+ to the Licensor or its representatives, including but not limited to
56
+ communication on electronic mailing lists, source code control systems,
57
+ and issue tracking systems that are managed by, or on behalf of, the
58
+ Licensor for the purpose of discussing and improving the Work, but
59
+ excluding communication that is conspicuously marked or otherwise
60
+ designated in writing by the copyright owner as "Not a Contribution."
61
+
62
+ "Contributor" shall mean Licensor and any individual or Legal Entity
63
+ on behalf of whom a Contribution has been received by Licensor and
64
+ subsequently incorporated within the Work.
65
+
66
+ 2. Grant of Copyright License. Subject to the terms and conditions of
67
+ this License, each Contributor hereby grants to You a perpetual,
68
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69
+ copyright license to reproduce, prepare Derivative Works of,
70
+ publicly display, publicly perform, sublicense, and distribute the
71
+ Work and such Derivative Works in Source or Object form.
72
+
73
+ 3. Grant of Patent License. Subject to the terms and conditions of
74
+ this License, each Contributor hereby grants to You a perpetual,
75
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76
+ (except as stated in this section) patent license to make, have made,
77
+ use, offer to sell, sell, import, and otherwise transfer the Work,
78
+ where such license applies only to those patent claims licensable
79
+ by such Contributor that are necessarily infringed by their
80
+ Contribution(s) alone or by combination of their Contribution(s)
81
+ with the Work to which such Contribution(s) was submitted. If You
82
+ institute patent litigation against any entity (including a
83
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
84
+ or a Contribution incorporated within the Work constitutes direct
85
+ or contributory patent infringement, then any patent licenses
86
+ granted to You under this License for that Work shall terminate
87
+ as of the date such litigation is filed.
88
+
89
+ 4. Redistribution. You may reproduce and distribute copies of the
90
+ Work or Derivative Works thereof in any medium, with or without
91
+ modifications, and in Source or Object form, provided that You
92
+ meet the following conditions:
93
+
94
+ (a) You must give any other recipients of the Work or
95
+ Derivative Works a copy of this License; and
96
+
97
+ (b) You must cause any modified files to carry prominent notices
98
+ stating that You changed the files; and
99
+
100
+ (c) You must retain, in the Source form of any Derivative Works
101
+ that You distribute, all copyright, patent, trademark, and
102
+ attribution notices from the Source form of the Work,
103
+ excluding those notices that do not pertain to any part of
104
+ the Derivative Works; and
105
+
106
+ (d) If the Work includes a "NOTICE" text file as part of its
107
+ distribution, then any Derivative Works that You distribute must
108
+ include a readable copy of the attribution notices contained
109
+ within such NOTICE file, excluding those notices that do not
110
+ pertain to any part of the Derivative Works, in at least one
111
+ of the following places: within a NOTICE text file distributed
112
+ as part of the Derivative Works; within the Source form or
113
+ documentation, if provided along with the Derivative Works; or,
114
+ within a display generated by the Derivative Works, if and
115
+ wherever such third-party notices normally appear. The contents
116
+ of the NOTICE file are for informational purposes only and
117
+ do not modify the License. You may add Your own attribution
118
+ notices within Derivative Works that You distribute, alongside
119
+ or as an addendum to the NOTICE text from the Work, provided
120
+ that such additional attribution notices cannot be construed
121
+ as modifying the License.
122
+
123
+ You may add Your own copyright statement to Your modifications and
124
+ may provide additional or different license terms and conditions
125
+ for use, reproduction, or distribution of Your modifications, or
126
+ for any such Derivative Works as a whole, provided Your use,
127
+ reproduction, and distribution of the Work otherwise complies with
128
+ the conditions stated in this License.
129
+
130
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
131
+ any Contribution intentionally submitted for inclusion in the Work
132
+ by You to the Licensor shall be under the terms and conditions of
133
+ this License, without any additional terms or conditions.
134
+ Notwithstanding the above, nothing herein shall supersede or modify
135
+ the terms of any separate license agreement you may have executed
136
+ with Licensor regarding such Contributions.
137
+
138
+ 6. Trademarks. This License does not grant permission to use the trade
139
+ names, trademarks, service marks, or product names of the Licensor,
140
+ except as required for reasonable and customary use in describing the
141
+ origin of the Work and reproducing the content of the NOTICE file.
142
+
143
+ 7. Disclaimer of Warranty. Unless required by applicable law or
144
+ agreed to in writing, Licensor provides the Work (and each
145
+ Contributor provides its Contributions) on an "AS IS" BASIS,
146
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147
+ implied, including, without limitation, any warranties or conditions
148
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149
+ PARTICULAR PURPOSE. You are solely responsible for determining the
150
+ appropriateness of using or redistributing the Work and assume any
151
+ risks associated with Your exercise of permissions under this License.
152
+
153
+ 8. Limitation of Liability. In no event and under no legal theory,
154
+ whether in tort (including negligence), contract, or otherwise,
155
+ unless required by applicable law (such as deliberate and grossly
156
+ negligent acts) or agreed to in writing, shall any Contributor be
157
+ liable to You for damages, including any direct, indirect, special,
158
+ incidental, or consequential damages of any character arising as a
159
+ result of this License or out of the use or inability to use the
160
+ Work (including but not limited to damages for loss of goodwill,
161
+ work stoppage, computer failure or malfunction, or any and all
162
+ other commercial damages or losses), even if such Contributor
163
+ has been advised of the possibility of such damages.
164
+
165
+ 9. Accepting Warranty or Additional Liability. While redistributing
166
+ the Work or Derivative Works thereof, You may choose to offer,
167
+ and charge a fee for, acceptance of support, warranty, indemnity,
168
+ or other liability obligations and/or rights consistent with this
169
+ License. However, in accepting such obligations, You may act only
170
+ on Your own behalf and on Your sole responsibility, not on behalf
171
+ of any other Contributor, and only if You agree to indemnify,
172
+ defend, and hold each Contributor harmless for any liability
173
+ incurred by, or claims asserted against, such Contributor by reason
174
+ of your accepting any such warranty or additional liability.
175
+
176
+ END OF TERMS AND CONDITIONS
177
+
178
+ APPENDIX: How to apply the Apache License to your work.
179
+
180
+ To apply the Apache License to your work, attach the following
181
+ boilerplate notice, with the fields enclosed by brackets "[]"
182
+ replaced with your own identifying information. (Don't include
183
+ the brackets!) The text should be enclosed in the appropriate
184
+ comment syntax for the file format. We also recommend that a
185
+ file or class name and description of purpose be included on the
186
+ same "printed page" as the copyright notice for easier
187
+ identification within third-party archives.
188
+
189
+ Copyright [yyyy] [name of copyright owner]
190
+
191
+ Licensed under the Apache License, Version 2.0 (the "License");
192
+ you may not use this file except in compliance with the License.
193
+ You may obtain a copy of the License at
194
+
195
+ http://www.apache.org/licenses/LICENSE-2.0
196
+
197
+ Unless required by applicable law or agreed to in writing, software
198
+ distributed under the License is distributed on an "AS IS" BASIS,
199
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200
+ See the License for the specific language governing permissions and
201
+ limitations under the License.
data/README.md ADDED
@@ -0,0 +1,80 @@
1
+ # Momento
2
+
3
+ Client for Momento serverless caching service.
4
+
5
+ ## Installation
6
+
7
+ Install the gem and add to an application's Gemfile by executing:
8
+
9
+ $ bundle add momento
10
+
11
+ If bundler is not being used to manage dependencies, install the gem by executing:
12
+
13
+ $ gem install momento
14
+
15
+ ### M1 or M2 Macs
16
+
17
+ If you're using an M1 or M2 Mac, [you may have trouble installing the `grpc` gem](https://github.com/grpc/grpc/issues/31215).
18
+
19
+ [A work around](https://github.com/grpc/grpc/pull/31151#issuecomment-1310321807) is to run `bundle config build.grpc --with-ldflags="-Wl,-undefined,dynamic_lookup"` before doing `bundle install`.
20
+
21
+ ## Requirements
22
+
23
+ * A Momento Auth Token is required, you can generate one using the Momento CLI
24
+ * Ruby >= 2.7
25
+
26
+ ## Usage
27
+
28
+ ```
29
+ require 'momento'
30
+
31
+ # Get your Momento token from an environment variable.
32
+ token = ENV.fetch('MOMENTO_AUTH_TOKEN')
33
+
34
+ # Cached items will be deleted after 30 seconds.
35
+ ttl = 30_000
36
+
37
+ # Instantiate a Momento client.
38
+ client = Momento::SimpleCacheClient.new(
39
+ auth_token: token,
40
+ default_ttl: ttl
41
+ )
42
+
43
+ # Create a cache named "test_cache" to play with.
44
+ response = client.create_cache("test_cache")
45
+ if response.success? || response.already_exists?
46
+ puts "Created the cache, or it already exists."
47
+ elsif response.error?
48
+ raise "Couldn't create a cache: #{response}"
49
+ else
50
+ raise
51
+ end
52
+
53
+ # Put an item in the cache.
54
+ response = client.set("test_cache", "key", "You cached something!")
55
+ if response.success?
56
+ puts "Set an item in the cache."
57
+ elsif response.error?
58
+ raise "Couldn't set an item in the cache: #{response}"
59
+ else
60
+ raise
61
+ end
62
+
63
+ # And get it back.
64
+ response = client.get("test_cache", "key")
65
+ if response.hit?
66
+ puts "Cache returned: #{response.value}"
67
+ elsif response.miss?
68
+ puts "The item wasn't found in the cache."
69
+ elsif response.error?
70
+ raise "Couldn't get an item from the cache: #{response}"
71
+ else
72
+ raise
73
+ end
74
+ ```
75
+
76
+ You can run this code from [examples/basic.rb](examples/basic.rb).
77
+
78
+ ## Contributing
79
+
80
+ See our [instructions for CONTRIBUTING](./CONTRIBUTING.md).
data/Rakefile ADDED
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "bundler/gem_tasks"
4
+ require "rspec/core/rake_task"
5
+
6
+ RSpec::Core::RakeTask.new(:spec)
7
+
8
+ require "rubocop/rake_task"
9
+
10
+ RuboCop::RakeTask.new
11
+
12
+ task default: %i[spec rubocop]
data/examples/basic.rb ADDED
@@ -0,0 +1,45 @@
1
+ require 'momento'
2
+
3
+ # Get your Momento token from an environment variable.
4
+ token = ENV.fetch('MOMENTO_AUTH_TOKEN')
5
+
6
+ # Cached items will be deleted after 30 seconds.
7
+ ttl = 30_000
8
+
9
+ # Instantiate a Momento client.
10
+ client = Momento::SimpleCacheClient.new(
11
+ auth_token: token,
12
+ default_ttl: ttl
13
+ )
14
+
15
+ # Create a cache named "test_cache" to play with.
16
+ response = client.create_cache("test_cache")
17
+ if response.success? || response.already_exists?
18
+ puts "Created the cache, or it already exists."
19
+ elsif response.error?
20
+ raise "Couldn't create a cache: #{response}"
21
+ else
22
+ raise
23
+ end
24
+
25
+ # Put an item in the cache.
26
+ response = client.set("test_cache", "key", "You cached something!")
27
+ if response.success?
28
+ puts "Set an item in the cache."
29
+ elsif response.error?
30
+ raise "Couldn't set an item in the cache: #{response}"
31
+ else
32
+ raise
33
+ end
34
+
35
+ # And get it back.
36
+ response = client.get("test_cache", "key")
37
+ if response.hit?
38
+ puts "Cache returned: #{response.value}"
39
+ elsif response.miss?
40
+ puts "The item wasn't found in the cache."
41
+ elsif response.error?
42
+ raise "Couldn't get an item from the cache: #{response}"
43
+ else
44
+ raise
45
+ end
@@ -0,0 +1,28 @@
1
+ # 1. Fix the generated code.
2
+
3
+ Currently, the Ruby code generated by gRPC will not compile.
4
+ See https://github.com/momentohq/client-sdk-ruby/issues/12
5
+
6
+ If #12 is not fixed, here are the steps to fix the PB classes.
7
+
8
+ 1. Generate them as normal using grpc_tools_ruby_protoc.
9
+ 2. Remove the leading `PB__` from the constants in ControlClient and CacheClient.
10
+ 3. Remove the leading `_` from the ControlClient and CacheClient references in the Service classes.
11
+
12
+ Or...
13
+
14
+ ```
15
+ perl -i -p -e 's{PB__}{}g' lib/*_pb.rb
16
+ perl -i -p -e 's{\b_}{}g' lib/*_services_pb.rb
17
+ ```
18
+
19
+ # 2. Place the generated classes under the Momento module.
20
+
21
+ The generated classes are at the top level. That is unacceptable for a gem.
22
+
23
+ Put them in their own namespace.
24
+
25
+ 1. Wrap the modules in `module Momento`.
26
+ 2. In the *_services_pb.rb files, change the module names.
27
+ * rename ::ControlClient to ::Momento::ControlClient
28
+ * rename ::CacheClient to ::Momento::CacheClient