Skip to content

Commit 2fa005c

Browse files
committed
Refactor optimized relation reader
1 parent 520bc19 commit 2fa005c

File tree

6 files changed

+32
-30
lines changed

6 files changed

+32
-30
lines changed

core/lib/rom/plugins/relation/registry_reader.rb

+2-2
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@ class RegistryReader < ::Module
1414
EMPTY_REGISTRY = RelationRegistry.build(EMPTY_HASH).freeze
1515

1616
# @api private
17-
def initialize(klass:, relation_readers_module:)
17+
def initialize(readers:)
1818
super()
19-
klass.include relation_readers_module
19+
include readers
2020
end
2121

2222
# @api private

core/lib/rom/setup/finalize/finalize_relations.rb

+8-10
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,12 @@ class Finalize
99
class FinalizeRelations
1010
attr_reader :notifications
1111

12-
module BuildRelationReaders
13-
def self.build(relations)
14-
Module.new do
15-
relations.each do |name|
16-
define_method(name) do
17-
__registry__[name]
18-
end
19-
end
12+
class RegistryReaders < ::Module
13+
def initialize(relations)
14+
super()
15+
16+
relations.each do |name|
17+
define_method(name) { __registry__[name] }
2018
end
2119
end
2220
end
@@ -44,7 +42,7 @@ def initialize(gateways, relation_classes, notifications:, mappers: nil, plugins
4442
# rubocop:disable Metrics/AbcSize, Metrics/MethodLength
4543
def run!
4644
relation_registry = RelationRegistry.new do |registry, relations|
47-
relation_readers_module = BuildRelationReaders.build(relation_names)
45+
registry_readers = RegistryReaders.new(relation_names)
4846
@relation_classes.each do |klass|
4947
unless klass.adapter
5048
raise MissingAdapterIdentifierError,
@@ -58,7 +56,7 @@ def run!
5856
"Relation with name #{key.inspect} registered more than once"
5957
end
6058

61-
klass.use(:registry_reader, klass: klass, relation_readers_module: relation_readers_module)
59+
klass.use(:registry_reader, readers: registry_readers)
6260

6361
notifications.trigger(
6462
'configuration.relations.class.ready',

repository/lib/rom/repository/class_interface.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ def new(container = nil, **options)
6060
container ||= options.fetch(:container)
6161

6262
unless relation_reader
63-
relation_reader(RelationReader.new(self, container.relations.elements.keys))
63+
relation_reader(RelationReader.new(container.relations.elements.keys))
6464
include(relation_reader)
6565
end
6666

repository/lib/rom/repository/relation_reader.rb

+19-15
Original file line numberDiff line numberDiff line change
@@ -7,40 +7,44 @@ class RelationReader < ::Module
77
extend ::Dry::Core::ClassAttributes
88

99
# @api private
10-
attr_reader :klass
11-
12-
# @api private
13-
attr_reader :relations
14-
1510
defines :relation_readers
1611

12+
# @api private
1713
defines :mutex
18-
mutex(Mutex.new)
14+
mutex ::Mutex.new
1915

16+
# @api private
2017
defines :relation_cache
21-
relation_cache(Concurrent::Hash.new)
18+
relation_cache ::Concurrent::Hash.new
19+
20+
# @api private
21+
attr_reader :klass
22+
23+
# @api private
24+
attr_reader :relations
2225

2326
module InstanceMethods
2427
# @api private
25-
def set_relation(name) # rubocop:disable Naming/AccessorMethodName
28+
def prepare_relation(name)
2629
container
2730
.relations[name]
28-
.with(auto_struct: auto_struct, struct_namespace: struct_namespace)
31+
.with(
32+
auto_struct: auto_struct,
33+
struct_namespace: struct_namespace
34+
)
2935
end
3036

3137
def relation_reader(name, relation_cache)
3238
key = [name, auto_struct, struct_namespace]
33-
relation_cache[key] ||= set_relation(name)
39+
relation_cache[key] ||= prepare_relation(name)
3440
end
3541
end
3642

3743
# @api private
38-
def mutex
39-
ROM::Repository::RelationReader.mutex
40-
end
44+
def mutex = self.class.mutex
4145

4246
# @api private
43-
def initialize(klass, relations)
47+
def initialize(relations)
4448
super()
4549
@relations = relations
4650
mutex.synchronize do
@@ -50,7 +54,7 @@ def initialize(klass, relations)
5054
)
5155
end
5256
end
53-
klass.include self.class.relation_readers
57+
include self.class.relation_readers
5458
end
5559

5660
# @api private

repository/lib/rom/repository/root.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ def self.inherited(klass)
5858
# @see Repository#initialize
5959
def initialize(*, **)
6060
super
61-
@root = set_relation(self.class.root)
61+
@root = prepare_relation(self.class.root)
6262
end
6363
end
6464
end

repository/spec/integration/plugin_spec.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ def self.apply(target, **)
1212
target.prepend(self)
1313
end
1414

15-
def set_relation(*)
15+
def prepare_relation(*)
1616
super.where { `1 = 0` }
1717
end
1818
end

0 commit comments

Comments
 (0)