kybus-storage 0.1.3 → 0.2.1
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/lib/kybus/storage/datasource/dynamoid.rb +78 -0
- data/lib/kybus/storage/datasource/exceptions.rb +6 -4
- data/lib/kybus/storage/datasource/model.rb +2 -4
- data/lib/kybus/storage/datasource/repository.rb +1 -1
- data/lib/kybus/storage/datasource/sequel.rb +1 -0
- data/lib/kybus/storage/repository.rb +2 -0
- data/lib/kybus/version.rb +1 -1
- metadata +7 -159
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bc9a2960506781f77c4f21fbf1d6ae10706b38f60a95a663416139343bba2585
|
4
|
+
data.tar.gz: 6a7a1984c2bf1a88ab21b476dd529d07a9ecbc013d20ca39610e701385e42b03
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 15b324aef3547c83b5f4a9ad1a24ee538819116787646d092a756566e3bf60d4360adfc726c9f5ac38011a4cffa7b1fcde29065365cb002e8d99f1a4a39cd8c7
|
7
|
+
data.tar.gz: c4545c619974826646b5fca3ed9ad8916f3dedba49a6d316a4597c4799b23c6df9a40c99553920211d326b1876f7292717893e82049b9aa8cbb38316e53e5200
|
@@ -0,0 +1,78 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Kybus
|
4
|
+
module Storage
|
5
|
+
module Datasource
|
6
|
+
# Repository that fetches and stores objects using a Dynamoid connection
|
7
|
+
class DynamoidRepository < Repository
|
8
|
+
attr_reader :model_class
|
9
|
+
|
10
|
+
def self.from_config(conf)
|
11
|
+
if conf['dynamoid_config']
|
12
|
+
require 'dynamoid'
|
13
|
+
Dynamoid.configure do |config|
|
14
|
+
config.access_key = conf['access_key']
|
15
|
+
config.secret_key = conf['secret_key']
|
16
|
+
config.region = conf['region']
|
17
|
+
config.namespace = conf['namespace']
|
18
|
+
config.endpoint = conf['endpoint'] if conf['endpoint']
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
model_class = conf['schema'] || create_dynamic_model(conf)
|
23
|
+
new(model_class, conf['primary_key'].to_sym)
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.create_dynamic_model(conf)
|
27
|
+
Class.new do
|
28
|
+
include Dynamoid::Document
|
29
|
+
|
30
|
+
table name: conf['table'], key: conf['primary_key'].to_sym, read_capacity: conf['read_capacity'],
|
31
|
+
write_capacity: conf['write_capacity']
|
32
|
+
|
33
|
+
# Dynamically add fields based on configuration
|
34
|
+
conf['fields'].each do |field, type|
|
35
|
+
field field.to_sym, type.to_sym
|
36
|
+
end
|
37
|
+
|
38
|
+
# Set a constant name for the dynamic class
|
39
|
+
class_eval { const_set("DynamicModel#{conf['table'].upcase}", self) }
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def initialize(model_class, id)
|
44
|
+
@model_class = model_class
|
45
|
+
super(id, IDGenerators[:id])
|
46
|
+
end
|
47
|
+
|
48
|
+
def get(id)
|
49
|
+
result = @model_class.find(id)
|
50
|
+
raise(ObjectNotFound, id) if result.nil?
|
51
|
+
|
52
|
+
result.attributes
|
53
|
+
rescue Dynamoid::Errors::RecordNotFound
|
54
|
+
raise(ObjectNotFound, id)
|
55
|
+
end
|
56
|
+
|
57
|
+
def create_(data)
|
58
|
+
obj = @model_class.create(data)
|
59
|
+
obj.attributes
|
60
|
+
end
|
61
|
+
|
62
|
+
def store(data)
|
63
|
+
obj = @model_class.find(data[@id])
|
64
|
+
raise(ObjectNotFound, data[@id]) if obj.nil?
|
65
|
+
|
66
|
+
obj.update_attributes(data)
|
67
|
+
obj.attributes
|
68
|
+
end
|
69
|
+
|
70
|
+
def connection
|
71
|
+
@model_class.connection
|
72
|
+
end
|
73
|
+
end
|
74
|
+
Kybus::Storage::Repository.register(:repositories, :dynamoid, DynamoidRepository)
|
75
|
+
Kybus::Storage::Repository.register(:repositories, 'dynamoid', DynamoidRepository)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
@@ -6,8 +6,9 @@ module Kybus
|
|
6
6
|
module Exceptions
|
7
7
|
# Exception used when there is an object trying to be created but it
|
8
8
|
# already exists.
|
9
|
-
class ObjectAlreadyExists < Kybus::Exceptions::
|
9
|
+
class ObjectAlreadyExists < Kybus::Exceptions::KybusFail
|
10
10
|
attr_reader :id
|
11
|
+
|
11
12
|
def initialize(id, object)
|
12
13
|
@id = id
|
13
14
|
super("Object #{id} already exists", nil, object)
|
@@ -16,18 +17,19 @@ module Kybus
|
|
16
17
|
|
17
18
|
# Exception used when a value on a model violates the restrictions
|
18
19
|
# from the validators.
|
19
|
-
class ValidationErrors < Kybus::Exceptions::
|
20
|
+
class ValidationErrors < Kybus::Exceptions::KybusFail
|
20
21
|
def initialize(data)
|
21
22
|
super('Error while validating object', 'ValidationErrors', data)
|
22
23
|
end
|
23
24
|
end
|
24
25
|
|
25
26
|
# Exception used when it is requested an object that can not be found.
|
26
|
-
class ObjectNotFound < Kybus::Exceptions::
|
27
|
+
class ObjectNotFound < Kybus::Exceptions::KybusFail
|
27
28
|
attr_reader :id
|
29
|
+
|
28
30
|
def initialize(id)
|
29
31
|
@id = id
|
30
|
-
super("Object #{id} does not exist", nil, id:
|
32
|
+
super("Object #{id} does not exist", nil, id:)
|
31
33
|
end
|
32
34
|
end
|
33
35
|
end
|
@@ -10,8 +10,8 @@ module Kybus
|
|
10
10
|
# values are inside the restrictions. It dependes on a repository
|
11
11
|
# for storing values.
|
12
12
|
class Model
|
13
|
-
|
14
|
-
attr_writer :
|
13
|
+
attr_accessor :data
|
14
|
+
attr_writer :repository
|
15
15
|
|
16
16
|
# :nocov: #
|
17
17
|
def run_validations!
|
@@ -41,8 +41,6 @@ module Kybus
|
|
41
41
|
@data = data
|
42
42
|
end
|
43
43
|
|
44
|
-
attr_writer :repository
|
45
|
-
|
46
44
|
def to_json(options = nil)
|
47
45
|
@data.to_json(options)
|
48
46
|
end
|
data/lib/kybus/version.rb
CHANGED
metadata
CHANGED
@@ -1,169 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kybus-storage
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gilberto Vargas
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
12
|
-
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: kybus-core
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - "~>"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '0.1'
|
20
|
-
type: :development
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - "~>"
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '0.1'
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: minitest
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - "~>"
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '5.11'
|
34
|
-
type: :development
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - "~>"
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '5.11'
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: mocha
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - "~>"
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '1.8'
|
48
|
-
type: :development
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - "~>"
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '1.8'
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: pry
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - "~>"
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '0.12'
|
62
|
-
type: :development
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - "~>"
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: '0.12'
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: rack-minitest
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
-
requirements:
|
73
|
-
- - "~>"
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: '0.0'
|
76
|
-
type: :development
|
77
|
-
prerelease: false
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
requirements:
|
80
|
-
- - "~>"
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: '0.0'
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
name: rake
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
86
|
-
requirements:
|
87
|
-
- - "~>"
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: '12.3'
|
90
|
-
type: :development
|
91
|
-
prerelease: false
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
93
|
-
requirements:
|
94
|
-
- - "~>"
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
version: '12.3'
|
97
|
-
- !ruby/object:Gem::Dependency
|
98
|
-
name: rdoc
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
100
|
-
requirements:
|
101
|
-
- - "~>"
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
version: '6.1'
|
104
|
-
type: :development
|
105
|
-
prerelease: false
|
106
|
-
version_requirements: !ruby/object:Gem::Requirement
|
107
|
-
requirements:
|
108
|
-
- - "~>"
|
109
|
-
- !ruby/object:Gem::Version
|
110
|
-
version: '6.1'
|
111
|
-
- !ruby/object:Gem::Dependency
|
112
|
-
name: sequel
|
113
|
-
requirement: !ruby/object:Gem::Requirement
|
114
|
-
requirements:
|
115
|
-
- - "~>"
|
116
|
-
- !ruby/object:Gem::Version
|
117
|
-
version: '5.20'
|
118
|
-
type: :development
|
119
|
-
prerelease: false
|
120
|
-
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
requirements:
|
122
|
-
- - "~>"
|
123
|
-
- !ruby/object:Gem::Version
|
124
|
-
version: '5.20'
|
125
|
-
- !ruby/object:Gem::Dependency
|
126
|
-
name: simplecov
|
127
|
-
requirement: !ruby/object:Gem::Requirement
|
128
|
-
requirements:
|
129
|
-
- - "~>"
|
130
|
-
- !ruby/object:Gem::Version
|
131
|
-
version: '0.16'
|
132
|
-
type: :development
|
133
|
-
prerelease: false
|
134
|
-
version_requirements: !ruby/object:Gem::Requirement
|
135
|
-
requirements:
|
136
|
-
- - "~>"
|
137
|
-
- !ruby/object:Gem::Version
|
138
|
-
version: '0.16'
|
139
|
-
- !ruby/object:Gem::Dependency
|
140
|
-
name: sqlite3
|
141
|
-
requirement: !ruby/object:Gem::Requirement
|
142
|
-
requirements:
|
143
|
-
- - "~>"
|
144
|
-
- !ruby/object:Gem::Version
|
145
|
-
version: '1.4'
|
146
|
-
type: :development
|
147
|
-
prerelease: false
|
148
|
-
version_requirements: !ruby/object:Gem::Requirement
|
149
|
-
requirements:
|
150
|
-
- - "~>"
|
151
|
-
- !ruby/object:Gem::Version
|
152
|
-
version: '1.4'
|
153
|
-
- !ruby/object:Gem::Dependency
|
154
|
-
name: webmock
|
155
|
-
requirement: !ruby/object:Gem::Requirement
|
156
|
-
requirements:
|
157
|
-
- - "~>"
|
158
|
-
- !ruby/object:Gem::Version
|
159
|
-
version: '3.5'
|
160
|
-
type: :development
|
161
|
-
prerelease: false
|
162
|
-
version_requirements: !ruby/object:Gem::Requirement
|
163
|
-
requirements:
|
164
|
-
- - "~>"
|
165
|
-
- !ruby/object:Gem::Version
|
166
|
-
version: '3.5'
|
11
|
+
date: 2024-07-03 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
167
13
|
description: |2
|
168
14
|
This module helps to design persistance modules that are very configurable
|
169
15
|
about where and how to store data.
|
@@ -174,6 +20,7 @@ extensions: []
|
|
174
20
|
extra_rdoc_files: []
|
175
21
|
files:
|
176
22
|
- lib/kybus/storage.rb
|
23
|
+
- lib/kybus/storage/datasource/dynamoid.rb
|
177
24
|
- lib/kybus/storage/datasource/exceptions.rb
|
178
25
|
- lib/kybus/storage/datasource/id_generators.rb
|
179
26
|
- lib/kybus/storage/datasource/json_repository.rb
|
@@ -186,7 +33,8 @@ files:
|
|
186
33
|
homepage: https://github.com/tachomex/kybus
|
187
34
|
licenses:
|
188
35
|
- MIT
|
189
|
-
metadata:
|
36
|
+
metadata:
|
37
|
+
rubygems_mfa_required: 'true'
|
190
38
|
post_install_message:
|
191
39
|
rdoc_options: []
|
192
40
|
require_paths:
|
@@ -202,7 +50,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
202
50
|
- !ruby/object:Gem::Version
|
203
51
|
version: '0'
|
204
52
|
requirements: []
|
205
|
-
rubygems_version: 3.
|
53
|
+
rubygems_version: 3.5.14
|
206
54
|
signing_key:
|
207
55
|
specification_version: 4
|
208
56
|
summary: Implements storage modules for kybus framework
|