rom 2.0.0 → 2.0.1
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 +4 -4
- data/.gitignore +1 -0
- data/.travis.yml +2 -6
- data/CHANGELOG.md +13 -0
- data/lib/rom/schema.rb +2 -0
- data/lib/rom/setup/auto_registration.rb +29 -15
- data/lib/rom/setup/auto_registration_strategies/base.rb +11 -0
- data/lib/rom/setup/auto_registration_strategies/custom_namespace.rb +22 -0
- data/lib/rom/setup/auto_registration_strategies/no_namespace.rb +19 -0
- data/lib/rom/setup/auto_registration_strategies/with_namespace.rb +18 -0
- data/lib/rom/version.rb +1 -1
- data/spec/fixtures/app/my_commands/create_user.rb +2 -0
- data/spec/fixtures/app/my_mappers/user_list.rb +2 -0
- data/spec/fixtures/app/my_relations/users.rb +2 -0
- data/spec/fixtures/custom/commands/create_user.rb +6 -0
- data/spec/fixtures/custom/mappers/user_list.rb +6 -0
- data/spec/fixtures/custom/relations/users.rb +6 -0
- data/spec/fixtures/lib/persistence/my_commands/create_user.rb +6 -0
- data/spec/fixtures/lib/persistence/my_mappers/user_list.rb +6 -0
- data/spec/fixtures/lib/persistence/my_relations/users.rb +6 -0
- data/spec/integration/setup_spec.rb +14 -0
- data/spec/unit/rom/setup/auto_registration_spec.rb +152 -0
- metadata +16 -3
- data/spec/unit/rom/auto_registration_spec.rb +0 -54
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 29e221f399a6c003c04d45c03b9518d19b5ffd48
|
4
|
+
data.tar.gz: 223b1648de818651d5cc89f05e088fefdaf8ec19
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 144b7539ca43248fd1c8304b624e5fd46f229016bb5057b20615f95026421b916b66888d223b49b4f5119a5698b44c7f96165fd454922b722387701e0d9eb7ee
|
7
|
+
data.tar.gz: 7dee28d63ed1e6a7c7eee538172249d6d8c71cd83b8840c38d86550cc323f2944ef4d68cab49236f69c55ac632fa00f29e06d44439fb2c6a1f1cd9a67e054e97
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
@@ -6,12 +6,11 @@ env:
|
|
6
6
|
bundler_args: --without sql benchmarks console tools
|
7
7
|
script: "bundle exec rake ci"
|
8
8
|
rvm:
|
9
|
-
- 2.0
|
10
9
|
- 2.1
|
11
10
|
- 2.2
|
12
11
|
- 2.3.1
|
13
12
|
- rbx-2
|
14
|
-
- jruby-9.
|
13
|
+
- jruby-9.1.5.0
|
15
14
|
- ruby-head
|
16
15
|
env:
|
17
16
|
global:
|
@@ -19,10 +18,7 @@ env:
|
|
19
18
|
matrix:
|
20
19
|
allow_failures:
|
21
20
|
- rvm: ruby-head
|
22
|
-
- rvm:
|
23
|
-
include:
|
24
|
-
- rvm: jruby-head
|
25
|
-
before_install: gem install bundler --no-ri --no-rdoc
|
21
|
+
- rvm: rbx-2
|
26
22
|
notifications:
|
27
23
|
webhooks:
|
28
24
|
urls:
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,16 @@
|
|
1
|
+
## v2.0.1 2016-09-30
|
2
|
+
|
3
|
+
### Added
|
4
|
+
|
5
|
+
- Support for different auto-registration strategies (janjiss)
|
6
|
+
- Support for custom component dir names in auto-registration (AMHOL)
|
7
|
+
|
8
|
+
### Fixed
|
9
|
+
|
10
|
+
- Finalizing schema that is already finalized no longer crashes (flash-gordon)
|
11
|
+
|
12
|
+
[Compare v2.0.0...v2.0.1](https://github.com/rom-rb/rom/compare/v2.0.0...v2.0.1)
|
13
|
+
|
1
14
|
## v2.0.0 2016-07-27
|
2
15
|
|
3
16
|
### Added
|
data/lib/rom/schema.rb
CHANGED
@@ -4,19 +4,29 @@ require 'rom/support/constants'
|
|
4
4
|
require 'rom/support/inflector'
|
5
5
|
require 'rom/support/options'
|
6
6
|
|
7
|
+
require 'rom/setup/auto_registration_strategies/no_namespace'
|
8
|
+
require 'rom/setup/auto_registration_strategies/with_namespace'
|
9
|
+
require 'rom/setup/auto_registration_strategies/custom_namespace'
|
10
|
+
|
7
11
|
module ROM
|
8
12
|
class AutoRegistration
|
9
13
|
include Options
|
10
14
|
|
11
|
-
option :namespace, reader: true, type: [TrueClass, FalseClass], default: true
|
15
|
+
option :namespace, reader: true, type: [TrueClass, FalseClass, String], default: true
|
16
|
+
|
17
|
+
option :component_dirs, reader: true, type: ::Hash, default: {
|
18
|
+
relations: :relations,
|
19
|
+
mappers: :mappers,
|
20
|
+
commands: :commands
|
21
|
+
}
|
12
22
|
|
13
23
|
attr_reader :globs, :directory
|
14
24
|
|
15
25
|
def initialize(directory, options = EMPTY_HASH)
|
16
26
|
super
|
17
27
|
@directory = Pathname(directory)
|
18
|
-
@globs = Hash[
|
19
|
-
[
|
28
|
+
@globs = Hash[component_dirs.map { |component, directory|
|
29
|
+
[component, @directory.join("#{directory}/**/*.rb")]
|
20
30
|
}]
|
21
31
|
end
|
22
32
|
|
@@ -37,19 +47,23 @@ module ROM
|
|
37
47
|
def load_entities(entity)
|
38
48
|
Dir[globs[entity]].map do |file|
|
39
49
|
require file
|
40
|
-
|
50
|
+
klass_name =
|
51
|
+
case namespace
|
52
|
+
when String
|
53
|
+
AutoRegistrationStrategies::CustomNamespace.new(
|
54
|
+
namespace: namespace, file: file
|
55
|
+
).call
|
56
|
+
when TrueClass
|
57
|
+
AutoRegistrationStrategies::WithNamespace.new(
|
58
|
+
file: file, directory: directory
|
59
|
+
).call
|
60
|
+
when FalseClass
|
61
|
+
AutoRegistrationStrategies::NoNamespace.new(
|
62
|
+
file: file, directory: directory, entity: component_dirs.fetch(entity)
|
63
|
+
).call
|
64
|
+
end
|
65
|
+
Inflector.constantize(klass_name)
|
41
66
|
end
|
42
67
|
end
|
43
|
-
|
44
|
-
def const_name(entity, file)
|
45
|
-
name =
|
46
|
-
if namespace
|
47
|
-
file.gsub("#{directory.dirname}/", '')
|
48
|
-
else
|
49
|
-
file.gsub("#{directory}/#{entity}/", '')
|
50
|
-
end.gsub('.rb', '')
|
51
|
-
|
52
|
-
Inflector.camelize(name)
|
53
|
-
end
|
54
68
|
end
|
55
69
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'pathname'
|
2
|
+
|
3
|
+
require 'rom/support/inflector'
|
4
|
+
require 'rom/setup/auto_registration_strategies/base'
|
5
|
+
|
6
|
+
module ROM
|
7
|
+
module AutoRegistrationStrategies
|
8
|
+
class CustomNamespace < Base
|
9
|
+
option :namespace, reader: true, type: String
|
10
|
+
|
11
|
+
def call
|
12
|
+
"#{namespace}::#{Inflector.camelize(filename)}"
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def filename
|
18
|
+
Pathname(file).basename('.rb')
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'pathname'
|
2
|
+
|
3
|
+
require 'rom/support/inflector'
|
4
|
+
require 'rom/setup/auto_registration_strategies/base'
|
5
|
+
|
6
|
+
module ROM
|
7
|
+
module AutoRegistrationStrategies
|
8
|
+
class NoNamespace < Base
|
9
|
+
option :directory, reader: true, type: Pathname
|
10
|
+
option :entity, reader: true, type: Symbol
|
11
|
+
|
12
|
+
def call
|
13
|
+
Inflector.camelize(
|
14
|
+
file.sub(/^#{directory}\/#{entity}\//, '').sub(EXTENSION_REGEX, '')
|
15
|
+
)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'pathname'
|
2
|
+
|
3
|
+
require 'rom/support/inflector'
|
4
|
+
require 'rom/setup/auto_registration_strategies/base'
|
5
|
+
|
6
|
+
module ROM
|
7
|
+
module AutoRegistrationStrategies
|
8
|
+
class WithNamespace < Base
|
9
|
+
option :directory, reader: true, type: Pathname
|
10
|
+
|
11
|
+
def call
|
12
|
+
Inflector.camelize(
|
13
|
+
file.sub(/^#{directory.dirname}\//, '').sub(EXTENSION_REGEX, '')
|
14
|
+
)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/lib/rom/version.rb
CHANGED
@@ -145,4 +145,18 @@ describe 'Configuring ROM' do
|
|
145
145
|
.to eql([Test::User.new(name: 'Jane')])
|
146
146
|
end
|
147
147
|
end
|
148
|
+
|
149
|
+
it 'allows to use a relation with a schema in multiple containers' do
|
150
|
+
class Test::UserRelation < ROM::Relation[:memory]
|
151
|
+
dataset :users
|
152
|
+
|
153
|
+
schema do
|
154
|
+
attribute :id, Types::Int.meta(primary_key: true)
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
2.times do
|
159
|
+
ROM.container(:memory) { |c| c.register_relation(Test::UserRelation) }
|
160
|
+
end
|
161
|
+
end
|
148
162
|
end
|
@@ -0,0 +1,152 @@
|
|
1
|
+
require 'rom/setup'
|
2
|
+
|
3
|
+
RSpec.describe ROM::Setup, '#auto_registration' do
|
4
|
+
subject(:setup) { ROM::Setup.new }
|
5
|
+
|
6
|
+
context 'with default component_dirs' do
|
7
|
+
context 'with namespace turned on' do
|
8
|
+
before do
|
9
|
+
setup.auto_registration(SPEC_ROOT.join('fixtures/lib/persistence').to_s)
|
10
|
+
end
|
11
|
+
|
12
|
+
describe '#relations' do
|
13
|
+
it 'loads files and returns constants' do
|
14
|
+
expect(setup.relation_classes).to eql([Persistence::Relations::Users])
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe '#commands' do
|
19
|
+
it 'loads files and returns constants' do
|
20
|
+
expect(setup.command_classes).to eql([Persistence::Commands::CreateUser])
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe '#mappers' do
|
25
|
+
it 'loads files and returns constants' do
|
26
|
+
expect(setup.mapper_classes).to eql([Persistence::Mappers::UserList])
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
context 'with namespace turned off' do
|
32
|
+
before do
|
33
|
+
setup.auto_registration(SPEC_ROOT.join('fixtures/app'), namespace: false)
|
34
|
+
end
|
35
|
+
|
36
|
+
describe '#relations' do
|
37
|
+
it 'loads files and returns constants' do
|
38
|
+
expect(setup.relation_classes).to eql([Users])
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
describe '#commands' do
|
43
|
+
it 'loads files and returns constants' do
|
44
|
+
expect(setup.command_classes).to eql([CreateUser])
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
describe '#mappers' do
|
49
|
+
it 'loads files and returns constants' do
|
50
|
+
expect(setup.mapper_classes).to eql([UserList])
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
context 'with custom component_dirs' do
|
57
|
+
context 'with namespace turned on' do
|
58
|
+
before do
|
59
|
+
setup.auto_registration(
|
60
|
+
SPEC_ROOT.join('fixtures/lib/persistence').to_s,
|
61
|
+
component_dirs: {
|
62
|
+
relations: :my_relations,
|
63
|
+
mappers: :my_mappers,
|
64
|
+
commands: :my_commands
|
65
|
+
}
|
66
|
+
)
|
67
|
+
end
|
68
|
+
|
69
|
+
describe '#relations' do
|
70
|
+
it 'loads files and returns constants' do
|
71
|
+
expect(setup.relation_classes).to eql([Persistence::MyRelations::Users])
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
describe '#commands' do
|
76
|
+
it 'loads files and returns constants' do
|
77
|
+
expect(setup.command_classes).to eql([Persistence::MyCommands::CreateUser])
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
describe '#mappers' do
|
82
|
+
it 'loads files and returns constants' do
|
83
|
+
expect(setup.mapper_classes).to eql([Persistence::MyMappers::UserList])
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
context 'with namespace turned off' do
|
89
|
+
before do
|
90
|
+
setup.auto_registration(
|
91
|
+
SPEC_ROOT.join('fixtures/app'),
|
92
|
+
component_dirs: {
|
93
|
+
relations: :my_relations,
|
94
|
+
mappers: :my_mappers,
|
95
|
+
commands: :my_commands
|
96
|
+
},
|
97
|
+
namespace: false
|
98
|
+
)
|
99
|
+
end
|
100
|
+
|
101
|
+
describe '#relations' do
|
102
|
+
it 'loads files and returns constants' do
|
103
|
+
expect(setup.relation_classes).to eql([Users])
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
describe '#commands' do
|
108
|
+
it 'loads files and returns constants' do
|
109
|
+
expect(setup.command_classes).to eql([CreateUser])
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
describe '#mappers' do
|
114
|
+
it 'loads files and returns constants' do
|
115
|
+
expect(setup.mapper_classes).to eql([UserList])
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
context 'with custom namespace' do
|
121
|
+
before do
|
122
|
+
setup.auto_registration(
|
123
|
+
SPEC_ROOT.join('fixtures/custom'),
|
124
|
+
component_dirs: {
|
125
|
+
relations: :relations,
|
126
|
+
mappers: :mappers,
|
127
|
+
commands: :commands
|
128
|
+
},
|
129
|
+
namespace: 'My::Namespace'
|
130
|
+
)
|
131
|
+
end
|
132
|
+
|
133
|
+
describe '#relations' do
|
134
|
+
it 'loads files and returns constants' do
|
135
|
+
expect(setup.relation_classes).to eql([My::Namespace::Users])
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
describe '#commands' do
|
140
|
+
it 'loads files and returns constants' do
|
141
|
+
expect(setup.command_classes).to eql([My::Namespace::CreateUser])
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
describe '#mappers' do
|
146
|
+
it 'loads files and returns constants' do
|
147
|
+
expect(setup.mapper_classes).to eql([My::Namespace::UserList])
|
148
|
+
end
|
149
|
+
end
|
150
|
+
end
|
151
|
+
end
|
152
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rom
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Piotr Solnica
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-09-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: concurrent-ruby
|
@@ -197,6 +197,10 @@ files:
|
|
197
197
|
- lib/rom/schema/dsl.rb
|
198
198
|
- lib/rom/setup.rb
|
199
199
|
- lib/rom/setup/auto_registration.rb
|
200
|
+
- lib/rom/setup/auto_registration_strategies/base.rb
|
201
|
+
- lib/rom/setup/auto_registration_strategies/custom_namespace.rb
|
202
|
+
- lib/rom/setup/auto_registration_strategies/no_namespace.rb
|
203
|
+
- lib/rom/setup/auto_registration_strategies/with_namespace.rb
|
200
204
|
- lib/rom/setup/finalize.rb
|
201
205
|
- lib/rom/setup/finalize/finalize_commands.rb
|
202
206
|
- lib/rom/setup/finalize/finalize_mappers.rb
|
@@ -211,9 +215,18 @@ files:
|
|
211
215
|
- rom.gemspec
|
212
216
|
- spec/fixtures/app/commands/create_user.rb
|
213
217
|
- spec/fixtures/app/mappers/user_list.rb
|
218
|
+
- spec/fixtures/app/my_commands/create_user.rb
|
219
|
+
- spec/fixtures/app/my_mappers/user_list.rb
|
220
|
+
- spec/fixtures/app/my_relations/users.rb
|
214
221
|
- spec/fixtures/app/relations/users.rb
|
222
|
+
- spec/fixtures/custom/commands/create_user.rb
|
223
|
+
- spec/fixtures/custom/mappers/user_list.rb
|
224
|
+
- spec/fixtures/custom/relations/users.rb
|
215
225
|
- spec/fixtures/lib/persistence/commands/create_user.rb
|
216
226
|
- spec/fixtures/lib/persistence/mappers/user_list.rb
|
227
|
+
- spec/fixtures/lib/persistence/my_commands/create_user.rb
|
228
|
+
- spec/fixtures/lib/persistence/my_mappers/user_list.rb
|
229
|
+
- spec/fixtures/lib/persistence/my_relations/users.rb
|
217
230
|
- spec/fixtures/lib/persistence/relations/users.rb
|
218
231
|
- spec/integration/command_registry_spec.rb
|
219
232
|
- spec/integration/commands/create_spec.rb
|
@@ -270,7 +283,6 @@ files:
|
|
270
283
|
- spec/support/mutant.rb
|
271
284
|
- spec/test/memory_repository_lint_test.rb
|
272
285
|
- spec/unit/rom/association_set_spec.rb
|
273
|
-
- spec/unit/rom/auto_registration_spec.rb
|
274
286
|
- spec/unit/rom/commands/graph_spec.rb
|
275
287
|
- spec/unit/rom/commands/lazy_spec.rb
|
276
288
|
- spec/unit/rom/commands/result_spec.rb
|
@@ -300,6 +312,7 @@ files:
|
|
300
312
|
- spec/unit/rom/relation/schema_spec.rb
|
301
313
|
- spec/unit/rom/relation_spec.rb
|
302
314
|
- spec/unit/rom/schema_spec.rb
|
315
|
+
- spec/unit/rom/setup/auto_registration_spec.rb
|
303
316
|
homepage: http://rom-rb.org
|
304
317
|
licenses:
|
305
318
|
- MIT
|
@@ -1,54 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'rom/setup/auto_registration'
|
3
|
-
|
4
|
-
RSpec.describe ROM::Setup, '#auto_registration' do
|
5
|
-
let(:setup) { ROM::Setup.new }
|
6
|
-
|
7
|
-
context 'with namespace turned on' do
|
8
|
-
before do
|
9
|
-
setup.auto_registration(SPEC_ROOT.join('fixtures/lib/persistence').to_s)
|
10
|
-
end
|
11
|
-
|
12
|
-
describe '#relations' do
|
13
|
-
it 'loads files and returns constants' do
|
14
|
-
expect(setup.relation_classes).to eql([Persistence::Relations::Users])
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
describe '#commands' do
|
19
|
-
it 'loads files and returns constants' do
|
20
|
-
expect(setup.command_classes).to eql([Persistence::Commands::CreateUser])
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
describe '#mappers' do
|
25
|
-
it 'loads files and returns constants' do
|
26
|
-
expect(setup.mapper_classes).to eql([Persistence::Mappers::UserList])
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
context 'with namespace turned off' do
|
32
|
-
before do
|
33
|
-
setup.auto_registration(SPEC_ROOT.join('fixtures/app'), namespace: false)
|
34
|
-
end
|
35
|
-
|
36
|
-
describe '#relations' do
|
37
|
-
it 'loads files and returns constants' do
|
38
|
-
expect(setup.relation_classes).to eql([Users])
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
describe '#commands' do
|
43
|
-
it 'loads files and returns constants' do
|
44
|
-
expect(setup.command_classes).to eql([CreateUser])
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
describe '#mappers' do
|
49
|
-
it 'loads files and returns constants' do
|
50
|
-
expect(setup.mapper_classes).to eql([UserList])
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|