vorpal 0.1.0.rc3 → 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.
- checksums.yaml +5 -5
- data/README.md +50 -33
- data/lib/vorpal/aggregate_mapper.rb +11 -0
- data/lib/vorpal/db_loader.rb +3 -4
- data/lib/vorpal/driver/postgresql.rb +181 -0
- data/lib/vorpal/dsl/config_builder.rb +37 -22
- data/lib/vorpal/dsl/configuration.rb +5 -4
- data/lib/vorpal/dsl/defaults_generator.rb +14 -4
- data/lib/vorpal/engine.rb +7 -8
- data/lib/vorpal/identity_map.rb +15 -14
- data/lib/vorpal/version.rb +1 -1
- data/vorpal.gemspec +11 -7
- metadata +57 -65
- data/.editorconfig +0 -13
- data/.gitignore +0 -16
- data/.rspec +0 -1
- data/.ruby-version +0 -1
- data/.yardopts +0 -1
- data/Gemfile +0 -4
- data/Rakefile +0 -10
- data/lib/vorpal/db_driver.rb +0 -143
- data/spec/helpers/db_helpers.rb +0 -51
- data/spec/helpers/profile_helpers.rb +0 -26
- data/spec/integration_spec_helper.rb +0 -36
- data/spec/unit_spec_helper.rb +0 -0
- data/spec/vorpal/acceptance/aggregate_mapper_spec.rb +0 -911
- data/spec/vorpal/integration/db_driver_spec.rb +0 -42
- data/spec/vorpal/performance/performance_spec.rb +0 -195
- data/spec/vorpal/unit/configs_spec.rb +0 -117
- data/spec/vorpal/unit/db_loader_spec.rb +0 -103
- data/spec/vorpal/unit/dsl/config_builder_spec.rb +0 -19
- data/spec/vorpal/unit/dsl/defaults_generator_spec.rb +0 -75
- data/spec/vorpal/unit/identity_map_spec.rb +0 -62
- data/spec/vorpal/unit/loaded_objects_spec.rb +0 -22
- data/spec/vorpal/unit/util/string_utils_spec.rb +0 -25
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'vorpal/engine'
|
2
2
|
require 'vorpal/dsl/config_builder'
|
3
|
+
require 'vorpal/driver/postgresql'
|
3
4
|
|
4
5
|
module Vorpal
|
5
6
|
module Dsl
|
@@ -9,12 +10,12 @@ module Vorpal
|
|
9
10
|
#
|
10
11
|
# @param options [Hash] Global configuration options for the engine instance.
|
11
12
|
# @option options [Object] :db_driver (Object that will be used to interact with the DB.)
|
12
|
-
# Must be duck-type compatible with {
|
13
|
+
# Must be duck-type compatible with {Postgresql}.
|
13
14
|
#
|
14
15
|
# @return [Engine] Instance of the mapping engine.
|
15
16
|
def define(options={}, &block)
|
16
17
|
master_config = build_config(&block)
|
17
|
-
db_driver = options.fetch(:db_driver,
|
18
|
+
db_driver = options.fetch(:db_driver, Driver::Postgresql.new)
|
18
19
|
Engine.new(db_driver, master_config)
|
19
20
|
end
|
20
21
|
|
@@ -40,7 +41,7 @@ module Vorpal
|
|
40
41
|
|
41
42
|
# @private
|
42
43
|
def build_class_config(domain_class, options={}, &block)
|
43
|
-
builder = ConfigBuilder.new(domain_class, options,
|
44
|
+
builder = ConfigBuilder.new(domain_class, options, Driver::Postgresql.new)
|
44
45
|
builder.instance_exec(&block) if block_given?
|
45
46
|
builder.build
|
46
47
|
end
|
@@ -53,4 +54,4 @@ module Vorpal
|
|
53
54
|
end
|
54
55
|
end
|
55
56
|
end
|
56
|
-
end
|
57
|
+
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'simple_serializer/serializer'
|
2
2
|
require 'simple_serializer/deserializer'
|
3
|
-
require 'active_support
|
3
|
+
require 'active_support'
|
4
4
|
require 'active_support/core_ext/module/introspection'
|
5
5
|
|
6
6
|
module Vorpal
|
@@ -36,9 +36,19 @@ module Vorpal
|
|
36
36
|
end
|
37
37
|
|
38
38
|
def child_class(association_name)
|
39
|
-
|
40
|
-
|
41
|
-
|
39
|
+
module_parent.const_get(ActiveSupport::Inflector.classify(association_name.to_s))
|
40
|
+
end
|
41
|
+
|
42
|
+
private
|
43
|
+
|
44
|
+
def module_parent
|
45
|
+
if (ActiveSupport::VERSION::MAJOR == 5)
|
46
|
+
# Module#parent comes from 'active_support/core_ext/module/introspection'
|
47
|
+
@domain_class.parent
|
48
|
+
else
|
49
|
+
# Module#module_parent comes from 'active_support/core_ext/module/introspection'
|
50
|
+
@domain_class.module_parent
|
51
|
+
end
|
42
52
|
end
|
43
53
|
end
|
44
54
|
end
|
data/lib/vorpal/engine.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
require 'vorpal/identity_map'
|
2
2
|
require 'vorpal/aggregate_utils'
|
3
3
|
require 'vorpal/db_loader'
|
4
|
-
require 'vorpal/db_driver'
|
5
4
|
require 'vorpal/aggregate_mapper'
|
6
5
|
require 'vorpal/exceptions'
|
7
6
|
|
@@ -80,7 +79,7 @@ module Vorpal
|
|
80
79
|
|
81
80
|
loaded_db_objects = load_owned_from_db(ids, domain_class)
|
82
81
|
loaded_db_objects.each do |config, db_objects|
|
83
|
-
@db_driver.destroy(config, db_objects.map(&:id))
|
82
|
+
@db_driver.destroy(config.db_class, db_objects.map(&:id))
|
84
83
|
end
|
85
84
|
ids
|
86
85
|
end
|
@@ -91,7 +90,7 @@ module Vorpal
|
|
91
90
|
end
|
92
91
|
|
93
92
|
def query(domain_class)
|
94
|
-
@db_driver.query(@configs.config_for(domain_class), mapper_for(domain_class))
|
93
|
+
@db_driver.query(@configs.config_for(domain_class).db_class, mapper_for(domain_class))
|
95
94
|
end
|
96
95
|
|
97
96
|
private
|
@@ -166,7 +165,7 @@ module Vorpal
|
|
166
165
|
def set_primary_keys(owned_objects, mapping)
|
167
166
|
owned_objects.each do |config, objects|
|
168
167
|
in_need_of_primary_keys = objects.find_all { |obj| obj.id.nil? }
|
169
|
-
primary_keys = @db_driver.get_primary_keys(config, in_need_of_primary_keys.length)
|
168
|
+
primary_keys = @db_driver.get_primary_keys(config.db_class, in_need_of_primary_keys.length)
|
170
169
|
in_need_of_primary_keys.zip(primary_keys).each do |object, primary_key|
|
171
170
|
mapping[object].id = primary_key
|
172
171
|
object.id = primary_key
|
@@ -207,11 +206,11 @@ module Vorpal
|
|
207
206
|
owned_objects.each do |config, objects|
|
208
207
|
objects_to_insert = grouped_new_objects[config] || []
|
209
208
|
db_objects_to_insert = objects_to_insert.map { |obj| mapping[obj] }
|
210
|
-
@db_driver.insert(config, db_objects_to_insert)
|
209
|
+
@db_driver.insert(config.db_class, db_objects_to_insert)
|
211
210
|
|
212
211
|
objects_to_update = objects - objects_to_insert
|
213
212
|
db_objects_to_update = objects_to_update.map { |obj| mapping[obj] }
|
214
|
-
@db_driver.update(config, db_objects_to_update)
|
213
|
+
@db_driver.update(config.db_class, db_objects_to_update)
|
215
214
|
end
|
216
215
|
end
|
217
216
|
|
@@ -221,7 +220,7 @@ module Vorpal
|
|
221
220
|
all_orphans = db_objects_in_db - db_objects_in_aggregate
|
222
221
|
grouped_orphans = all_orphans.group_by { |o| @configs.config_for_db_object(o) }
|
223
222
|
grouped_orphans.each do |config, orphans|
|
224
|
-
@db_driver.destroy(config, orphans)
|
223
|
+
@db_driver.destroy(config.db_class, orphans)
|
225
224
|
end
|
226
225
|
end
|
227
226
|
|
@@ -234,4 +233,4 @@ module Vorpal
|
|
234
233
|
objects.each { |object| object.id = nil }
|
235
234
|
end
|
236
235
|
end
|
237
|
-
end
|
236
|
+
end
|
data/lib/vorpal/identity_map.rb
CHANGED
@@ -1,22 +1,23 @@
|
|
1
1
|
module Vorpal
|
2
|
+
# Maps DB rows to Entities
|
2
3
|
class IdentityMap
|
3
4
|
def initialize
|
4
5
|
@entities = {}
|
5
6
|
end
|
6
7
|
|
7
|
-
def get(
|
8
|
-
@entities[key(
|
8
|
+
def get(db_row)
|
9
|
+
@entities[key(db_row)]
|
9
10
|
end
|
10
11
|
|
11
|
-
def set(
|
12
|
-
@entities[key(
|
12
|
+
def set(db_row, entity)
|
13
|
+
@entities[key(db_row)] = entity
|
13
14
|
end
|
14
15
|
|
15
|
-
def get_and_set(
|
16
|
-
|
17
|
-
|
18
|
-
set(
|
19
|
-
|
16
|
+
def get_and_set(db_row)
|
17
|
+
entity = get(db_row)
|
18
|
+
entity = yield if entity.nil?
|
19
|
+
set(db_row, entity)
|
20
|
+
entity
|
20
21
|
end
|
21
22
|
|
22
23
|
def map(key_objects)
|
@@ -25,11 +26,11 @@ module Vorpal
|
|
25
26
|
|
26
27
|
private
|
27
28
|
|
28
|
-
def key(
|
29
|
-
return nil unless
|
30
|
-
raise "Cannot
|
31
|
-
raise "Cannot
|
32
|
-
[
|
29
|
+
def key(db_row)
|
30
|
+
return nil unless db_row
|
31
|
+
raise "Cannot map a DB row without an id '#{db_row.inspect}' to an entity." if db_row.id.nil?
|
32
|
+
raise "Cannot map a DB row without a Class with a name '#{db_row.inspect}' to an entity." if db_row.class.name.nil?
|
33
|
+
[db_row.id, db_row.class.name]
|
33
34
|
end
|
34
35
|
end
|
35
36
|
end
|
data/lib/vorpal/version.rb
CHANGED
data/vorpal.gemspec
CHANGED
@@ -13,19 +13,23 @@ Gem::Specification.new do |spec|
|
|
13
13
|
spec.homepage = "https://github.com/nulogy/vorpal"
|
14
14
|
spec.license = "MIT"
|
15
15
|
|
16
|
-
spec.files =
|
17
|
-
spec.
|
18
|
-
spec.
|
16
|
+
spec.files = Dir["CHANGELOG.md", "LICENSE.txt", "README.md", "vorpal.gemspec", "lib/**/*"]
|
17
|
+
spec.bindir = "exe"
|
18
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
21
|
spec.add_runtime_dependency "simple_serializer", "~> 1.0"
|
22
22
|
spec.add_runtime_dependency "equalizer"
|
23
23
|
spec.add_runtime_dependency "activesupport"
|
24
24
|
|
25
|
-
spec.add_development_dependency "rake", "~>
|
25
|
+
spec.add_development_dependency "rake", "~> 13"
|
26
26
|
spec.add_development_dependency "rspec", "~> 3.0"
|
27
|
-
spec.add_development_dependency "activerecord", "~> 4.0"
|
28
|
-
spec.add_development_dependency "pg", "~> 0.17.0"
|
29
27
|
spec.add_development_dependency "virtus", "~> 1.0"
|
30
|
-
spec.add_development_dependency "
|
28
|
+
spec.add_development_dependency "appraisal", "~> 2.2"
|
29
|
+
|
30
|
+
spec.required_ruby_version = ">= 2.5.7"
|
31
|
+
spec.add_development_dependency "activerecord"
|
32
|
+
spec.add_development_dependency "pg"
|
33
|
+
spec.add_development_dependency "activerecord-import"
|
34
|
+
spec.add_development_dependency "codecov"
|
31
35
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vorpal
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sean Kirby
|
8
|
-
autorequire:
|
9
|
-
bindir:
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-10-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: simple_serializer
|
@@ -58,14 +58,14 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
61
|
+
version: '13'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
68
|
+
version: '13'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rspec
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -81,61 +81,89 @@ dependencies:
|
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '3.0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
84
|
+
name: virtus
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
87
|
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
89
|
+
version: '1.0'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: '
|
96
|
+
version: '1.0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
98
|
+
name: appraisal
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
101
|
- - "~>"
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version:
|
103
|
+
version: '2.2'
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
108
|
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version:
|
110
|
+
version: '2.2'
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
|
-
name:
|
112
|
+
name: activerecord
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
|
-
- - "
|
115
|
+
- - ">="
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version: '
|
117
|
+
version: '0'
|
118
118
|
type: :development
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
|
-
- - "
|
122
|
+
- - ">="
|
123
123
|
- !ruby/object:Gem::Version
|
124
|
-
version: '
|
124
|
+
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: pg
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
125
139
|
- !ruby/object:Gem::Dependency
|
126
140
|
name: activerecord-import
|
127
141
|
requirement: !ruby/object:Gem::Requirement
|
128
142
|
requirements:
|
129
|
-
- - "
|
143
|
+
- - ">="
|
130
144
|
- !ruby/object:Gem::Version
|
131
|
-
version: 0
|
145
|
+
version: '0'
|
132
146
|
type: :development
|
133
147
|
prerelease: false
|
134
148
|
version_requirements: !ruby/object:Gem::Requirement
|
135
149
|
requirements:
|
136
|
-
- - "
|
150
|
+
- - ">="
|
137
151
|
- !ruby/object:Gem::Version
|
138
|
-
version: 0
|
152
|
+
version: '0'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: codecov
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - ">="
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0'
|
160
|
+
type: :development
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - ">="
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0'
|
139
167
|
description: An ORM framelet that fits on top of ActiveRecord to give you 'Data Mapper'
|
140
168
|
semantics.
|
141
169
|
email:
|
@@ -144,23 +172,16 @@ executables: []
|
|
144
172
|
extensions: []
|
145
173
|
extra_rdoc_files: []
|
146
174
|
files:
|
147
|
-
- ".editorconfig"
|
148
|
-
- ".gitignore"
|
149
|
-
- ".rspec"
|
150
|
-
- ".ruby-version"
|
151
|
-
- ".yardopts"
|
152
175
|
- CHANGELOG.md
|
153
|
-
- Gemfile
|
154
176
|
- LICENSE.txt
|
155
177
|
- README.md
|
156
|
-
- Rakefile
|
157
178
|
- lib/vorpal.rb
|
158
179
|
- lib/vorpal/aggregate_mapper.rb
|
159
180
|
- lib/vorpal/aggregate_traversal.rb
|
160
181
|
- lib/vorpal/aggregate_utils.rb
|
161
182
|
- lib/vorpal/configs.rb
|
162
|
-
- lib/vorpal/db_driver.rb
|
163
183
|
- lib/vorpal/db_loader.rb
|
184
|
+
- lib/vorpal/driver/postgresql.rb
|
164
185
|
- lib/vorpal/dsl/config_builder.rb
|
165
186
|
- lib/vorpal/dsl/configuration.rb
|
166
187
|
- lib/vorpal/dsl/defaults_generator.rb
|
@@ -172,26 +193,12 @@ files:
|
|
172
193
|
- lib/vorpal/util/hash_initialization.rb
|
173
194
|
- lib/vorpal/util/string_utils.rb
|
174
195
|
- lib/vorpal/version.rb
|
175
|
-
- spec/helpers/db_helpers.rb
|
176
|
-
- spec/helpers/profile_helpers.rb
|
177
|
-
- spec/integration_spec_helper.rb
|
178
|
-
- spec/unit_spec_helper.rb
|
179
|
-
- spec/vorpal/acceptance/aggregate_mapper_spec.rb
|
180
|
-
- spec/vorpal/integration/db_driver_spec.rb
|
181
|
-
- spec/vorpal/performance/performance_spec.rb
|
182
|
-
- spec/vorpal/unit/configs_spec.rb
|
183
|
-
- spec/vorpal/unit/db_loader_spec.rb
|
184
|
-
- spec/vorpal/unit/dsl/config_builder_spec.rb
|
185
|
-
- spec/vorpal/unit/dsl/defaults_generator_spec.rb
|
186
|
-
- spec/vorpal/unit/identity_map_spec.rb
|
187
|
-
- spec/vorpal/unit/loaded_objects_spec.rb
|
188
|
-
- spec/vorpal/unit/util/string_utils_spec.rb
|
189
196
|
- vorpal.gemspec
|
190
197
|
homepage: https://github.com/nulogy/vorpal
|
191
198
|
licenses:
|
192
199
|
- MIT
|
193
200
|
metadata: {}
|
194
|
-
post_install_message:
|
201
|
+
post_install_message:
|
195
202
|
rdoc_options: []
|
196
203
|
require_paths:
|
197
204
|
- lib
|
@@ -199,30 +206,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
199
206
|
requirements:
|
200
207
|
- - ">="
|
201
208
|
- !ruby/object:Gem::Version
|
202
|
-
version:
|
209
|
+
version: 2.5.7
|
203
210
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
204
211
|
requirements:
|
205
|
-
- - "
|
212
|
+
- - ">="
|
206
213
|
- !ruby/object:Gem::Version
|
207
|
-
version:
|
214
|
+
version: '0'
|
208
215
|
requirements: []
|
209
|
-
|
210
|
-
|
211
|
-
signing_key:
|
216
|
+
rubygems_version: 3.1.2
|
217
|
+
signing_key:
|
212
218
|
specification_version: 4
|
213
219
|
summary: Separate your domain model from your persistence mechanism.
|
214
|
-
test_files:
|
215
|
-
- spec/helpers/db_helpers.rb
|
216
|
-
- spec/helpers/profile_helpers.rb
|
217
|
-
- spec/integration_spec_helper.rb
|
218
|
-
- spec/unit_spec_helper.rb
|
219
|
-
- spec/vorpal/acceptance/aggregate_mapper_spec.rb
|
220
|
-
- spec/vorpal/integration/db_driver_spec.rb
|
221
|
-
- spec/vorpal/performance/performance_spec.rb
|
222
|
-
- spec/vorpal/unit/configs_spec.rb
|
223
|
-
- spec/vorpal/unit/db_loader_spec.rb
|
224
|
-
- spec/vorpal/unit/dsl/config_builder_spec.rb
|
225
|
-
- spec/vorpal/unit/dsl/defaults_generator_spec.rb
|
226
|
-
- spec/vorpal/unit/identity_map_spec.rb
|
227
|
-
- spec/vorpal/unit/loaded_objects_spec.rb
|
228
|
-
- spec/vorpal/unit/util/string_utils_spec.rb
|
220
|
+
test_files: []
|