rom-core 5.1.1 → 5.2.4
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/lib/rom/array_dataset.rb +4 -4
- data/lib/rom/association_set.rb +2 -3
- data/lib/rom/associations/definitions/abstract.rb +2 -2
- data/lib/rom/associations/many_to_many.rb +1 -0
- data/lib/rom/attribute.rb +5 -4
- data/lib/rom/auto_curry.rb +2 -0
- data/lib/rom/command.rb +6 -6
- data/lib/rom/command_compiler.rb +5 -9
- data/lib/rom/commands/class_interface.rb +7 -7
- data/lib/rom/commands/composite.rb +1 -1
- data/lib/rom/commands/graph/input_evaluator.rb +1 -1
- data/lib/rom/commands/lazy.rb +2 -1
- data/lib/rom/commands/lazy/create.rb +1 -1
- data/lib/rom/commands/lazy/update.rb +3 -3
- data/lib/rom/configuration.rb +5 -5
- data/lib/rom/configuration_dsl/relation.rb +1 -1
- data/lib/rom/constants.rb +1 -1
- data/lib/rom/core/version.rb +1 -1
- data/lib/rom/data_proxy.rb +3 -2
- data/lib/rom/enumerable_dataset.rb +4 -4
- data/lib/rom/environment.rb +0 -1
- data/lib/rom/header/attribute.rb +2 -4
- data/lib/rom/initializer.rb +9 -7
- data/lib/rom/lint/gateway.rb +1 -3
- data/lib/rom/lint/linter.rb +3 -4
- data/lib/rom/lint/spec.rb +2 -2
- data/lib/rom/mapper.rb +4 -3
- data/lib/rom/mapper/attribute_dsl.rb +5 -5
- data/lib/rom/mapper/dsl.rb +2 -5
- data/lib/rom/mapper/model_dsl.rb +2 -1
- data/lib/rom/mapper_compiler.rb +2 -1
- data/lib/rom/mapper_registry.rb +3 -3
- data/lib/rom/memory/dataset.rb +4 -3
- data/lib/rom/pipeline.rb +3 -1
- data/lib/rom/plugin.rb +3 -3
- data/lib/rom/plugin_registry.rb +1 -1
- data/lib/rom/plugins/command/schema.rb +11 -10
- data/lib/rom/plugins/relation/instrumentation.rb +1 -1
- data/lib/rom/plugins/relation/registry_reader.rb +4 -3
- data/lib/rom/plugins/schema/timestamps.rb +4 -6
- data/lib/rom/processor.rb +1 -1
- data/lib/rom/processor/transproc.rb +16 -19
- data/lib/rom/registry.rb +17 -12
- data/lib/rom/relation.rb +6 -6
- data/lib/rom/relation/class_interface.rb +9 -8
- data/lib/rom/relation/combined.rb +1 -1
- data/lib/rom/relation/curried.rb +3 -2
- data/lib/rom/relation/loaded.rb +1 -0
- data/lib/rom/relation/materializable.rb +1 -0
- data/lib/rom/relation/name.rb +2 -2
- data/lib/rom/relation_registry.rb +1 -1
- data/lib/rom/schema.rb +22 -22
- data/lib/rom/schema/associations_dsl.rb +17 -17
- data/lib/rom/schema/dsl.rb +6 -6
- data/lib/rom/schema/inferrer.rb +2 -4
- data/lib/rom/setup.rb +2 -2
- data/lib/rom/setup/auto_registration.rb +2 -2
- data/lib/rom/setup/auto_registration_strategies/base.rb +1 -1
- data/lib/rom/setup/auto_registration_strategies/custom_namespace.rb +4 -4
- data/lib/rom/setup/auto_registration_strategies/no_namespace.rb +1 -1
- data/lib/rom/setup/auto_registration_strategies/with_namespace.rb +1 -1
- data/lib/rom/setup/finalize/finalize_commands.rb +7 -4
- data/lib/rom/setup/finalize/finalize_mappers.rb +9 -8
- data/lib/rom/setup/finalize/finalize_relations.rb +2 -2
- data/lib/rom/struct.rb +1 -1
- data/lib/rom/struct_compiler.rb +7 -6
- data/lib/rom/support/configurable.rb +0 -6
- data/lib/rom/support/memoizable.rb +3 -2
- data/lib/rom/transaction.rb +1 -1
- data/lib/rom/transformer.rb +1 -0
- metadata +6 -6
data/lib/rom/schema/dsl.rb
CHANGED
|
@@ -12,7 +12,7 @@ module ROM
|
|
|
12
12
|
#
|
|
13
13
|
# @api public
|
|
14
14
|
class DSL < BasicObject
|
|
15
|
-
KERNEL_METHODS = %i
|
|
15
|
+
KERNEL_METHODS = %i[extend method].freeze
|
|
16
16
|
KERNEL_METHODS.each { |m| define_method(m, ::Kernel.instance_method(m)) }
|
|
17
17
|
|
|
18
18
|
extend Initializer
|
|
@@ -65,6 +65,7 @@ module ROM
|
|
|
65
65
|
|
|
66
66
|
@definition = block
|
|
67
67
|
end
|
|
68
|
+
ruby2_keywords(:initialize) if respond_to?(:ruby2_keywords, true)
|
|
68
69
|
|
|
69
70
|
# Defines a relation attribute with its type and options.
|
|
70
71
|
#
|
|
@@ -78,7 +79,7 @@ module ROM
|
|
|
78
79
|
def attribute(name, type_or_options, options = EMPTY_HASH)
|
|
79
80
|
if attributes.key?(name)
|
|
80
81
|
::Kernel.raise ::ROM::AttributeAlreadyDefinedError,
|
|
81
|
-
"Attribute #{
|
|
82
|
+
"Attribute #{name.inspect} already defined"
|
|
82
83
|
end
|
|
83
84
|
|
|
84
85
|
attributes[name] = build_attribute_info(name, type_or_options, options)
|
|
@@ -132,8 +133,7 @@ module ROM
|
|
|
132
133
|
[build_type(type_or_options, options), options]
|
|
133
134
|
end
|
|
134
135
|
Schema.build_attribute_info(
|
|
135
|
-
type,
|
|
136
|
-
options.merge(name: name)
|
|
136
|
+
type, **options, name: name
|
|
137
137
|
)
|
|
138
138
|
end
|
|
139
139
|
|
|
@@ -185,9 +185,9 @@ module ROM
|
|
|
185
185
|
instance_exec(&block) if block
|
|
186
186
|
instance_exec(&definition) if definition
|
|
187
187
|
|
|
188
|
-
schema_class.define(relation, opts) do |schema|
|
|
188
|
+
schema_class.define(relation, **opts) do |schema|
|
|
189
189
|
plugins.values.each do |plugin, options|
|
|
190
|
-
plugin.apply_to(schema, options)
|
|
190
|
+
plugin.apply_to(schema, **options)
|
|
191
191
|
end
|
|
192
192
|
end
|
|
193
193
|
end
|
data/lib/rom/schema/inferrer.rb
CHANGED
|
@@ -76,9 +76,7 @@ module ROM
|
|
|
76
76
|
def check_all_attributes_defined(schema, all_known, not_inferred)
|
|
77
77
|
not_defined = not_inferred - all_known.map(&:name)
|
|
78
78
|
|
|
79
|
-
|
|
80
|
-
raise MissingAttributesError.new(schema.name, not_defined)
|
|
81
|
-
end
|
|
79
|
+
raise MissingAttributesError.new(schema.name, not_defined) unless not_defined.empty?
|
|
82
80
|
end
|
|
83
81
|
|
|
84
82
|
# @api private
|
|
@@ -91,7 +89,7 @@ module ROM
|
|
|
91
89
|
attrs << if attr.type.nil?
|
|
92
90
|
attr.class.new(
|
|
93
91
|
type_lookup.(inferred, attr.name),
|
|
94
|
-
attr.options
|
|
92
|
+
**attr.options
|
|
95
93
|
)
|
|
96
94
|
else
|
|
97
95
|
attr
|
data/lib/rom/setup.rb
CHANGED
|
@@ -46,8 +46,8 @@ module ROM
|
|
|
46
46
|
# @return [Setup]
|
|
47
47
|
#
|
|
48
48
|
# @api public
|
|
49
|
-
def auto_registration(directory, options
|
|
50
|
-
auto_registration = AutoRegistration.new(directory, options)
|
|
49
|
+
def auto_registration(directory, **options)
|
|
50
|
+
auto_registration = AutoRegistration.new(directory, **options)
|
|
51
51
|
auto_registration.relations.map { |r| register_relation(r) }
|
|
52
52
|
auto_registration.commands.map { |r| register_command(r) }
|
|
53
53
|
auto_registration.mappers.map { |r| register_mapper(r) }
|
|
@@ -43,7 +43,7 @@ module ROM
|
|
|
43
43
|
|
|
44
44
|
# @!attribute [r] globs
|
|
45
45
|
# @return [Hash] File globbing functions for each component dir
|
|
46
|
-
option :globs, default:
|
|
46
|
+
option :globs, default: lambda {
|
|
47
47
|
Hash[
|
|
48
48
|
component_dirs.map { |component, path|
|
|
49
49
|
[component, directory.join("#{path}/**/*.rb")]
|
|
@@ -78,7 +78,7 @@ module ROM
|
|
|
78
78
|
#
|
|
79
79
|
# @api private
|
|
80
80
|
def load_entities(entity)
|
|
81
|
-
Dir[globs[entity]].map do |file|
|
|
81
|
+
Dir[globs[entity]].sort.map do |file|
|
|
82
82
|
require file
|
|
83
83
|
klass_name =
|
|
84
84
|
case namespace
|
|
@@ -32,7 +32,7 @@ module ROM
|
|
|
32
32
|
attempted = []
|
|
33
33
|
|
|
34
34
|
potential.map do |path|
|
|
35
|
-
const_fragment = path.join(
|
|
35
|
+
const_fragment = path.join('::')
|
|
36
36
|
|
|
37
37
|
constant = "#{namespace}::#{const_fragment}"
|
|
38
38
|
|
|
@@ -54,8 +54,8 @@ module ROM
|
|
|
54
54
|
|
|
55
55
|
# @api private
|
|
56
56
|
def name_error_message(attempted)
|
|
57
|
-
|
|
58
|
-
|
|
57
|
+
'required file does not define expected constant name; either ' \
|
|
58
|
+
'register your constant explicitly of try following the path' \
|
|
59
59
|
"naming convention like:\n\n\t- #{attempted.join("\n\t- ")}\n"
|
|
60
60
|
end
|
|
61
61
|
|
|
@@ -76,7 +76,7 @@ module ROM
|
|
|
76
76
|
|
|
77
77
|
# @api private
|
|
78
78
|
def file_path
|
|
79
|
-
File.dirname(file).split(
|
|
79
|
+
File.dirname(file).split('/') - directory.to_s.split('/')
|
|
80
80
|
end
|
|
81
81
|
end
|
|
82
82
|
end
|
|
@@ -41,13 +41,16 @@ module ROM
|
|
|
41
41
|
klass.build(relation)
|
|
42
42
|
end
|
|
43
43
|
|
|
44
|
-
registry = Registry.new
|
|
44
|
+
registry = Registry.new
|
|
45
45
|
compiler = CommandCompiler.new(@gateways, @relations, registry, notifications)
|
|
46
46
|
|
|
47
47
|
@relations.each do |(name, relation)|
|
|
48
|
-
commands.
|
|
49
|
-
|
|
50
|
-
|
|
48
|
+
rel_commands = commands.select { |c| c.relation.name == relation.name }
|
|
49
|
+
|
|
50
|
+
rel_commands.each do |command|
|
|
51
|
+
identifier = command.class.register_as || command.class.default_name
|
|
52
|
+
relation.commands.elements[identifier] = command
|
|
53
|
+
end
|
|
51
54
|
|
|
52
55
|
relation.commands.set_compiler(compiler)
|
|
53
56
|
relation.commands.set_mappers(relation.mappers)
|
|
@@ -14,10 +14,10 @@ module ROM
|
|
|
14
14
|
|
|
15
15
|
check_duplicate_registered_mappers
|
|
16
16
|
|
|
17
|
-
@registry_hash = [@mapper_classes.map(&:base_relation) + @mapper_objects.keys]
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
17
|
+
@registry_hash = [@mapper_classes.map(&:base_relation) + @mapper_objects.keys]
|
|
18
|
+
.flatten
|
|
19
|
+
.uniq
|
|
20
|
+
.each_with_object({}) { |n, h| h[n] = {} }
|
|
21
21
|
end
|
|
22
22
|
|
|
23
23
|
# @api private
|
|
@@ -40,8 +40,9 @@ module ROM
|
|
|
40
40
|
private
|
|
41
41
|
|
|
42
42
|
def check_duplicate_registered_mappers
|
|
43
|
-
mapper_relation_register = mapper_classes.map {|mapper_class| [mapper_class.relation, mapper_class.register_as].compact }
|
|
43
|
+
mapper_relation_register = mapper_classes.map { |mapper_class| [mapper_class.relation, mapper_class.register_as].compact }
|
|
44
44
|
return if mapper_relation_register.uniq.count == mapper_classes.count
|
|
45
|
+
|
|
45
46
|
mapper_relation_register.select { |relation_register_as| mapper_relation_register.count(relation_register_as) > 1 }
|
|
46
47
|
.uniq
|
|
47
48
|
.each do |duplicated_mappers|
|
|
@@ -52,9 +53,9 @@ module ROM
|
|
|
52
53
|
end
|
|
53
54
|
|
|
54
55
|
def build_mappers(relation_name)
|
|
55
|
-
mapper_classes
|
|
56
|
-
select { |klass| klass.base_relation == relation_name }
|
|
57
|
-
each_with_object({}) { |klass, h| h[klass.register_as || klass.relation] = klass.build
|
|
56
|
+
mapper_classes
|
|
57
|
+
.select { |klass| klass.base_relation == relation_name }
|
|
58
|
+
.each_with_object({}) { |klass, h| h[klass.register_as || klass.relation] = klass.build }
|
|
58
59
|
end
|
|
59
60
|
end
|
|
60
61
|
end
|
|
@@ -43,7 +43,7 @@ module ROM
|
|
|
43
43
|
"Relation with name #{key.inspect} registered more than once"
|
|
44
44
|
end
|
|
45
45
|
|
|
46
|
-
klass.use(:registry_reader, relation_names)
|
|
46
|
+
klass.use(:registry_reader, relations: relation_names)
|
|
47
47
|
|
|
48
48
|
notifications.trigger('configuration.relations.class.ready', relation: klass, adapter: klass.adapter)
|
|
49
49
|
|
|
@@ -105,7 +105,7 @@ module ROM
|
|
|
105
105
|
|
|
106
106
|
options = { __registry__: registry, mappers: mapper_registry(rel_key, klass), schema: schema, **plugin_options }
|
|
107
107
|
|
|
108
|
-
klass.new(dataset, options)
|
|
108
|
+
klass.new(dataset, **options)
|
|
109
109
|
end
|
|
110
110
|
|
|
111
111
|
# @api private
|
data/lib/rom/struct.rb
CHANGED
|
@@ -102,7 +102,7 @@ module ROM
|
|
|
102
102
|
def method_missing(*)
|
|
103
103
|
super
|
|
104
104
|
rescue NameError => error
|
|
105
|
-
raise MissingAttribute.new { "#{
|
|
105
|
+
raise MissingAttribute.new { "#{error.message} (attribute not loaded?)" }
|
|
106
106
|
end
|
|
107
107
|
end
|
|
108
108
|
end
|
data/lib/rom/struct_compiler.rb
CHANGED
|
@@ -20,10 +20,11 @@ module ROM
|
|
|
20
20
|
option :cache, default: -> { Cache.new }
|
|
21
21
|
|
|
22
22
|
# @api private
|
|
23
|
-
def initialize(*
|
|
23
|
+
def initialize(*)
|
|
24
24
|
super
|
|
25
25
|
@cache = cache.namespaced(:structs)
|
|
26
26
|
end
|
|
27
|
+
ruby2_keywords(:initialize) if respond_to?(:ruby2_keywords, true)
|
|
27
28
|
|
|
28
29
|
# Build a struct class based on relation header ast
|
|
29
30
|
#
|
|
@@ -84,7 +85,7 @@ module ROM
|
|
|
84
85
|
|
|
85
86
|
# @api private
|
|
86
87
|
def visit_constrained(node)
|
|
87
|
-
definition,
|
|
88
|
+
definition, = node
|
|
88
89
|
|
|
89
90
|
visit(definition)
|
|
90
91
|
end
|
|
@@ -97,14 +98,14 @@ module ROM
|
|
|
97
98
|
|
|
98
99
|
# @api private
|
|
99
100
|
def build_class(name, parent, ns, &block)
|
|
100
|
-
Dry::Core::ClassBuilder
|
|
101
|
-
new(name: class_name(name), parent: parent, namespace: ns)
|
|
102
|
-
call(&block)
|
|
101
|
+
Dry::Core::ClassBuilder
|
|
102
|
+
.new(name: class_name(name), parent: parent, namespace: ns)
|
|
103
|
+
.call(&block)
|
|
103
104
|
end
|
|
104
105
|
|
|
105
106
|
# @api private
|
|
106
107
|
def class_name(name)
|
|
107
|
-
Inflector.classify(
|
|
108
|
+
Inflector.classify(name)
|
|
108
109
|
end
|
|
109
110
|
end
|
|
110
111
|
end
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
module ROM
|
|
4
4
|
# @api private
|
|
5
5
|
module Memoizable
|
|
6
|
-
MEMOIZED_HASH = {}
|
|
6
|
+
MEMOIZED_HASH = {}.freeze
|
|
7
7
|
|
|
8
8
|
module ClassInterface
|
|
9
9
|
# @api private
|
|
@@ -16,6 +16,7 @@ module ROM
|
|
|
16
16
|
obj.instance_variable_set(:'@__memoized__', MEMOIZED_HASH.dup)
|
|
17
17
|
obj
|
|
18
18
|
end
|
|
19
|
+
ruby2_keywords(:new) if respond_to?(:ruby2_keywords, true)
|
|
19
20
|
end
|
|
20
21
|
|
|
21
22
|
def self.included(klass)
|
|
@@ -44,7 +45,7 @@ module ROM
|
|
|
44
45
|
names.each do |name|
|
|
45
46
|
meth = klass.instance_method(name)
|
|
46
47
|
|
|
47
|
-
if meth.parameters.
|
|
48
|
+
if !meth.parameters.empty?
|
|
48
49
|
define_method(name) do |*args|
|
|
49
50
|
__memoized__[:"#{name}_#{args.hash}"] ||= super(*args)
|
|
50
51
|
end
|
data/lib/rom/transaction.rb
CHANGED
data/lib/rom/transformer.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: rom-core
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 5.
|
|
4
|
+
version: 5.2.4
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Piotr Solnica
|
|
8
|
-
autorequire:
|
|
8
|
+
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2020-12-30 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: concurrent-ruby
|
|
@@ -327,7 +327,7 @@ metadata:
|
|
|
327
327
|
documentation_uri: https://api.rom-rb.org/rom/
|
|
328
328
|
mailing_list_uri: https://discourse.rom-rb.org/
|
|
329
329
|
bug_tracker_uri: https://github.com/rom-rb/rom/issues
|
|
330
|
-
post_install_message:
|
|
330
|
+
post_install_message:
|
|
331
331
|
rdoc_options: []
|
|
332
332
|
require_paths:
|
|
333
333
|
- lib
|
|
@@ -342,8 +342,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
342
342
|
- !ruby/object:Gem::Version
|
|
343
343
|
version: '0'
|
|
344
344
|
requirements: []
|
|
345
|
-
rubygems_version: 3.
|
|
346
|
-
signing_key:
|
|
345
|
+
rubygems_version: 3.2.3
|
|
346
|
+
signing_key:
|
|
347
347
|
specification_version: 4
|
|
348
348
|
summary: Ruby Object Mapper
|
|
349
349
|
test_files: []
|