teton 0.0.2 → 0.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +3 -0
- data/README.md +11 -7
- data/lib/teton/db.rb +12 -2
- data/lib/teton/entry.rb +1 -1
- data/lib/teton/stores/memory.rb +11 -5
- data/lib/teton/version.rb +1 -1
- data/teton.gemspec +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 84509199f54853bad7c82f951f2a83e2bfc1965058f3055f03449234d434ac3d
|
4
|
+
data.tar.gz: be10440a0380bf6e2a9df385f4a6bfec59da3d337c2991632d4bd13364e80136
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8b85202b1785bce00ff27aaba9e615b6d00db61cdde2eec3a9af2fa661538536d06ab7c9f8e109b3b413577a156f35a3cc54f4772d512ee99c7d2e54a133d925
|
7
|
+
data.tar.gz: 231fd68d9615505527dbc2e774b8a5fa7f78418a77296c2670bce272fe5a4c7cc42a4c1051d9b66d02e1b84e5647b6a0e4df103173e7dc3dddcb3efc18271a8c
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
[](https://badge.fury.io/rb/teton) [](https://github.com/mattruggio/teton/actions/workflows/rubygem.yml) [](https://codeclimate.com/github/mattruggio/teton/maintainability) [](https://opensource.org/licenses/MIT)
|
4
4
|
|
5
|
-
#### Hierarchical key-value object store
|
5
|
+
#### Hierarchical key-value object store
|
6
6
|
|
7
7
|
---
|
8
8
|
|
@@ -26,12 +26,16 @@ bundle add teton
|
|
26
26
|
|
27
27
|
The main API is made up of these instance methods:
|
28
28
|
|
29
|
-
Method
|
30
|
-
|
31
|
-
`Db#set(key, data)`
|
32
|
-
`Db#get(key)`
|
33
|
-
`Db#del(key)`
|
34
|
-
`Db#count(key)`
|
29
|
+
Method | Description
|
30
|
+
---------------------------------------| --------------------------------------------------------------
|
31
|
+
`Db#set(key, data = {})` | Set an entries data to the passed in values.
|
32
|
+
`Db#get(key, limit: nil, skip: nil)` | Get the entry if it exists or nil if it does not. If the key is a resource then it will always return an array.
|
33
|
+
`Db#del(key)` | Delete the key and all children of the key from the store.
|
34
|
+
`Db#count(key)` | The number of entries directly under a key if the key is a resource. If they key is an entry then 1 if the entry exists and 0 if it does not exist.
|
35
|
+
|
36
|
+
Note(s):
|
37
|
+
|
38
|
+
* limit and skip are optional and only apply to resource keys, not entry keys.
|
35
39
|
|
36
40
|
#### Setting Up Database
|
37
41
|
|
data/lib/teton/db.rb
CHANGED
@@ -30,8 +30,12 @@ module Teton
|
|
30
30
|
self
|
31
31
|
end
|
32
32
|
|
33
|
-
def get(key)
|
34
|
-
store.get(
|
33
|
+
def get(key, limit: nil, skip: nil)
|
34
|
+
store.get(
|
35
|
+
key(key),
|
36
|
+
limit: zero_floor_or_nil(limit),
|
37
|
+
skip: zero_floor_or_nil(skip)
|
38
|
+
)
|
35
39
|
end
|
36
40
|
|
37
41
|
def del(key)
|
@@ -44,6 +48,12 @@ module Teton
|
|
44
48
|
|
45
49
|
private
|
46
50
|
|
51
|
+
def zero_floor_or_nil(value)
|
52
|
+
return unless value
|
53
|
+
|
54
|
+
value ? [value, 0].max : nil
|
55
|
+
end
|
56
|
+
|
47
57
|
def key(key)
|
48
58
|
key.is_a?(Key) ? key : Key.new(key, separator: separator)
|
49
59
|
end
|
data/lib/teton/entry.rb
CHANGED
data/lib/teton/stores/memory.rb
CHANGED
@@ -27,13 +27,13 @@ module Teton
|
|
27
27
|
self
|
28
28
|
end
|
29
29
|
|
30
|
-
def get(key)
|
30
|
+
def get(key, limit: nil, skip: nil)
|
31
31
|
store_pointer = traverse_to_last(key)
|
32
32
|
|
33
33
|
return unless store_pointer
|
34
34
|
|
35
35
|
if key.resource?
|
36
|
-
entries(key, store_pointer, key.last_part)
|
36
|
+
entries(key, store_pointer, key.last_part, limit: limit, skip: skip)
|
37
37
|
else
|
38
38
|
entry(key, store_pointer, key.last_part)
|
39
39
|
end
|
@@ -158,14 +158,20 @@ module Teton
|
|
158
158
|
)
|
159
159
|
end
|
160
160
|
|
161
|
-
def entries(key, pointer, part)
|
161
|
+
def entries(key, pointer, part, limit: nil, skip: nil)
|
162
162
|
pointer = pointer.dig(part, IDS_KEY)
|
163
163
|
|
164
164
|
return [] unless pointer
|
165
165
|
|
166
|
-
|
166
|
+
start_index = skip || 0
|
167
|
+
end_index = limit ? (start_index + limit - 1) : -1
|
168
|
+
selected_keys = pointer.keys[start_index..end_index] || []
|
169
|
+
|
170
|
+
selected_keys.map do |selected_key|
|
171
|
+
value = pointer[selected_key]
|
172
|
+
|
167
173
|
Entry.new(
|
168
|
-
key.to_s(
|
174
|
+
key.to_s(selected_key),
|
169
175
|
data: value[DATA_KEY],
|
170
176
|
created_at: value[META_KEY][CREATED_AT_KEY],
|
171
177
|
updated_at: value[META_KEY][UPDATED_AT_KEY]
|
data/lib/teton/version.rb
CHANGED
data/teton.gemspec
CHANGED
@@ -5,7 +5,7 @@ require './lib/teton/version'
|
|
5
5
|
Gem::Specification.new do |s|
|
6
6
|
s.name = 'teton'
|
7
7
|
s.version = Teton::VERSION
|
8
|
-
s.summary = 'Hierarchical key-value object store
|
8
|
+
s.summary = 'Hierarchical key-value object store.'
|
9
9
|
|
10
10
|
s.description = 'Store key-value pair objects in a discoverable hierarchy. Provides a pluggable interface for multiple back-ends.'
|
11
11
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: teton
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matthew Ruggio
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-09-
|
11
|
+
date: 2022-09-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler-audit
|
@@ -214,5 +214,5 @@ requirements: []
|
|
214
214
|
rubygems_version: 3.1.6
|
215
215
|
signing_key:
|
216
216
|
specification_version: 4
|
217
|
-
summary: Hierarchical key-value object store
|
217
|
+
summary: Hierarchical key-value object store.
|
218
218
|
test_files: []
|