dddr 2.2.0 → 2.3.0
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/.rspec +1 -1
- data/.rspecrc +4 -0
- data/lib/dddr/sdbm.rb +49 -38
- data/lib/dddr/sequel.rb +7 -11
- data/lib/dddr/version.rb +1 -1
- data/lib/dddr.rb +11 -6
- metadata +15 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d2f6afaa1eb4dfe12d0b23863245fed79c2bceaa2d4b07a800d6139f25ff4c11
|
4
|
+
data.tar.gz: ef76a7d071a37b57ad42872b8ce08acff77ceb613c5d8fbcdbd180ae5066b6c1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 86b6bbe5171e50157b17bf4a1ba79852950b331c8e1f13e5219f81363228341cfd7f9166830ced1ef2d0cd93ff6d29580a49f31e50ac35aadcb8e64beedfb978
|
7
|
+
data.tar.gz: d11b34ef26630fac36b37ebe45bbc63d768fe7a96db17df10f9cf8e65f68da5dda2b440f1add108a816e00d20ca6cd2df4a314ab4102ebb3b931cbd10d756335
|
data/.rspec
CHANGED
data/.rspecrc
ADDED
data/lib/dddr/sdbm.rb
CHANGED
@@ -31,6 +31,7 @@ module Dddr
|
|
31
31
|
|
32
32
|
class RepositoryBase
|
33
33
|
def initialize(entity_class)
|
34
|
+
@mutex = Mutex.new
|
34
35
|
@entity_class = entity_class
|
35
36
|
setup_data_directory(entity_class)
|
36
37
|
@serializer = Dddr::Serializer.new(Dddr.configuration.serializer)
|
@@ -62,31 +63,31 @@ module Dddr
|
|
62
63
|
def count
|
63
64
|
all.count
|
64
65
|
end
|
65
|
-
|
66
|
+
|
66
67
|
def to_csv
|
67
68
|
env = Dddr.configuration.env
|
68
69
|
data_dir = Dddr.configuration.data_dir
|
69
|
-
container = Dddr.configuration.container
|
70
|
+
container = Dddr.configuration.container
|
70
71
|
CSV.open("#{data_dir}/#{container}/#{env}/#{self.class.name}.csv", "w") do |csv|
|
71
72
|
csv = all.first&.to_hash&.keys
|
72
73
|
all.each do |entity|
|
73
74
|
csv << entity.to_hash.values
|
74
|
-
end
|
75
|
-
end
|
75
|
+
end
|
76
|
+
end
|
76
77
|
end
|
77
78
|
|
78
|
-
|
79
|
-
|
80
79
|
def add(entity)
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
80
|
+
@mutex.synchronize do
|
81
|
+
uid = SecureRandom.uuid
|
82
|
+
entity.uid = uid
|
83
|
+
entity.created_at ||= DateTime.now.to_s
|
84
|
+
entity.last_updated_at ||= entity.created_at
|
85
|
+
|
86
|
+
SDBM.open(@data_dir) do |db|
|
87
|
+
db[uid] = @serializer.dump(entity.to_hash)
|
88
|
+
end
|
89
|
+
uid
|
88
90
|
end
|
89
|
-
uid
|
90
91
|
end
|
91
92
|
|
92
93
|
alias_method :create, :add
|
@@ -97,11 +98,13 @@ module Dddr
|
|
97
98
|
|
98
99
|
def update(entity)
|
99
100
|
return unless entity.uid
|
100
|
-
|
101
|
-
|
102
|
-
|
101
|
+
@mutex.synchronize do
|
102
|
+
entity.last_updated_at = DateTime.now.to_s
|
103
|
+
SDBM.open(@data_dir) do |db|
|
104
|
+
db[entity.uid] = @serializer.dump(entity.to_hash)
|
105
|
+
end
|
106
|
+
entity
|
103
107
|
end
|
104
|
-
entity
|
105
108
|
end
|
106
109
|
|
107
110
|
alias_method :modify, :update
|
@@ -112,8 +115,10 @@ module Dddr
|
|
112
115
|
|
113
116
|
def delete(entity)
|
114
117
|
return unless entity.uid
|
115
|
-
|
116
|
-
|
118
|
+
@mutex.synchronize do
|
119
|
+
SDBM.open(@data_dir) do |db|
|
120
|
+
db.delete(entity.uid)
|
121
|
+
end
|
117
122
|
end
|
118
123
|
end
|
119
124
|
|
@@ -124,28 +129,32 @@ module Dddr
|
|
124
129
|
alias_method :wipe, :delete
|
125
130
|
|
126
131
|
def get(uid)
|
127
|
-
|
128
|
-
|
129
|
-
|
132
|
+
@mutex.synchronize do
|
133
|
+
SDBM.open(@data_dir) do |db|
|
134
|
+
data = db[uid]
|
135
|
+
return unless data
|
130
136
|
|
131
|
-
|
132
|
-
|
133
|
-
|
137
|
+
entity = @entity_class.new
|
138
|
+
entity.from_hash(uid, @serializer.load(data))
|
139
|
+
entity
|
140
|
+
end
|
134
141
|
end
|
135
142
|
end
|
136
143
|
|
137
144
|
alias_method :find, :get
|
138
145
|
|
139
146
|
def all
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
147
|
+
@mutex.synchronize do
|
148
|
+
result = []
|
149
|
+
SDBM.open(@data_dir) do |db|
|
150
|
+
db.each do |key, value|
|
151
|
+
entity = @entity_class.new
|
152
|
+
entity.from_hash(key, @serializer.load(value))
|
153
|
+
result << entity unless entity.deleted
|
154
|
+
end
|
146
155
|
end
|
156
|
+
result
|
147
157
|
end
|
148
|
-
result
|
149
158
|
end
|
150
159
|
end
|
151
160
|
|
@@ -159,11 +168,13 @@ module Dddr
|
|
159
168
|
end
|
160
169
|
|
161
170
|
def from_hash(uid, data_hash)
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
171
|
+
Mutex.new.synchronize do
|
172
|
+
self.uid = uid
|
173
|
+
data_hash&.each do |attribute, value|
|
174
|
+
attribute = attribute.to_sym
|
175
|
+
if respond_to?(:"#{attribute}=")
|
176
|
+
send(:"#{attribute}=", value)
|
177
|
+
end
|
167
178
|
end
|
168
179
|
end
|
169
180
|
end
|
data/lib/dddr/sequel.rb
CHANGED
@@ -1,11 +1,10 @@
|
|
1
|
-
require
|
1
|
+
require "sequel"
|
2
2
|
|
3
3
|
::Sequel::Model.plugin :timestamps
|
4
4
|
|
5
5
|
module Dddr
|
6
6
|
module Sequel
|
7
7
|
module ClassMethods
|
8
|
-
|
9
8
|
def create_properties(*names)
|
10
9
|
names.each do |name|
|
11
10
|
name.each do |name|
|
@@ -16,7 +15,7 @@ module Dddr
|
|
16
15
|
|
17
16
|
def from_row(row)
|
18
17
|
item = new
|
19
|
-
item.from_hash(row[:uid],row)
|
18
|
+
item.from_hash(row[:uid], row)
|
20
19
|
item
|
21
20
|
end
|
22
21
|
|
@@ -54,12 +53,11 @@ module Dddr
|
|
54
53
|
end
|
55
54
|
|
56
55
|
class RepositoryBase
|
57
|
-
|
58
56
|
attr_reader :dataset
|
59
57
|
|
60
58
|
def initialize(entity_class)
|
61
59
|
@entity_class = entity_class
|
62
|
-
@dataset = Dddr.configuration.db[@entity_class.table]
|
60
|
+
@dataset = Dddr.configuration.db[@entity_class.table]
|
63
61
|
@entity_class.create_properties(@dataset.columns)
|
64
62
|
end
|
65
63
|
|
@@ -78,8 +76,7 @@ module Dddr
|
|
78
76
|
|
79
77
|
def update(entity)
|
80
78
|
@dataset.where(uid: entity.uid).update(entity.to_hash)
|
81
|
-
|
82
|
-
end
|
79
|
+
end
|
83
80
|
|
84
81
|
alias_method :modify, :update
|
85
82
|
alias_method :change, :update
|
@@ -101,7 +98,7 @@ module Dddr
|
|
101
98
|
row = @dataset.where(uid: uid).first
|
102
99
|
raise Dddr::Error, "UID is required" unless row
|
103
100
|
item = Item.new
|
104
|
-
item.from_hash(uid,row)
|
101
|
+
item.from_hash(uid, row)
|
105
102
|
item
|
106
103
|
end
|
107
104
|
|
@@ -110,7 +107,7 @@ module Dddr
|
|
110
107
|
def all
|
111
108
|
@dataset.all.map do |row|
|
112
109
|
item = Item.new
|
113
|
-
item.from_hash(row[:uid],row)
|
110
|
+
item.from_hash(row[:uid], row)
|
114
111
|
item
|
115
112
|
end
|
116
113
|
end
|
@@ -124,7 +121,7 @@ module Dddr
|
|
124
121
|
end
|
125
122
|
result
|
126
123
|
end
|
127
|
-
|
124
|
+
|
128
125
|
def from_hash(uid, data_hash)
|
129
126
|
self.uid = uid
|
130
127
|
data_hash.each do |attribute, value|
|
@@ -134,6 +131,5 @@ module Dddr
|
|
134
131
|
end
|
135
132
|
end
|
136
133
|
end
|
137
|
-
|
138
134
|
end
|
139
135
|
end
|
data/lib/dddr/version.rb
CHANGED
data/lib/dddr.rb
CHANGED
@@ -3,12 +3,12 @@
|
|
3
3
|
require "sdbm"
|
4
4
|
require "securerandom"
|
5
5
|
require "date"
|
6
|
-
require
|
6
|
+
require "csv"
|
7
7
|
require "ostruct"
|
8
8
|
require "fileutils"
|
9
9
|
require "oj"
|
10
10
|
require "msgpack"
|
11
|
-
|
11
|
+
require "thread"
|
12
12
|
require_relative "dddr/sdbm"
|
13
13
|
require_relative "dddr/sequel"
|
14
14
|
require_relative "dddr/version"
|
@@ -22,8 +22,9 @@ module Dddr
|
|
22
22
|
|
23
23
|
class MessagePack
|
24
24
|
def self.load(obj)
|
25
|
-
::MessagePack.unpack(obj)
|
25
|
+
::MessagePack.unpack(obj)
|
26
26
|
end
|
27
|
+
|
27
28
|
def self.dump(obj)
|
28
29
|
obj.to_msgpack
|
29
30
|
end
|
@@ -31,15 +32,20 @@ module Dddr
|
|
31
32
|
|
32
33
|
class Serializer
|
33
34
|
def initialize(engine)
|
35
|
+
@mutex = Mutex.new
|
34
36
|
@engine = engine
|
35
37
|
end
|
36
38
|
|
37
39
|
def dump(obj)
|
38
|
-
@
|
40
|
+
@mutex.synchronize do
|
41
|
+
@engine.dump(obj)
|
42
|
+
end
|
39
43
|
end
|
40
44
|
|
41
45
|
def load(obj)
|
42
|
-
@
|
46
|
+
@mutex.synchronize do
|
47
|
+
@engine.load(obj)
|
48
|
+
end
|
43
49
|
end
|
44
50
|
end
|
45
51
|
|
@@ -55,7 +61,6 @@ module Dddr
|
|
55
61
|
class Error < StandardError; end
|
56
62
|
|
57
63
|
module Entity
|
58
|
-
|
59
64
|
def self.create_properties(*names)
|
60
65
|
names.each do |name|
|
61
66
|
attr_accessor name
|
metadata
CHANGED
@@ -1,57 +1,57 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dddr
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Delaney Burke
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-03-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sdbm
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: sequel
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: oj
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '0'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: msgpack
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -77,6 +77,7 @@ extensions: []
|
|
77
77
|
extra_rdoc_files: []
|
78
78
|
files:
|
79
79
|
- ".rspec"
|
80
|
+
- ".rspecrc"
|
80
81
|
- ".standard.yml"
|
81
82
|
- CHANGELOG.md
|
82
83
|
- CODE_OF_CONDUCT.md
|