rom-core 5.1.2 → 5.2.1
Sign up to get free protection for your applications and to get access to all the features.
- 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 -7
- 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 +2 -2
- 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/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 +1 -1
- 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 +1 -1
- 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 +6 -5
- data/lib/rom/support/memoizable.rb +3 -2
- data/lib/rom/transaction.rb +1 -1
- data/lib/rom/transformer.rb +1 -0
- metadata +3 -3
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")]
|
@@ -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,9 +98,9 @@ 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
|
@@ -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.1
|
4
|
+
version: 5.2.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:
|
11
|
+
date: 2020-01-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: concurrent-ruby
|
@@ -342,7 +342,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
342
342
|
- !ruby/object:Gem::Version
|
343
343
|
version: '0'
|
344
344
|
requirements: []
|
345
|
-
rubygems_version: 3.0.
|
345
|
+
rubygems_version: 3.1.0.pre3
|
346
346
|
signing_key:
|
347
347
|
specification_version: 4
|
348
348
|
summary: Ruby Object Mapper
|