teton 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
[![Gem Version](https://badge.fury.io/rb/teton.svg)](https://badge.fury.io/rb/teton) [![Ruby Gem CI](https://github.com/mattruggio/teton/actions/workflows/rubygem.yml/badge.svg)](https://github.com/mattruggio/teton/actions/workflows/rubygem.yml) [![Maintainability](https://api.codeclimate.com/v1/badges/787a5d512223e85efd69/maintainability)](https://codeclimate.com/github/mattruggio/teton/maintainability) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](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: []
|