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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d7ad39d7137de961ad7d5a3998b4e47acf2e500b18c4c22872d6d4267c921c14
4
- data.tar.gz: 482665fcf1eb5722ebf0942c6e521d0f4b673cb51e30378cdb0e72a448997728
3
+ metadata.gz: d2f6afaa1eb4dfe12d0b23863245fed79c2bceaa2d4b07a800d6139f25ff4c11
4
+ data.tar.gz: ef76a7d071a37b57ad42872b8ce08acff77ceb613c5d8fbcdbd180ae5066b6c1
5
5
  SHA512:
6
- metadata.gz: d5b1958c7a3c414c8a7b2ae32d94f84ca21c615d0752cab9d41676f2cc2edca33d16107235ec52d665ecaed04a9ababa88f855c68a6b7f063ba5cd896aef9584
7
- data.tar.gz: c5b55bf5b7f9567999159a528739a24e687afcdbffab569b5b037bf184990eb98cdc47068b83bf4683eabfa27a921029e9e8876905c4e886298e9769f05cf406
6
+ metadata.gz: 86b6bbe5171e50157b17bf4a1ba79852950b331c8e1f13e5219f81363228341cfd7f9166830ced1ef2d0cd93ff6d29580a49f31e50ac35aadcb8e64beedfb978
7
+ data.tar.gz: d11b34ef26630fac36b37ebe45bbc63d768fe7a96db17df10f9cf8e65f68da5dda2b440f1add108a816e00d20ca6cd2df4a314ab4102ebb3b931cbd10d756335
data/.rspec CHANGED
@@ -1,3 +1,3 @@
1
- --format documentation
1
+ --format progress
2
2
  --color
3
3
  --require spec_helper
data/.rspecrc ADDED
@@ -0,0 +1,4 @@
1
+ --color
2
+ --profile
3
+ --progress
4
+
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
- 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)
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
- entity.last_updated_at = DateTime.now.to_s
101
- SDBM.open(@data_dir) do |db|
102
- db[entity.uid] = @serializer.dump(entity.to_hash)
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
- SDBM.open(@data_dir) do |db|
116
- db.delete(entity.uid)
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
- SDBM.open(@data_dir) do |db|
128
- data = db[uid]
129
- return unless data
132
+ @mutex.synchronize do
133
+ SDBM.open(@data_dir) do |db|
134
+ data = db[uid]
135
+ return unless data
130
136
 
131
- entity = @entity_class.new
132
- entity.from_hash(uid, @serializer.load(data))
133
- entity
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
- result = []
141
- SDBM.open(@data_dir) do |db|
142
- db.each do |key, value|
143
- entity = @entity_class.new
144
- entity.from_hash(key, @serializer.load(value))
145
- result << entity unless entity.deleted
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
- self.uid = uid
163
- data_hash&.each do |attribute, value|
164
- attribute = attribute.to_sym
165
- if respond_to?(:"#{attribute}=")
166
- send(:"#{attribute}=", value)
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 'sequel'
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Dddr
4
- VERSION = "2.2.0"
4
+ VERSION = "2.3.0"
5
5
  end
data/lib/dddr.rb CHANGED
@@ -3,12 +3,12 @@
3
3
  require "sdbm"
4
4
  require "securerandom"
5
5
  require "date"
6
- require 'csv'
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
- @engine.dump(obj)
40
+ @mutex.synchronize do
41
+ @engine.dump(obj)
42
+ end
39
43
  end
40
44
 
41
45
  def load(obj)
42
- @engine.load(obj)
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.2.0
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-02-15 00:00:00.000000000 Z
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: '1.0'
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: '1.0'
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: '5.32'
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: '5.32'
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: '3.11'
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: '3.11'
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