dddr 1.0.6 → 1.1.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.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/dddr/version.rb +1 -1
  3. data/lib/dddr.rb +110 -123
  4. metadata +3 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 177463ebd64aa4c1b9e98bd1fc4d2ceb6f8d9936e929322e9158edc54b298802
4
- data.tar.gz: e86ed4862518bd85a6ff202e700ed6d26f70e52ba305086eec50d170f6c7ed0f
3
+ metadata.gz: 46a9b18b953d2365bebe6f55b8772d89489133bbca231e7622318b3e8fd44ed1
4
+ data.tar.gz: 07fa42336f6a55f867eeb111b459803126aa62fd2dc694c5733fb1bf74a36371
5
5
  SHA512:
6
- metadata.gz: 4c6ffcbe705cf4cf40bf70bfd8260f9063becd992a3c7b01b64c98529e9fa2dad6a968791232e8db4db98612318f6e7c34e0a9919281b6cdd87ca23c4db0f704
7
- data.tar.gz: 1f3680ca1595fd98a6bd41f699a179c2d29c5ae2f5729a8ad1f1935e1ade92079a7b84a54e5f211d2e9c21a7c1834ed2c4730aa2503e663e697cc545f74a2723
6
+ metadata.gz: c660616726df5f0a8a6f267c0c303bc77b79323751db7da29e87d18214582c26b6977cc243bd75b32ebf64cf1635d159ef16dc642066e13dd4bfa688383ba68b
7
+ data.tar.gz: 6b333f66013aff5cc3938d199b1d0580d7f350a073304289e20de9afd55c053ee6117b8e0ce5886e9c3cd9896f8c531cd7b7d1a9be9e82b2cf57e8013a73b895
data/lib/dddr/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Dddr
4
- VERSION = "1.0.6"
4
+ VERSION = "1.1.0"
5
5
  end
data/lib/dddr.rb CHANGED
@@ -30,138 +30,128 @@ module Dddr
30
30
 
31
31
  module ClassMethods
32
32
  def queries(&block)
33
- const_set(:Queries, Module.new(&block))
34
- self::Repository.include(const_get(:Queries)) if const_defined?(:Repository)
33
+ @queries_module ||= Module.new
34
+ @queries_module.module_eval(&block)
35
35
  end
36
36
 
37
- def associations(repository, &block)
38
- const_set(:AssociationMethod, Module.new(&block))
39
- repository.include(const_get(:AssociationMethod))
37
+ def const_missing(name)
38
+ if name == :Repository
39
+ create_repository_for(self)
40
+ else
41
+ super
42
+ end
40
43
  end
41
44
 
42
- def const_missing(name)
43
-
44
- @@context = self
45
+ private
45
46
 
46
- if defined?(self::Queries)
47
- @@queries = self::Queries
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
48
52
  end
49
53
 
50
- if name == :Repository
54
+ repository_class.include(@queries_module) if instance_variable_defined?(:@queries_module)
51
55
 
52
- repository_class = Class.new do
53
- def initialize(entity_class = @@context)
54
- @entity_class = entity_class
55
- env = Dddr.configuration.env
56
- `sudo mkdir -p #{Dddr.configuration.data_dir}/#{Dddr.configuration.container}/#{env}/`
57
- `sudo chown $USER #{Dddr.configuration.data_dir}/#{Dddr.configuration.container}/#{env}/`
58
- @name = "#{Dddr.configuration.data_dir}/#{Dddr.configuration.container}/#{env}/#{entity_class.name.downcase}"
59
- end
60
-
61
- def add(entity)
62
- uid = SecureRandom.uuid
63
- entity.uid = uid
64
- entity.created_at ||= DateTime.now.to_s
65
- entity.last_updated_at ||= entity.created_at
66
-
67
- SDBM.open(@name) do |db|
68
- db[uid] = Marshal.dump(entity.to_hash)
69
- end
70
- uid
71
- end
72
-
73
- alias_method :create, :add
74
- alias_method :insert, :add
75
- alias_method :put, :add
76
- alias_method :append, :add
77
- alias_method :store, :add
78
-
79
- def update(entity)
80
- entity.last_updated_at = DateTime.now.to_s
81
- SDBM.open(@name) do |db|
82
- db[entity.uid] = Marshal.dump(entity.to_hash)
83
- end
84
- entity
85
- end
86
-
87
- alias_method :modify, :update
88
- alias_method :change, :update
89
- alias_method :edit, :update
90
- alias_method :revise, :update
91
- alias_method :alter, :update
92
-
93
- def delete(entity)
94
- SDBM.open(@name) do |db|
95
- db.delete(entity.uid)
96
- end
97
- end
98
-
99
- alias_method :remove, :delete
100
- alias_method :erase, :delete
101
- alias_method :discard, :delete
102
- alias_method :destroy, :delete
103
- alias_method :wipe, :delete
104
-
105
- def get(uid)
106
- all.find { |e| e.uid == uid }
107
- end
108
-
109
- alias_method :fetch, :get
110
- alias_method :retrieve, :get
111
- alias_method :find, :get
112
- alias_method :acquire, :get
113
- alias_method :obtain, :get
114
-
115
- def reset!
116
- if Dddr.configuration.env == "test"
117
- all.map { |e| delete(e) }
118
- return
119
- end
120
-
121
- puts "Warning: This will delete all records. Are you sure? (y/n)"
122
- confirmation = gets.chomp
123
-
124
- if confirmation.downcase == "y"
125
- puts "Type 'reset' to confirm."
126
- final_confirmation = gets.chomp
127
-
128
- if final_confirmation.downcase == "reset"
129
- all.map { |e| delete(e) }
130
- puts "All records have been deleted."
131
- else
132
- puts "Reset cancelled."
133
- end
134
- else
135
- puts "Reset cancelled."
136
- end
137
- end
138
-
139
- def count
140
- all.count
141
- end
142
-
143
- def all
144
- result = []
145
- SDBM.open(@name) do |db|
146
- db.each do |key, value|
147
- entity = @entity_class.new
148
- entity.from_hash(key, Marshal.load(value))
149
- result << entity unless entity.deleted
150
- end
151
- end
152
- result
153
- end
154
- end
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
155
65
 
