statelydb 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +51 -0
- data/lib/api/db/delete_pb.rb +1 -1
- data/lib/api/db/get_pb.rb +1 -1
- data/lib/api/db/list_pb.rb +1 -1
- data/lib/api/db/put_pb.rb +1 -1
- data/lib/api/db/scan_root_paths_pb.rb +1 -1
- data/lib/api/db/transaction_pb.rb +1 -1
- data/lib/common/net/conn.rb +2 -5
- data/lib/key_path.rb +2 -2
- data/lib/stately_codes.rb +42 -42
- data/lib/statelydb.rb +33 -8
- data/lib/token.rb +2 -2
- data/lib/transaction/transaction.rb +9 -7
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8481aaa31dca18c89b20c17cea4e413165e0aa6677c5ba3eb522780f9f327559
|
4
|
+
data.tar.gz: cdbfd5503bc8d8882a47b3b9fbc59c591477957572d66539c8841c55d8ad2ec4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1484b054ae70123705dcb70911019173d766e16dc7c748e00ac7409b26617d87e3131d11ca3d0a65b91081f7371a787818993e81ebc6af232c9dc1f685ac951a
|
7
|
+
data.tar.gz: 85acbaf93fadc0c5928f47ef41d534ff93ea1b2ecdd08021fb78df456bc5451a8a14e889b8de539df72f32c81f05c1d5431762cd69309a408a80bc5e3e6b4342
|
data/README.md
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
# StatelyDB SDK for Ruby
|
2
|
+
|
3
|
+
This is the Ruby SDK for [StatelyDB](https://stately.cloud).
|
4
|
+
|
5
|
+
### Getting started:
|
6
|
+
|
7
|
+
##### Disclaimer:
|
8
|
+
|
9
|
+
We're still in an invite-only preview mode - if you're interested, please reach out to [preview@stately.cloud](mailto:preview@stately.cloud?subject=Early%20Access%20Program).
|
10
|
+
|
11
|
+
When you join the preview program, we'll set you up with a few bits of information:
|
12
|
+
|
13
|
+
1. `STATELY_CLIENT_ID` - a client identifier so we know what client you are.
|
14
|
+
2. `STATELY_CLIENT_SECRET` - a sensitive secret that lets your applications authenticate with the API.
|
15
|
+
3. A store ID that identifies which store in your organization you're using.
|
16
|
+
4. Access to our in-depth [Getting Started Guide].
|
17
|
+
|
18
|
+
Begin by following our [Getting Started Guide] which will help you define, generate, and publish a DB schema so that it can be used.
|
19
|
+
|
20
|
+
##### Install the SDK
|
21
|
+
|
22
|
+
```sh
|
23
|
+
gem install statelydb
|
24
|
+
```
|
25
|
+
|
26
|
+
|
27
|
+
### Usage:
|
28
|
+
|
29
|
+
Create an authenticated client, then import your item types from your generated schema module and use the client!
|
30
|
+
|
31
|
+
```ruby
|
32
|
+
require 'statelydb'
|
33
|
+
|
34
|
+
def put_my_item
|
35
|
+
# Create a client. This will use the environment variables
|
36
|
+
# STATELY_CLIENT_ID and STATELY_CLIENT_SECRET for your client.
|
37
|
+
client = StatelyDB::Client.new(store_id: <my-store-id>)
|
38
|
+
|
39
|
+
# Instantiate an item from your schema
|
40
|
+
item = StatelyDB::Types::MyItem.new(name: "Jane Doe")
|
41
|
+
|
42
|
+
# put and get the item!
|
43
|
+
put_result = client.put(item)
|
44
|
+
get_result = client.get(StatelyDB::KeyPath.with("name", "Jane Doe"))
|
45
|
+
puts put_result == get_result # true
|
46
|
+
```
|
47
|
+
|
48
|
+
---
|
49
|
+
|
50
|
+
[Getting Started Guide]: https://preview-docs.stately.cloud/guides/getting-started/
|
51
|
+
[Defining Schema]: https://preview-docs.stately.cloud/guides/defining-schema/
|
data/lib/api/db/delete_pb.rb
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
require 'google/protobuf'
|
6
6
|
|
7
7
|
|
8
|
-
descriptor_data = "\n\x0f\x64\x62/delete.proto\x12\nstately.db\"
|
8
|
+
descriptor_data = "\n\x0f\x64\x62/delete.proto\x12\nstately.db\"\x8e\x01\n\rDeleteRequest\x12\x19\n\x08store_id\x18\x01 \x01(\x04R\x07storeId\x12\x30\n\x07\x64\x65letes\x18\x03 \x03(\x0b\x32\x16.stately.db.DeleteItemR\x07\x64\x65letes\x12*\n\x11schema_version_id\x18\x05 \x01(\rR\x0fschemaVersionIdJ\x04\x08\x04\x10\x05\"\'\n\nDeleteItem\x12\x19\n\x08key_path\x18\x01 \x01(\tR\x07keyPath\"/\n\x0c\x44\x65leteResult\x12\x19\n\x08key_path\x18\x01 \x01(\tR\x07keyPathJ\x04\x08\x02\x10\x03\"D\n\x0e\x44\x65leteResponse\x12\x32\n\x07results\x18\x01 \x03(\x0b\x32\x18.stately.db.DeleteResultR\x07resultsBf\n\x0e\x63om.stately.dbB\x0b\x44\x65leteProtoP\x01\xa2\x02\x03SDX\xaa\x02\nStately.Db\xca\x02\nStately\\Db\xe2\x02\x16Stately\\Db\\GPBMetadata\xea\x02\x0bStately::Dbb\x06proto3"
|
9
9
|
|
10
10
|
pool = Google::Protobuf::DescriptorPool.generated_pool
|
11
11
|
pool.add_serialized_file(descriptor_data)
|
data/lib/api/db/get_pb.rb
CHANGED
@@ -7,7 +7,7 @@ require 'google/protobuf'
|
|
7
7
|
require 'db/item_pb'
|
8
8
|
|
9
9
|
|
10
|
-
descriptor_data = "\n\x0c\x64\x62/get.proto\x12\nstately.db\x1a\rdb/item.proto\"
|
10
|
+
descriptor_data = "\n\x0c\x64\x62/get.proto\x12\nstately.db\x1a\rdb/item.proto\"\xa3\x01\n\nGetRequest\x12\x19\n\x08store_id\x18\x01 \x01(\x04R\x07storeId\x12\'\n\x04gets\x18\x02 \x03(\x0b\x32\x13.stately.db.GetItemR\x04gets\x12\x1f\n\x0b\x61llow_stale\x18\x03 \x01(\x08R\nallowStale\x12*\n\x11schema_version_id\x18\x05 \x01(\rR\x0fschemaVersionIdJ\x04\x08\x04\x10\x05\"$\n\x07GetItem\x12\x19\n\x08key_path\x18\x01 \x01(\tR\x07keyPath\"5\n\x0bGetResponse\x12&\n\x05items\x18\x01 \x03(\x0b\x32\x10.stately.db.ItemR\x05itemsBc\n\x0e\x63om.stately.dbB\x08GetProtoP\x01\xa2\x02\x03SDX\xaa\x02\nStately.Db\xca\x02\nStately\\Db\xe2\x02\x16Stately\\Db\\GPBMetadata\xea\x02\x0bStately::Dbb\x06proto3"
|
11
11
|
|
12
12
|
pool = Google::Protobuf::DescriptorPool.generated_pool
|
13
13
|
pool.add_serialized_file(descriptor_data)
|
data/lib/api/db/list_pb.rb
CHANGED
@@ -9,7 +9,7 @@ require 'db/item_property_pb'
|
|
9
9
|
require 'db/list_token_pb'
|
10
10
|
|
11
11
|
|
12
|
-
descriptor_data = "\n\rdb/list.proto\x12\nstately.db\x1a\rdb/item.proto\x1a\x16\x64\x62/item_property.proto\x1a\x13\x64\x62/list_token.proto\"\
|
12
|
+
descriptor_data = "\n\rdb/list.proto\x12\nstately.db\x1a\rdb/item.proto\x1a\x16\x64\x62/item_property.proto\x1a\x13\x64\x62/list_token.proto\"\xbd\x02\n\x10\x42\x65ginListRequest\x12\x19\n\x08store_id\x18\x01 \x01(\x04R\x07storeId\x12&\n\x0fkey_path_prefix\x18\x02 \x01(\tR\rkeyPathPrefix\x12\x14\n\x05limit\x18\x03 \x01(\rR\x05limit\x12\x1f\n\x0b\x61llow_stale\x18\x04 \x01(\x08R\nallowStale\x12\x41\n\rsort_property\x18\x05 \x01(\x0e\x32\x1c.stately.db.SortablePropertyR\x0csortProperty\x12@\n\x0esort_direction\x18\x06 \x01(\x0e\x32\x19.stately.db.SortDirectionR\rsortDirection\x12*\n\x11schema_version_id\x18\x07 \x01(\rR\x0fschemaVersionId\"\x8b\x01\n\x0cListResponse\x12\x37\n\x06result\x18\x01 \x01(\x0b\x32\x1d.stately.db.ListPartialResultH\x00R\x06result\x12\x36\n\x08\x66inished\x18\x02 \x01(\x0b\x32\x18.stately.db.ListFinishedH\x00R\x08\x66inishedB\n\n\x08response\";\n\x11ListPartialResult\x12&\n\x05items\x18\x01 \x03(\x0b\x32\x10.stately.db.ItemR\x05items\";\n\x0cListFinished\x12+\n\x05token\x18\x01 \x01(\x0b\x32\x15.stately.db.ListTokenR\x05token*8\n\rSortDirection\x12\x12\n\x0eSORT_ASCENDING\x10\x00\x12\x13\n\x0fSORT_DESCENDING\x10\x01\x42\x64\n\x0e\x63om.stately.dbB\tListProtoP\x01\xa2\x02\x03SDX\xaa\x02\nStately.Db\xca\x02\nStately\\Db\xe2\x02\x16Stately\\Db\\GPBMetadata\xea\x02\x0bStately::Dbb\x06proto3"
|
13
13
|
|
14
14
|
pool = Google::Protobuf::DescriptorPool.generated_pool
|
15
15
|
pool.add_serialized_file(descriptor_data)
|
data/lib/api/db/put_pb.rb
CHANGED
@@ -7,7 +7,7 @@ require 'google/protobuf'
|
|
7
7
|
require 'db/item_pb'
|
8
8
|
|
9
9
|
|
10
|
-
descriptor_data = "\n\x0c\x64\x62/put.proto\x12\nstately.db\x1a\rdb/item.proto\"
|
10
|
+
descriptor_data = "\n\x0c\x64\x62/put.proto\x12\nstately.db\x1a\rdb/item.proto\"|\n\nPutRequest\x12\x19\n\x08store_id\x18\x01 \x01(\x04R\x07storeId\x12\'\n\x04puts\x18\x02 \x03(\x0b\x32\x13.stately.db.PutItemR\x04puts\x12*\n\x11schema_version_id\x18\x03 \x01(\rR\x0fschemaVersionId\"/\n\x07PutItem\x12$\n\x04item\x18\x01 \x01(\x0b\x32\x10.stately.db.ItemR\x04item\"5\n\x0bPutResponse\x12&\n\x05items\x18\x01 \x03(\x0b\x32\x10.stately.db.ItemR\x05itemsBc\n\x0e\x63om.stately.dbB\x08PutProtoP\x01\xa2\x02\x03SDX\xaa\x02\nStately.Db\xca\x02\nStately\\Db\xe2\x02\x16Stately\\Db\\GPBMetadata\xea\x02\x0bStately::Dbb\x06proto3"
|
11
11
|
|
12
12
|
pool = Google::Protobuf::DescriptorPool.generated_pool
|
13
13
|
pool.add_serialized_file(descriptor_data)
|
@@ -5,7 +5,7 @@
|
|
5
5
|
require 'google/protobuf'
|
6
6
|
|
7
7
|
|
8
|
-
descriptor_data = "\n\x18\x64\x62/scan_root_paths.proto\x12\nstately.db\"
|
8
|
+
descriptor_data = "\n\x18\x64\x62/scan_root_paths.proto\x12\nstately.db\"\x9e\x01\n\x14ScanRootPathsRequest\x12\x19\n\x08store_id\x18\x01 \x01(\x04R\x07storeId\x12\x14\n\x05limit\x18\x02 \x01(\rR\x05limit\x12)\n\x10pagination_token\x18\x03 \x01(\x0cR\x0fpaginationToken\x12*\n\x11schema_version_id\x18\x04 \x01(\rR\x0fschemaVersionId\"|\n\x15ScanRootPathsResponse\x12\x38\n\x07results\x18\x01 \x03(\x0b\x32\x1e.stately.db.ScanRootPathResultR\x07results\x12)\n\x10pagination_token\x18\x02 \x01(\x0cR\x0fpaginationToken\"/\n\x12ScanRootPathResult\x12\x19\n\x08key_path\x18\x01 \x01(\tR\x07keyPathBm\n\x0e\x63om.stately.dbB\x12ScanRootPathsProtoP\x01\xa2\x02\x03SDX\xaa\x02\nStately.Db\xca\x02\nStately\\Db\xe2\x02\x16Stately\\Db\\GPBMetadata\xea\x02\x0bStately::Dbb\x06proto3"
|
9
9
|
|
10
10
|
pool = Google::Protobuf::DescriptorPool.generated_pool
|
11
11
|
pool.add_serialized_file(descriptor_data)
|
@@ -14,7 +14,7 @@ require 'db/put_pb'
|
|
14
14
|
require 'google/protobuf/empty_pb'
|
15
15
|
|
16
16
|
|
17
|
-
descriptor_data = "\n\x14\x64\x62/transaction.proto\x12\nstately.db\x1a\x16\x64\x62/continue_list.proto\x1a\x0f\x64\x62/delete.proto\x1a\x0c\x64\x62/get.proto\x1a\rdb/item.proto\x1a\x16\x64\x62/item_property.proto\x1a\rdb/list.proto\x1a\x0c\x64\x62/put.proto\x1a\x1bgoogle/protobuf/empty.proto\"\x9f\x04\n\x12TransactionRequest\x12\x1d\n\nmessage_id\x18\x01 \x01(\rR\tmessageId\x12\x34\n\x05\x62\x65gin\x18\x02 \x01(\x0b\x32\x1c.stately.db.TransactionBeginH\x00R\x05\x62\x65gin\x12\x39\n\tget_items\x18\x03 \x01(\x0b\x32\x1a.stately.db.TransactionGetH\x00R\x08getItems\x12\x41\n\nbegin_list\x18\x04 \x01(\x0b\x32 .stately.db.TransactionBeginListH\x00R\tbeginList\x12J\n\rcontinue_list\x18\x05 \x01(\x0b\x32#.stately.db.TransactionContinueListH\x00R\x0c\x63ontinueList\x12\x39\n\tput_items\x18\x06 \x01(\x0b\x32\x1a.stately.db.TransactionPutH\x00R\x08putItems\x12\x42\n\x0c\x64\x65lete_items\x18\x07 \x01(\x0b\x32\x1d.stately.db.TransactionDeleteH\x00R\x0b\x64\x65leteItems\x12\x30\n\x06\x63ommit\x18\x08 \x01(\x0b\x32\x16.google.protobuf.EmptyH\x00R\x06\x63ommit\x12.\n\x05\x61\x62ort\x18\t \x01(\x0b\x32\x16.google.protobuf.EmptyH\x00R\x05\x61\x62ortB\t\n\x07\x63ommand\"\xc8\x02\n\x13TransactionResponse\x12\x1d\n\nmessage_id\x18\x01 \x01(\rR\tmessageId\x12\x45\n\x0bget_results\x18\x02 \x01(\x0b\x32\".stately.db.TransactionGetResponseH\x00R\ngetResults\x12\x38\n\x07put_ack\x18\x03 \x01(\x0b\x32\x1d.stately.db.TransactionPutAckH\x00R\x06putAck\x12H\n\x0clist_results\x18\x04 \x01(\x0b\x32#.stately.db.TransactionListResponseH\x00R\x0blistResults\x12=\n\x08\x66inished\x18\x05 \x01(\x0b\x32\x1f.stately.db.TransactionFinishedH\x00R\x08\x66inishedB\x08\n\x06result\"
|
17
|
+
descriptor_data = "\n\x14\x64\x62/transaction.proto\x12\nstately.db\x1a\x16\x64\x62/continue_list.proto\x1a\x0f\x64\x62/delete.proto\x1a\x0c\x64\x62/get.proto\x1a\rdb/item.proto\x1a\x16\x64\x62/item_property.proto\x1a\rdb/list.proto\x1a\x0c\x64\x62/put.proto\x1a\x1bgoogle/protobuf/empty.proto\"\x9f\x04\n\x12TransactionRequest\x12\x1d\n\nmessage_id\x18\x01 \x01(\rR\tmessageId\x12\x34\n\x05\x62\x65gin\x18\x02 \x01(\x0b\x32\x1c.stately.db.TransactionBeginH\x00R\x05\x62\x65gin\x12\x39\n\tget_items\x18\x03 \x01(\x0b\x32\x1a.stately.db.TransactionGetH\x00R\x08getItems\x12\x41\n\nbegin_list\x18\x04 \x01(\x0b\x32 .stately.db.TransactionBeginListH\x00R\tbeginList\x12J\n\rcontinue_list\x18\x05 \x01(\x0b\x32#.stately.db.TransactionContinueListH\x00R\x0c\x63ontinueList\x12\x39\n\tput_items\x18\x06 \x01(\x0b\x32\x1a.stately.db.TransactionPutH\x00R\x08putItems\x12\x42\n\x0c\x64\x65lete_items\x18\x07 \x01(\x0b\x32\x1d.stately.db.TransactionDeleteH\x00R\x0b\x64\x65leteItems\x12\x30\n\x06\x63ommit\x18\x08 \x01(\x0b\x32\x16.google.protobuf.EmptyH\x00R\x06\x63ommit\x12.\n\x05\x61\x62ort\x18\t \x01(\x0b\x32\x16.google.protobuf.EmptyH\x00R\x05\x61\x62ortB\t\n\x07\x63ommand\"\xc8\x02\n\x13TransactionResponse\x12\x1d\n\nmessage_id\x18\x01 \x01(\rR\tmessageId\x12\x45\n\x0bget_results\x18\x02 \x01(\x0b\x32\".stately.db.TransactionGetResponseH\x00R\ngetResults\x12\x38\n\x07put_ack\x18\x03 \x01(\x0b\x32\x1d.stately.db.TransactionPutAckH\x00R\x06putAck\x12H\n\x0clist_results\x18\x04 \x01(\x0b\x32#.stately.db.TransactionListResponseH\x00R\x0blistResults\x12=\n\x08\x66inished\x18\x05 \x01(\x0b\x32\x1f.stately.db.TransactionFinishedH\x00R\x08\x66inishedB\x08\n\x06result\"Y\n\x10TransactionBegin\x12\x19\n\x08store_id\x18\x01 \x01(\x04R\x07storeId\x12*\n\x11schema_version_id\x18\x02 \x01(\rR\x0fschemaVersionId\"9\n\x0eTransactionGet\x12\'\n\x04gets\x18\x01 \x03(\x0b\x32\x13.stately.db.GetItemR\x04gets\"\xd9\x01\n\x14TransactionBeginList\x12&\n\x0fkey_path_prefix\x18\x01 \x01(\tR\rkeyPathPrefix\x12\x14\n\x05limit\x18\x02 \x01(\rR\x05limit\x12\x41\n\rsort_property\x18\x03 \x01(\x0e\x32\x1c.stately.db.SortablePropertyR\x0csortProperty\x12@\n\x0esort_direction\x18\x04 \x01(\x0e\x32\x19.stately.db.SortDirectionR\rsortDirection\"y\n\x17TransactionContinueList\x12\x1d\n\ntoken_data\x18\x01 \x01(\x0cR\ttokenData\x12?\n\tdirection\x18\x04 \x01(\x0e\x32!.stately.db.ContinueListDirectionR\tdirection\"9\n\x0eTransactionPut\x12\'\n\x04puts\x18\x01 \x03(\x0b\x32\x13.stately.db.PutItemR\x04puts\"E\n\x11TransactionDelete\x12\x30\n\x07\x64\x65letes\x18\x01 \x03(\x0b\x32\x16.stately.db.DeleteItemR\x07\x64\x65letes\"@\n\x16TransactionGetResponse\x12&\n\x05items\x18\x01 \x03(\x0b\x32\x10.stately.db.ItemR\x05items\"D\n\x0bGeneratedID\x12\x14\n\x04uint\x18\x01 \x01(\x04H\x00R\x04uint\x12\x16\n\x05\x62ytes\x18\x02 \x01(\x0cH\x00R\x05\x62ytesB\x07\n\x05value\"Q\n\x11TransactionPutAck\x12<\n\rgenerated_ids\x18\x01 \x03(\x0b\x32\x17.stately.db.GeneratedIDR\x0cgeneratedIds\"\x96\x01\n\x17TransactionListResponse\x12\x37\n\x06result\x18\x01 \x01(\x0b\x32\x1d.stately.db.ListPartialResultH\x00R\x06result\x12\x36\n\x08\x66inished\x18\x02 \x01(\x0b\x32\x18.stately.db.ListFinishedH\x00R\x08\x66inishedB\n\n\x08response\"\xa7\x01\n\x13TransactionFinished\x12\x1c\n\tcommitted\x18\x01 \x01(\x08R\tcommitted\x12\x31\n\x0bput_results\x18\x02 \x03(\x0b\x32\x10.stately.db.ItemR\nputResults\x12?\n\x0e\x64\x65lete_results\x18\x03 \x03(\x0b\x32\x18.stately.db.DeleteResultR\rdeleteResultsBk\n\x0e\x63om.stately.dbB\x10TransactionProtoP\x01\xa2\x02\x03SDX\xaa\x02\nStately.Db\xca\x02\nStately\\Db\xe2\x02\x16Stately\\Db\\GPBMetadata\xea\x02\x0bStately::Dbb\x06proto3"
|
18
18
|
|
19
19
|
pool = Google::Protobuf::DescriptorPool.generated_pool
|
20
20
|
pool.add_serialized_file(descriptor_data)
|
data/lib/common/net/conn.rb
CHANGED
@@ -10,7 +10,7 @@ module StatelyDB
|
|
10
10
|
# Create a new gRPC channel
|
11
11
|
# @param [String] endpoint The endpoint to connect to
|
12
12
|
# @return [GRPC::Core::Channel] The new channel
|
13
|
-
def self.new_channel(endpoint:
|
13
|
+
def self.new_channel(endpoint:)
|
14
14
|
endpoint_uri = URI(endpoint)
|
15
15
|
creds = GRPC::Core::ChannelCredentials.new
|
16
16
|
call_creds = GRPC::Core::CallCredentials.new(proc {})
|
@@ -30,10 +30,7 @@ module StatelyDB
|
|
30
30
|
# while still successfully reading the metadata because only the soft
|
31
31
|
# limit was exceeded.
|
32
32
|
"grpc.max_metadata_size" => 8192 * 2,
|
33
|
-
"grpc.absolute_max_metadata_size" => 8192 * 2
|
34
|
-
# allow unlimited receive message length while we debug a flaky test
|
35
|
-
# https://app.clickup.com/t/8689hem75
|
36
|
-
"grpc.max_receive_message_length" => -1
|
33
|
+
"grpc.absolute_max_metadata_size" => 8192 * 2
|
37
34
|
}, creds)
|
38
35
|
end
|
39
36
|
end
|
data/lib/key_path.rb
CHANGED
@@ -10,7 +10,7 @@ module StatelyDB
|
|
10
10
|
|
11
11
|
# Appends a new path segment.
|
12
12
|
# @param [String] namespace
|
13
|
-
# @param [String] identifier
|
13
|
+
# @param [String, StatelyDB::UUID, #to_s] identifier
|
14
14
|
# @return [KeyPath]
|
15
15
|
def with(namespace, identifier = nil)
|
16
16
|
if identifier.nil?
|
@@ -38,7 +38,7 @@ module StatelyDB
|
|
38
38
|
|
39
39
|
# Appends a new path segment.
|
40
40
|
# @param [String] namespace
|
41
|
-
# @param [String] identifier
|
41
|
+
# @param [String, StatelyDB::UUID, #to_s] identifier
|
42
42
|
# @return [KeyPath]
|
43
43
|
#
|
44
44
|
# @example
|
data/lib/stately_codes.rb
CHANGED
@@ -1,46 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module StatelyCode
|
4
|
-
# StoreRequestLimitExceeded indicates that an attempt to modify a Store has
|
5
|
-
# been temporarily rejected due to exceeding global modification limits.
|
6
|
-
# StatelyDB has been notified about this error and will take necessary
|
7
|
-
# actions to correct it. In the event that the issue has not been resolved,
|
8
|
-
# please contact support.
|
9
|
-
#
|
10
|
-
# - Retryable? Yes.
|
11
|
-
STORE_REQUEST_LIMIT_EXCEEDED = "StoreRequestLimitExceeded"
|
12
|
-
|
13
|
-
# StoreThroughputExceeded indicates that the underlying Store does not have
|
14
|
-
# resources to complete the request. This may indicate a request rate is too
|
15
|
-
# high to a specific Group or that a sudden burst of traffic has exceeded a
|
16
|
-
# Store's provisioned capacity.
|
17
|
-
#
|
18
|
-
# - Retryable? Yes.
|
19
|
-
# With an exponential backoff.
|
20
|
-
STORE_THROUGHPUT_EXCEEDED = "StoreThroughputExceeded"
|
21
|
-
|
22
|
-
# ConditionalCheckFailed indicates that conditions provided to perform an
|
23
|
-
# operation were not met. For example, a condition to write an item only if
|
24
|
-
# it does not already exist. In the future StatelyDB may provide more
|
25
|
-
# information about the failed condition; if this feature is a blocker,
|
26
|
-
# please contact support.
|
27
|
-
#
|
28
|
-
# - Retryable? No.
|
29
|
-
# Typically a conditional check failure is not retryable
|
30
|
-
# unless the conditions for the operation are changed.
|
31
|
-
CONDITIONAL_CHECK_FAILED = "ConditionalCheckFailed"
|
32
|
-
|
33
|
-
# NonRecoverableTransaction indicates that conditions required for the
|
34
|
-
# transaction to succeed are not possible to meet with the current state of
|
35
|
-
# the system. This can occur when an Item has more than one key-path, and is
|
36
|
-
# written with a "must not exist" condition (e.g. with ID Generation on one
|
37
|
-
# of the keys) but another keys already maps to an existing item in the
|
38
|
-
# store. Permitting such a write would result in conflicting state; two
|
39
|
-
# independent records with aliases pointing to the same item.
|
40
|
-
#
|
41
|
-
# - Retryable? No.
|
42
|
-
NON_RECOVERABLE_TRANSACTION = "NonRecoverableTransaction"
|
43
|
-
|
44
4
|
# ConcurrentModification indicates the current transaction was aborted
|
45
5
|
# because of a non-serializable interaction with another transaction was
|
46
6
|
# detected, a stale read was detected, or because attempts to resolve an
|
@@ -65,15 +25,55 @@ module StatelyCode
|
|
65
25
|
# 3. A read or list operation detected that underlying data has changed
|
66
26
|
# since the transaction began.
|
67
27
|
#
|
68
|
-
# - Retryable
|
28
|
+
# - Retryable
|
69
29
|
# This error is immediately retryable.
|
70
30
|
CONCURRENT_MODIFICATION = "ConcurrentModification"
|
71
31
|
|
32
|
+
# ConditionalCheckFailed indicates that conditions provided to perform an
|
33
|
+
# operation were not met. For example, a condition to write an item only if
|
34
|
+
# it does not already exist. In the future StatelyDB may provide more
|
35
|
+
# information about the failed condition; if this feature is a blocker,
|
36
|
+
# please contact support.
|
37
|
+
#
|
38
|
+
# - Not Retryable
|
39
|
+
# Typically a conditional check failure is not retryable
|
40
|
+
# unless the conditions for the operation are changed.
|
41
|
+
CONDITIONAL_CHECK_FAILED = "ConditionalCheckFailed"
|
42
|
+
|
43
|
+
# NonRecoverableTransaction indicates that conditions required for the
|
44
|
+
# transaction to succeed are not possible to meet with the current state of
|
45
|
+
# the system. This can occur when an Item has more than one key-path, and is
|
46
|
+
# written with a "must not exist" condition (e.g. with ID Generation on one
|
47
|
+
# of the keys) but another keys already maps to an existing item in the
|
48
|
+
# store. Permitting such a write would result in conflicting state; two
|
49
|
+
# independent records with aliases pointing to the same item.
|
50
|
+
#
|
51
|
+
# - Not Retryable
|
52
|
+
NON_RECOVERABLE_TRANSACTION = "NonRecoverableTransaction"
|
53
|
+
|
72
54
|
# StoreInUse indicates that the underlying Store is currently in being
|
73
55
|
# updated and cannot be modified until the operation in progress has
|
74
56
|
# completed.
|
75
57
|
#
|
76
|
-
# - Retryable
|
58
|
+
# - Retryable
|
77
59
|
# This can be retried with backoff.
|
78
60
|
STORE_IN_USE = "StoreInUse"
|
61
|
+
|
62
|
+
# StoreRequestLimitExceeded indicates that an attempt to modify a Store has
|
63
|
+
# been temporarily rejected due to exceeding global modification limits.
|
64
|
+
# StatelyDB has been notified about this error and will take necessary
|
65
|
+
# actions to correct it. In the event that the issue has not been resolved,
|
66
|
+
# please contact support.
|
67
|
+
#
|
68
|
+
# - Retryable
|
69
|
+
STORE_REQUEST_LIMIT_EXCEEDED = "StoreRequestLimitExceeded"
|
70
|
+
|
71
|
+
# StoreThroughputExceeded indicates that the underlying Store does not have
|
72
|
+
# resources to complete the request. This may indicate a request rate is too
|
73
|
+
# high to a specific Group or that a sudden burst of traffic has exceeded a
|
74
|
+
# Store's provisioned capacity.
|
75
|
+
#
|
76
|
+
# - Retryable
|
77
|
+
# With an exponential backoff.
|
78
|
+
STORE_THROUGHPUT_EXCEEDED = "StoreThroughputExceeded"
|
79
79
|
end
|
data/lib/statelydb.rb
CHANGED
@@ -29,14 +29,20 @@ module StatelyDB
|
|
29
29
|
# @param store_id [Integer] the StatelyDB to use for all operations with this client.
|
30
30
|
# @param schema [Module] the schema module to use for mapping StatelyDB Items.
|
31
31
|
# @param token_provider [Common::Auth::TokenProvider] the token provider to use for authentication.
|
32
|
-
# @param
|
32
|
+
# @param endpoint [String] the endpoint to connect to.
|
33
|
+
# @param region [String] the region to connect to.
|
33
34
|
def initialize(store_id: nil,
|
34
35
|
schema: StatelyDB::Types,
|
35
36
|
token_provider: Common::Auth::Auth0TokenProvider.new,
|
36
|
-
|
37
|
+
endpoint: nil,
|
38
|
+
region: nil)
|
37
39
|
raise "store_id is required" if store_id.nil?
|
38
40
|
raise "schema is required" if schema.nil?
|
39
41
|
|
42
|
+
endpoint = self.class.make_endpoint(endpoint:, region:)
|
43
|
+
|
44
|
+
channel = Common::Net.new_channel(endpoint:)
|
45
|
+
|
40
46
|
auth_interceptor = Common::Auth::Interceptor.new(token_provider:)
|
41
47
|
error_interceptor = Common::ErrorInterceptor.new
|
42
48
|
|
@@ -74,9 +80,9 @@ module StatelyDB
|
|
74
80
|
resp.first
|
75
81
|
end
|
76
82
|
|
77
|
-
# Fetch a batch of Items from a StatelyDB Store at the given key_paths.
|
83
|
+
# Fetch a batch of up to 100 Items from a StatelyDB Store at the given key_paths.
|
78
84
|
#
|
79
|
-
# @param key_paths [String, Array<String>] the paths to the items
|
85
|
+
# @param key_paths [String, Array<String>] the paths to the items. Max 100 key paths.
|
80
86
|
# @return [Array<StatelyDB::Item>, NilClass] the items or nil if not found
|
81
87
|
# @raise [StatelyDB::Error] if the parameters are invalid or if the item is not found
|
82
88
|
#
|
@@ -171,9 +177,9 @@ module StatelyDB
|
|
171
177
|
resp.first
|
172
178
|
end
|
173
179
|
|
174
|
-
# Put a batch of Items into a StatelyDB Store.
|
180
|
+
# Put a batch of up to 50 Items into a StatelyDB Store.
|
175
181
|
#
|
176
|
-
# @param items [StatelyDB::Item, Array<StatelyDB::Item>] the items to store
|
182
|
+
# @param items [StatelyDB::Item, Array<StatelyDB::Item>] the items to store. Max 50 items.
|
177
183
|
# @return [Array<StatelyDB::Item>] the items that were stored
|
178
184
|
#
|
179
185
|
# @example
|
@@ -195,9 +201,9 @@ module StatelyDB
|
|
195
201
|
end
|
196
202
|
end
|
197
203
|
|
198
|
-
# Delete
|
204
|
+
# Delete up to 50 Items from a StatelyDB Store at the given key_paths.
|
199
205
|
#
|
200
|
-
# @param key_paths [String, Array<String>] the paths to the items
|
206
|
+
# @param key_paths [String, Array<String>] the paths to the items. Max 50 key paths.
|
201
207
|
# @raise [StatelyDB::Error::InvalidParameters] if the parameters are invalid
|
202
208
|
# @raise [StatelyDB::Error::NotFound] if the item is not found
|
203
209
|
# @return [void] nil
|
@@ -247,6 +253,25 @@ module StatelyDB
|
|
247
253
|
raise
|
248
254
|
end
|
249
255
|
|
256
|
+
# Construct the API endpoint from the region and endpoint.
|
257
|
+
# If the endpoint is provided, it will be returned as-is.
|
258
|
+
# If the region is provided and the endpoint is not,
|
259
|
+
# then the region-specific endpoint will be returned.
|
260
|
+
# If neither the region nor the endpoint is provided,
|
261
|
+
# then the default endpoint will be returned.
|
262
|
+
#
|
263
|
+
# @param endpoint [String] the endpoint to connect to
|
264
|
+
# @param region [Region] the region to connect to
|
265
|
+
# @return [String] the constructed endpoint
|
266
|
+
def self.make_endpoint(endpoint: nil, region: nil)
|
267
|
+
return endpoint unless endpoint.nil?
|
268
|
+
return "https://api.stately.cloud" if region.nil?
|
269
|
+
|
270
|
+
region = region.sub("aws-", "") if region.start_with?("aws-")
|
271
|
+
|
272
|
+
"https://#{region}.aws.api.stately.cloud"
|
273
|
+
end
|
274
|
+
|
250
275
|
private
|
251
276
|
|
252
277
|
# Process a list response from begin_list or continue_list
|
data/lib/token.rb
CHANGED
@@ -4,8 +4,8 @@ module StatelyDB
|
|
4
4
|
# The Token type contains a continuation token for list and sync operations along with metadata about the ability
|
5
5
|
# to sync or continue listing based on the last operation performed.
|
6
6
|
#
|
7
|
-
# Ths StatelyDB SDK vends this Token type for list and sync operations.
|
8
|
-
# type directly.
|
7
|
+
# Ths StatelyDB SDK vends this Token type for list and sync operations.
|
8
|
+
# Consumers should not need to construct this type directly.
|
9
9
|
class Token
|
10
10
|
# @!visibility private
|
11
11
|
attr_accessor :token_data
|
@@ -189,10 +189,12 @@ module StatelyDB
|
|
189
189
|
resp.first
|
190
190
|
end
|
191
191
|
|
192
|
-
# Fetch a batch of Items from a StatelyDB Store at the given
|
193
|
-
# inside a
|
192
|
+
# Fetch a batch of up to 100 Items from a StatelyDB Store at the given
|
193
|
+
# key_paths. Note that Items need to exist before being retrieved inside a
|
194
|
+
# transaction.
|
194
195
|
#
|
195
|
-
# @param key_paths [String, Array<String>] the paths to the items
|
196
|
+
# @param key_paths [String, Array<String>] the paths to the items. Max 100
|
197
|
+
# key paths.
|
196
198
|
# @return [Array<StatelyDB::Item>] the items
|
197
199
|
# @raise [StatelyDB::Error::InvalidParameters] if the parameters are invalid
|
198
200
|
# @raise [StatelyDB::Error::NotFound] if the item is not found
|
@@ -234,11 +236,11 @@ module StatelyDB
|
|
234
236
|
resp.first
|
235
237
|
end
|
236
238
|
|
237
|
-
# Put a batch of Items into a StatelyDB Store. Results are not returned until the transaction is
|
239
|
+
# Put a batch of up to 50 Items into a StatelyDB Store. Results are not returned until the transaction is
|
238
240
|
# committed and will be available in the Result object returned by commit. A list of identifiers
|
239
241
|
# for the items will be returned while inside the transaction block.
|
240
242
|
#
|
241
|
-
# @param items [StatelyDB::Item, Array<StatelyDB::Item>] the items to store
|
243
|
+
# @param items [StatelyDB::Item, Array<StatelyDB::Item>] the items to store. Max 50 items.
|
242
244
|
# @return [Array<StatelyDB::UUID, String, Integer, nil>] the ids of the items
|
243
245
|
#
|
244
246
|
# @example
|
@@ -274,10 +276,10 @@ module StatelyDB
|
|
274
276
|
end
|
275
277
|
end
|
276
278
|
|
277
|
-
# Delete
|
279
|
+
# Delete up to 50 Items from a StatelyDB Store at the given key_paths. Results are not returned until the transaction is
|
278
280
|
# committed and will be available in the Result object returned by commit.
|
279
281
|
#
|
280
|
-
# @param key_paths [String, Array<String>] the paths to the items
|
282
|
+
# @param key_paths [String, Array<String>] the paths to the items. Max 50 key paths.
|
281
283
|
# @return [void] nil
|
282
284
|
#
|
283
285
|
# Example:
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: statelydb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stately Cloud, Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-10-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: async
|
@@ -58,6 +58,7 @@ executables: []
|
|
58
58
|
extensions: []
|
59
59
|
extra_rdoc_files: []
|
60
60
|
files:
|
61
|
+
- README.md
|
61
62
|
- lib/api/db/continue_list_pb.rb
|
62
63
|
- lib/api/db/delete_pb.rb
|
63
64
|
- lib/api/db/get_pb.rb
|