dddr 2.2.0 → 2.3.0

Sign up to get free protection for your applications and to get access to all the features.
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