156
- if defined?(@@queries)
157
- repository_class.include @@queries
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
+ unless Dir.exist?(data_dir)
71
+ if data_dir.include?("/var/")
72
+ `sudo mkdir -p #{data_dir}/#{container}/#{env}/`
73
+ `sudo chown $USER #{data_dir}/#{container}/#{env}/`
74
+ else
75
+ `mkdir -p #{data_dir}/#{container}/#{env}/`
158
76
  end
77
+ end
78
+ @name = "#{data_dir}/#{container}/#{env}/#{entity_class.name.downcase}"
79
+ end
159
80
 
160
- const_set(name, repository_class)
161
- else
162
- super
81
+ def count
82
+ all.count
83
+ end
84
+
85
+ def add(entity)
86
+ uid = SecureRandom.uuid
87
+ entity.uid = uid
88
+ entity.created_at ||= DateTime.now.to_s
89
+ entity.last_updated_at ||= entity.created_at
90
+
91
+ SDBM.open(@name) do |db|
92
+ db[uid] = Marshal.dump(entity.to_hash)
93
+ end
94
+ uid
95
+ end
96
+
97
+ alias_method :create, :add
98
+ alias_method :insert, :add
99
+ alias_method :put, :add
100
+ alias_method :append, :add
101
+ alias_method :store, :add
102
+
103
+ def update(entity)
104
+ return unless entity.uid
105
+ entity.last_updated_at = DateTime.now.to_s
106
+ SDBM.open(@name) do |db|
107
+ db[entity.uid] = Marshal.dump(entity.to_hash)
108
+ end
109
+ entity
110
+ end
111
+
112
+ alias_method :modify, :update
113
+ alias_method :change, :update
114
+ alias_method :edit, :update
115
+ alias_method :revise, :update
116
+ alias_method :alter, :update
117
+
118
+ def delete(entity)
119
+ return unless entity.uid
120
+ SDBM.open(@name) do |db|
121
+ db.delete(entity.uid)
163
122
  end
164
123
  end
124
+
125
+ alias_method :remove, :delete
126
+ alias_method :erase, :delete
127
+ alias_method :discard, :delete
128
+ alias_method :destroy, :delete
129
+ alias_method :wipe, :delete
130
+
131
+ def get(uid)
132
+ SDBM.open(@name) do |db|
133
+ data = db[uid]
134
+ return unless data
135
+
136
+ entity = @entity_class.new
137
+ entity.from_hash(uid, Marshal.load(data))
138
+ entity
139
+ end
140
+ end
141
+
142
+ alias_method :find, :get
143
+
144
+ def all
145
+ result = []
146
+ SDBM.open(@name) do |db|
147
+ db.each do |key, value|
148
+ entity = @entity_class.new
149
+ entity.from_hash(key, Marshal.load(value))
150
+ result << entity unless entity.deleted
151
+ end
152
+ end
153
+ result
154
+ end
165
155
  end
166
156
 
167
157
  def to_hash
@@ -174,8 +164,7 @@ module Dddr
174
164
  end
175
165
 
176
166
  def new?
177
- return true if created_at.nil?
178
- false
167
+ created_at.nil?
179
168
  end
180
169
 
181
170
  def from_hash(uid, data_hash)
@@ -188,8 +177,6 @@ module Dddr
188
177
  end
189
178
  end
190
179
  end
191
-
192
- # Your code goes here...
193
180
  end
194
181
 
195
182
  Dddr.configure
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: 1.0.6
4
+ version: 1.1.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: 2023-12-28 00:00:00.000000000 Z
11
+ date: 2024-01-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sdbm
@@ -66,7 +66,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
66
66
  - !ruby/object:Gem::Version
67
67
  version: '0'
68
68
  requirements: []
69
- rubygems_version: 3.4.21
69
+ rubygems_version: 3.5.3
70
70
  signing_key:
71
71
  specification_version: 4
72
72
  summary: Domain Driven Design Repository