dddr 1.1.4 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/dddr/sdbm.rb +171 -0
- data/lib/dddr/sequel.rb +156 -0
- data/lib/dddr/version.rb +1 -1
- data/lib/dddr.rb +31 -151
- metadata +33 -4
- data/.DS_Store +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ee1b9dbc0e1cef170370b086fd935ff099f87efd5378b89afa82ba2ae0f0e814
|
4
|
+
data.tar.gz: f38d34f8603a8912f6c27bd888ae557b17676b8f741122fe97b05c2111337c4c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6869b30e4f3bee841144c6477426fee7234110ea4b6c3989c8bc089f656fb3927005323b914c954692fb07c11d474c0773a2925e6c2c1e97e0633ab066f9827e
|
7
|
+
data.tar.gz: 91660579732ca553de594fc54758ae83ecb2025815c10c688dd8e25befae082aee870a59c061bea9beae6b27c9e3fb090d9881f021c8ebf72f43910ae02016cc
|
data/lib/dddr/sdbm.rb
ADDED
@@ -0,0 +1,171 @@
|
|
1
|
+
module Dddr
|
2
|
+
module Sdbm
|
3
|
+
module ClassMethods
|
4
|
+
def queries(&block)
|
5
|
+
@queries_module ||= Module.new
|
6
|
+
@queries_module.module_eval(&block)
|
7
|
+
end
|
8
|
+
|
9
|
+
def const_missing(name)
|
10
|
+
if name == :Repository
|
11
|
+
create_repository_for(self)
|
12
|
+
else
|
13
|
+
super
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def create_repository_for(entity_class)
|
20
|
+
repository_class = Class.new(RepositoryBase) do
|
21
|
+
define_singleton_method(:new) do |*args|
|
22
|
+
super(entity_class)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
repository_class.include(@queries_module) if instance_variable_defined?(:@queries_module)
|
27
|
+
|
28
|
+
const_set(:Repository, repository_class)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
class RepositoryBase
|
33
|
+
def initialize(entity_class)
|
34
|
+
@entity_class = entity_class
|
35
|
+
setup_data_directory(entity_class)
|
36
|
+
@serializer = Dddr::Serializer.new(Dddr.configuration.serializer)
|
37
|
+
end
|
38
|
+
|
39
|
+
def setup_data_directory(entity_class)
|
40
|
+
env = Dddr.configuration.env
|
41
|
+
data_dir = Dddr.configuration.data_dir
|
42
|
+
container = Dddr.configuration.container
|
43
|
+
raise Dddr::Error, "Container name is required" unless container
|
44
|
+
|
45
|
+
# Construct the target directory path
|
46
|
+
@data_dir = "#{data_dir}/#{container}/#{env}/#{entity_class.name.downcase}"
|
47
|
+
|
48
|
+
begin
|
49
|
+
# Ensure all directories in the path are created
|
50
|
+
FileUtils.mkdir_p(@data_dir)
|
51
|
+
|
52
|
+
# Change ownership only if the path starts with "/var/"
|
53
|
+
if @data_dir.start_with?("/var/")
|
54
|
+
FileUtils.chown_R(ENV["USER"], nil, @data_dir)
|
55
|
+
end
|
56
|
+
rescue Errno::ENOENT => e
|
57
|
+
# Log or handle the error
|
58
|
+
raise "Failed to create or access the directory: #{e.message}"
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def count
|
63
|
+
all.count
|
64
|
+
end
|
65
|
+
|
66
|
+
def to_csv
|
67
|
+
# env = Dddr.configuration.env
|
68
|
+
# data_dir = Dddr.configuration.data_dir
|
69
|
+
# container = Dddr.configuration.container
|
70
|
+
# CSV.open("#{data_dir}/#{container}/#{env}/#{self.class.name}.csv", "w") do |csv|
|
71
|
+
# csv = all.first&.to_hash&.keys
|
72
|
+
# all.each do |entity|
|
73
|
+
# csv << entity.to_hash.values
|
74
|
+
# end
|
75
|
+
# end
|
76
|
+
end
|
77
|
+
|
78
|
+
|
79
|
+
|
80
|
+
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)
|
88
|
+
end
|
89
|
+
uid
|
90
|
+
end
|
91
|
+
|
92
|
+
alias_method :create, :add
|
93
|
+
alias_method :insert, :add
|
94
|
+
alias_method :put, :add
|
95
|
+
alias_method :append, :add
|
96
|
+
alias_method :store, :add
|
97
|
+
|
98
|
+
def update(entity)
|
99
|
+
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)
|
103
|
+
end
|
104
|
+
entity
|
105
|
+
end
|
106
|
+
|
107
|
+
alias_method :modify, :update
|
108
|
+
alias_method :change, :update
|
109
|
+
alias_method :edit, :update
|
110
|
+
alias_method :revise, :update
|
111
|
+
alias_method :alter, :update
|
112
|
+
|
113
|
+
def delete(entity)
|
114
|
+
return unless entity.uid
|
115
|
+
SDBM.open(@data_dir) do |db|
|
116
|
+
db.delete(entity.uid)
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
alias_method :remove, :delete
|
121
|
+
alias_method :erase, :delete
|
122
|
+
alias_method :discard, :delete
|
123
|
+
alias_method :destroy, :delete
|
124
|
+
alias_method :wipe, :delete
|
125
|
+
|
126
|
+
def get(uid)
|
127
|
+
SDBM.open(@data_dir) do |db|
|
128
|
+
data = db[uid]
|
129
|
+
return unless data
|
130
|
+
|
131
|
+
entity = @entity_class.new
|
132
|
+
entity.from_hash(uid, @serializer.load(data))
|
133
|
+
entity
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
alias_method :find, :get
|
138
|
+
|
139
|
+
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
|
146
|
+
end
|
147
|
+
end
|
148
|
+
result
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
def to_hash
|
153
|
+
result = {}
|
154
|
+
instance_variables.each do |var_name|
|
155
|
+
attribute_name = var_name.to_s[1..].to_sym
|
156
|
+
result[attribute_name] = instance_variable_get(var_name)
|
157
|
+
end
|
158
|
+
result
|
159
|
+
end
|
160
|
+
|
161
|
+
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)
|
167
|
+
end
|
168
|
+
end
|
169
|
+
end
|
170
|
+
end
|
171
|
+
end
|
data/lib/dddr/sequel.rb
ADDED
@@ -0,0 +1,156 @@
|
|
1
|
+
module Dddr
|
2
|
+
module Sequel
|
3
|
+
module ClassMethods
|
4
|
+
def queries(&block)
|
5
|
+
@queries_module ||= Module.new
|
6
|
+
@queries_module.module_eval(&block)
|
7
|
+
end
|
8
|
+
|
9
|
+
def const_missing(name)
|
10
|
+
if name == :Repository
|
11
|
+
create_repository_for(self)
|
12
|
+
else
|
13
|
+
super
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def create_repository_for(entity_class)
|
20
|
+
repository_class = Class.new(RepositoryBase) do
|
21
|
+
define_singleton_method(:new) do |*args|
|
22
|
+
super(entity_class)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
repository_class.include(@queries_module) if instance_variable_defined?(:@queries_module)
|
27
|
+
|
28
|
+
const_set(:Repository, repository_class)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
class RepositoryBase
|
33
|
+
def initialize(entity_class)
|
34
|
+
@entity_class = entity_class
|
35
|
+
setup_data_directory(entity_class)
|
36
|
+
end
|
37
|
+
|
38
|
+
def setup_data_directory(entity_class)
|
39
|
+
env = Dddr.configuration.env
|
40
|
+
data_dir = Dddr.configuration.data_dir
|
41
|
+
container = Dddr.configuration.container
|
42
|
+
raise Dddr::Error, "Container name is required" unless container
|
43
|
+
|
44
|
+
# Construct the target directory path
|
45
|
+
@name = "#{data_dir}/#{container}/#{env}/#{entity_class.name.downcase}"
|
46
|
+
|
47
|
+
begin
|
48
|
+
# Ensure all directories in the path are created
|
49
|
+
FileUtils.mkdir_p(@name)
|
50
|
+
|
51
|
+
# Change ownership only if the path starts with "/var/"
|
52
|
+
if @name.start_with?("/var/")
|
53
|
+
FileUtils.chown_R(ENV["USER"], nil, @name)
|
54
|
+
end
|
55
|
+
rescue Errno::ENOENT => e
|
56
|
+
# Log or handle the error
|
57
|
+
raise "Failed to create or access the directory: #{e.message}"
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def count
|
62
|
+
all.count
|
63
|
+
end
|
64
|
+
|
65
|
+
def add(entity)
|
66
|
+
uid = SecureRandom.uuid
|
67
|
+
entity.uid = uid
|
68
|
+
entity.created_at ||= DateTime.now.to_s
|
69
|
+
entity.last_updated_at ||= entity.created_at
|
70
|
+
|
71
|
+
SDBM.open(@name) do |db|
|
72
|
+
db[uid] = Marshal.dump(entity.to_hash)
|
73
|
+
end
|
74
|
+
uid
|
75
|
+
end
|
76
|
+
|
77
|
+
alias_method :create, :add
|
78
|
+
alias_method :insert, :add
|
79
|
+
alias_method :put, :add
|
80
|
+
alias_method :append, :add
|
81
|
+
alias_method :store, :add
|
82
|
+
|
83
|
+
def update(entity)
|
84
|
+
return unless entity.uid
|
85
|
+
entity.last_updated_at = DateTime.now.to_s
|
86
|
+
SDBM.open(@name) do |db|
|
87
|
+
db[entity.uid] = Marshal.dump(entity.to_hash)
|
88
|
+
end
|
89
|
+
entity
|
90
|
+
end
|
91
|
+
|
92
|
+
alias_method :modify, :update
|
93
|
+
alias_method :change, :update
|
94
|
+
alias_method :edit, :update
|
95
|
+
alias_method :revise, :update
|
96
|
+
alias_method :alter, :update
|
97
|
+
|
98
|
+
def delete(entity)
|
99
|
+
return unless entity.uid
|
100
|
+
SDBM.open(@name) do |db|
|
101
|
+
db.delete(entity.uid)
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
alias_method :remove, :delete
|
106
|
+
alias_method :erase, :delete
|
107
|
+
alias_method :discard, :delete
|
108
|
+
alias_method :destroy, :delete
|
109
|
+
alias_method :wipe, :delete
|
110
|
+
|
111
|
+
def get(uid)
|
112
|
+
SDBM.open(@name) do |db|
|
113
|
+
data = db[uid]
|
114
|
+
return unless data
|
115
|
+
|
116
|
+
entity = @entity_class.new
|
117
|
+
entity.from_hash(uid, Marshal.load(data))
|
118
|
+
entity
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
alias_method :find, :get
|
123
|
+
|
124
|
+
def all
|
125
|
+
result = []
|
126
|
+
SDBM.open(@name) do |db|
|
127
|
+
db.each do |key, value|
|
128
|
+
entity = @entity_class.new
|
129
|
+
entity.from_hash(key, Marshal.load(value))
|
130
|
+
result << entity unless entity.deleted
|
131
|
+
end
|
132
|
+
end
|
133
|
+
result
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
def to_hash
|
138
|
+
result = {}
|
139
|
+
instance_variables.each do |var_name|
|
140
|
+
attribute_name = var_name.to_s[1..].to_sym
|
141
|
+
result[attribute_name] = instance_variable_get(var_name)
|
142
|
+
end
|
143
|
+
result
|
144
|
+
end
|
145
|
+
|
146
|
+
def from_hash(uid, data_hash)
|
147
|
+
self.uid = uid
|
148
|
+
data_hash.each do |attribute, value|
|
149
|
+
attribute = attribute.to_sym
|
150
|
+
if respond_to?(:"#{attribute}=")
|
151
|
+
send(:"#{attribute}=", value)
|
152
|
+
end
|
153
|
+
end
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|
data/lib/dddr/version.rb
CHANGED
data/lib/dddr.rb
CHANGED
@@ -1,20 +1,42 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require "sdbm"
|
3
4
|
require "securerandom"
|
4
5
|
require "date"
|
6
|
+
require 'csv'
|
5
7
|
require "ostruct"
|
6
8
|
require "fileutils"
|
7
9
|
|
10
|
+
require_relative "dddr/sdbm"
|
11
|
+
require_relative "dddr/sequel"
|
8
12
|
require_relative "dddr/version"
|
9
13
|
|
10
14
|
module Dddr
|
15
|
+
ENTITIES = []
|
16
|
+
|
11
17
|
def self.configuration
|
12
18
|
@configuration ||= OpenStruct.new
|
13
19
|
end
|
14
20
|
|
21
|
+
class Serializer
|
22
|
+
def initialize(engine)
|
23
|
+
@engine = engine
|
24
|
+
end
|
25
|
+
|
26
|
+
def dump(obj)
|
27
|
+
@engine.dump(obj)
|
28
|
+
end
|
29
|
+
|
30
|
+
def load(obj)
|
31
|
+
@engine.load(obj)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
15
35
|
def self.configure
|
16
36
|
configuration.env = ENV["DDDR_ENV"] || "development"
|
17
37
|
configuration.data_dir = "/var/dddr"
|
38
|
+
configuration.engine = :sdbm
|
39
|
+
configuration.serializer = Marshal
|
18
40
|
configuration.container = nil
|
19
41
|
yield(configuration) if block_given?
|
20
42
|
end
|
@@ -23,168 +45,26 @@ module Dddr
|
|
23
45
|
|
24
46
|
module Entity
|
25
47
|
def self.included(base)
|
26
|
-
|
27
|
-
end
|
28
|
-
|
29
|
-
attr_accessor :uid, :created_at, :last_updated_at, :deleted, :deleted_at
|
30
|
-
|
31
|
-
module ClassMethods
|
32
|
-
def queries(&block)
|
33
|
-
@queries_module ||= Module.new
|
34
|
-
@queries_module.module_eval(&block)
|
35
|
-
end
|
36
|
-
|
37
|
-
def const_missing(name)
|
38
|
-
if name == :Repository
|
39
|
-
create_repository_for(self)
|
40
|
-
else
|
41
|
-
super
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
private
|
46
|
-
|
47
|
-
def create_repository_for(entity_class)
|
48
|
-
repository_class = Class.new(RepositoryBase) do
|
49
|
-
define_singleton_method(:new) do |*args|
|
50
|
-
super(entity_class)
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
repository_class.include(@queries_module) if instance_variable_defined?(:@queries_module)
|
55
|
-
|
56
|
-
const_set(:Repository, repository_class)
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
class RepositoryBase
|
61
|
-
def initialize(entity_class)
|
62
|
-
@entity_class = entity_class
|
63
|
-
setup_data_directory(entity_class)
|
64
|
-
end
|
65
|
-
|
66
|
-
def setup_data_directory(entity_class)
|
67
|
-
env = Dddr.configuration.env
|
68
|
-
data_dir = Dddr.configuration.data_dir
|
69
|
-
container = Dddr.configuration.container
|
70
|
-
raise Dddr::Error, "Container name is required" unless container
|
71
|
-
|
72
|
-
# Construct the target directory path
|
73
|
-
@name = "#{data_dir}/#{container}/#{env}/#{entity_class.name.downcase}"
|
74
|
-
|
75
|
-
begin
|
76
|
-
# Ensure all directories in the path are created
|
77
|
-
FileUtils.mkdir_p(@name)
|
78
|
-
|
79
|
-
# Change ownership only if the path starts with "/var/"
|
80
|
-
if @name.start_with?("/var/")
|
81
|
-
FileUtils.chown_R(ENV["USER"], nil, @name)
|
82
|
-
end
|
83
|
-
rescue Errno::ENOENT => e
|
84
|
-
# Log or handle the error
|
85
|
-
raise "Failed to create or access the directory: #{e.message}"
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
|
90
|
-
def count
|
91
|
-
all.count
|
92
|
-
end
|
93
|
-
|
94
|
-
def add(entity)
|
95
|
-
uid = SecureRandom.uuid
|
96
|
-
entity.uid = uid
|
97
|
-
entity.created_at ||= DateTime.now.to_s
|
98
|
-
entity.last_updated_at ||= entity.created_at
|
99
|
-
|
100
|
-
SDBM.open(@name) do |db|
|
101
|
-
db[uid] = Marshal.dump(entity.to_hash)
|
102
|
-
end
|
103
|
-
uid
|
104
|
-
end
|
48
|
+
if Dddr.configuration.engine == :sdbm
|
105
49
|
|
106
|
-
|
107
|
-
alias_method :insert, :add
|
108
|
-
alias_method :put, :add
|
109
|
-
alias_method :append, :add
|
110
|
-
alias_method :store, :add
|
111
|
-
|
112
|
-
def update(entity)
|
113
|
-
return unless entity.uid
|
114
|
-
entity.last_updated_at = DateTime.now.to_s
|
115
|
-
SDBM.open(@name) do |db|
|
116
|
-
db[entity.uid] = Marshal.dump(entity.to_hash)
|
117
|
-
end
|
118
|
-
entity
|
119
|
-
end
|
50
|
+
puts "Including #{base.name}"
|
120
51
|
|
121
|
-
|
122
|
-
alias_method :change, :update
|
123
|
-
alias_method :edit, :update
|
124
|
-
alias_method :revise, :update
|
125
|
-
alias_method :alter, :update
|
126
|
-
|
127
|
-
def delete(entity)
|
128
|
-
return unless entity.uid
|
129
|
-
SDBM.open(@name) do |db|
|
130
|
-
db.delete(entity.uid)
|
131
|
-
end
|
132
|
-
end
|
52
|
+
Dddr::ENTITIES << base
|
133
53
|
|
134
|
-
|
135
|
-
|
136
|
-
alias_method :discard, :delete
|
137
|
-
alias_method :destroy, :delete
|
138
|
-
alias_method :wipe, :delete
|
139
|
-
|
140
|
-
def get(uid)
|
141
|
-
SDBM.open(@name) do |db|
|
142
|
-
data = db[uid]
|
143
|
-
return unless data
|
144
|
-
|
145
|
-
entity = @entity_class.new
|
146
|
-
entity.from_hash(uid, Marshal.load(data))
|
147
|
-
entity
|
148
|
-
end
|
54
|
+
include Dddr::Sdbm
|
55
|
+
base.extend(Dddr::Sdbm::ClassMethods)
|
149
56
|
end
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
def all
|
154
|
-
result = []
|
155
|
-
SDBM.open(@name) do |db|
|
156
|
-
db.each do |key, value|
|
157
|
-
entity = @entity_class.new
|
158
|
-
entity.from_hash(key, Marshal.load(value))
|
159
|
-
result << entity unless entity.deleted
|
160
|
-
end
|
161
|
-
end
|
162
|
-
result
|
57
|
+
if Dddr.configuration.engine == :sequel
|
58
|
+
include Dddr::Sequel
|
59
|
+
base.extend(Dddr::Sdbm::ClassMethods)
|
163
60
|
end
|
164
61
|
end
|
165
62
|
|
166
|
-
|
167
|
-
result = {}
|
168
|
-
instance_variables.each do |var_name|
|
169
|
-
attribute_name = var_name.to_s[1..].to_sym
|
170
|
-
result[attribute_name] = instance_variable_get(var_name)
|
171
|
-
end
|
172
|
-
result
|
173
|
-
end
|
63
|
+
attr_accessor :uid, :created_at, :last_updated_at, :deleted, :deleted_at
|
174
64
|
|
175
65
|
def new?
|
176
66
|
created_at.nil?
|
177
67
|
end
|
178
|
-
|
179
|
-
def from_hash(uid, data_hash)
|
180
|
-
self.uid = uid
|
181
|
-
data_hash.each do |attribute, value|
|
182
|
-
attribute = attribute.to_sym
|
183
|
-
if respond_to?(:"#{attribute}=")
|
184
|
-
send(:"#{attribute}=", value)
|
185
|
-
end
|
186
|
-
end
|
187
|
-
end
|
188
68
|
end
|
189
69
|
end
|
190
70
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dddr
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.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-02-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sdbm
|
@@ -24,6 +24,34 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: sequel
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '5.32'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '5.32'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: oj
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '3.11'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3.11'
|
27
55
|
description: |
|
28
56
|
DDDr stands for Domain Driven Design Repository. It's a Ruby gem that simplifies the implementation of data repositories in a Domain-Driven Design (DDD) architecture.
|
29
57
|
It offers a clean interface for abstracting data access, allowing you to focus on your domain logic rather than database operations.
|
@@ -34,7 +62,6 @@ executables: []
|
|
34
62
|
extensions: []
|
35
63
|
extra_rdoc_files: []
|
36
64
|
files:
|
37
|
-
- ".DS_Store"
|
38
65
|
- ".rspec"
|
39
66
|
- ".standard.yml"
|
40
67
|
- CHANGELOG.md
|
@@ -44,6 +71,8 @@ files:
|
|
44
71
|
- Rakefile
|
45
72
|
- hero.png
|
46
73
|
- lib/dddr.rb
|
74
|
+
- lib/dddr/sdbm.rb
|
75
|
+
- lib/dddr/sequel.rb
|
47
76
|
- lib/dddr/version.rb
|
48
77
|
- sig/dddr.rbs
|
49
78
|
homepage: https://gitlab.com/dekubu/dddr
|
@@ -66,7 +95,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
66
95
|
- !ruby/object:Gem::Version
|
67
96
|
version: '0'
|
68
97
|
requirements: []
|
69
|
-
rubygems_version: 3.5.
|
98
|
+
rubygems_version: 3.5.5
|
70
99
|
signing_key:
|
71
100
|
specification_version: 4
|
72
101
|
summary: Domain Driven Design Repository
|
data/.DS_Store
DELETED
Binary file
|