rom-repository 5.2.2 → 5.4.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 550a6edbadf63192bfb25f13730d36333249b4d62a09ae50082293673ec2323d
4
- data.tar.gz: ded42536cbd47227855fd97fa29c264579a25cd60f546e83e76d51f170422a8a
3
+ metadata.gz: 1945e400f70ab8fba8b203ab2a5894ff0c3af70dbe55a00bb20ccd33ed0663b8
4
+ data.tar.gz: 48e96bca0f06806b8cc03a390c3c11ecae6f1b4b05c3ae0c96e0b380c25e27d6
5
5
  SHA512:
6
- metadata.gz: f190a22779c2f484ae5707f96b543b47b3682d8e55aee281d45761cc20f68aedb85b09ef19f278c09829f0ea1ef6911cc848e81d634b93b0d4ebf8447c4acaca
7
- data.tar.gz: acde1423d52bc20df33ad05197de2727a20e2e8de12dd262de4a726c715a31975c1fbcfbe95d799b5030ed92e0f174e540197bf9fdb769bcc398aba422d579e3
6
+ metadata.gz: 42202fc4ee9f6680131f95e990eb8785ad23fd82aa67cedd1ce79249cd8bdb2318b081b31f6efc2f632f18a29d6dd17de7739f848906b997e46457416f3eacd8
7
+ data.tar.gz: 1ce9298b198da42a05070e5efdc6f426f7fdb0a9107428af9e3031c19296728df9ddb5bf369fb1fbec836740c4d14f6a827c48fa3cae9a83fc33de63be63a174
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'dry/core/cache'
4
-
5
3
  require 'rom/repository/relation_reader'
6
4
 
7
5
  module ROM
@@ -24,7 +22,14 @@ module ROM
24
22
  # @api public
25
23
  def [](name)
26
24
  fetch_or_store(name) do
27
- klass = Class.new(self < Repository::Root ? self : Repository::Root)
25
+ base =
26
+ if self < Repository::Root # rubocop:disable Style/MinMaxComparison
27
+ self
28
+ else
29
+ Repository::Root
30
+ end
31
+
32
+ klass = ::Class.new(base)
28
33
  klass.root(name)
29
34
  klass
30
35
  end
@@ -51,12 +56,15 @@ module ROM
51
56
  # @option options [Boolean] :auto_struct Enable/Disable auto-struct mapping
52
57
  #
53
58
  # @api public
54
- def new(container = nil, **options)
59
+ def new(container = nil, root: Undefined, **options)
55
60
  container ||= options.fetch(:container)
56
61
 
57
- unless relation_reader
58
- relation_reader(RelationReader.new(self, container.relations.elements.keys))
59
- include(relation_reader)
62
+ unless self < relation_reader
63
+ include relation_reader.new(
64
+ relations: container.relations.elements.keys,
65
+ cache: container.cache,
66
+ root: root
67
+ )
60
68
  end
61
69
 
62
70
  super(**options, container: container)
@@ -68,7 +76,7 @@ module ROM
68
76
  def inherited(klass)
69
77
  super
70
78
 
71
- return if self === Repository
79
+ return if self === Repository # rubocop:disable Style/CaseEquality
72
80
 
73
81
  klass.extend(::Dry::Core::Cache)
74
82
  klass.commands(*commands)
@@ -98,6 +106,8 @@ module ROM
98
106
  # @return [Array<Symbol>] A list of defined command names
99
107
  #
100
108
  # @api public
109
+ #
110
+ # rubocop:disable Metrics/MethodLength
101
111
  def commands(*names, mapper: nil, use: nil, plugins_options: EMPTY_HASH, **opts)
102
112
  if names.any? || opts.any?
103
113
  @commands = names + opts.to_a
@@ -105,16 +115,28 @@ module ROM
105
115
  @commands.each do |spec|
106
116
  type, *view = Array(spec).flatten
107
117
 
108
- if !view.empty?
109
- define_restricted_command_method(type, view, mapper: mapper, use: use, plugins_options: plugins_options)
118
+ if view.empty?
119
+ define_command_method(
120
+ type,
121
+ mapper: mapper,
122
+ use: use,
123
+ plugins_options: plugins_options
124
+ )
110
125
  else
111
- define_command_method(type, mapper: mapper, use: use, plugins_options: plugins_options)
126
+ define_restricted_command_method(
127
+ type,
128
+ view,
129
+ mapper: mapper,
130
+ use: use,
131
+ plugins_options: plugins_options
132
+ )
112
133
  end
113
134
  end
114
135
  else
115
136
  @commands ||= []
116
137
  end
117
138
  end
139
+ # rubocop:enable Metrics/MethodLength
118
140
 
119
141
  # @api public
120
142
  def use(plugin, **options)
@@ -3,44 +3,76 @@
3
3
  module ROM
4
4
  class Repository
5
5
  # @api private
6
- class RelationReader < Module
7
- # @api private
8
- attr_reader :klass
9
-
10
- # @api private
11
- attr_reader :relations
12
-
6
+ class RelationReader < ::Module
13
7
  module InstanceMethods
8
+ private
9
+
14
10
  # @api private
15
- def set_relation(name)
11
+ def prepare_relation(name, **)
16
12
  container
17
13
  .relations[name]
18
- .with(auto_struct: auto_struct)
19
- .struct_namespace(struct_namespace)
14
+ .with(
15
+ auto_struct: auto_struct,
16
+ struct_namespace: struct_namespace
17
+ )
18
+ end
19
+
20
+ # @api private
21
+ def relation_reader(cache, ...)
22
+ cache_key = relation_cache_key(...)
23
+ cache.fetch_or_store(*cache_key) { prepare_relation(...) }
24
+ end
25
+
26
+ # @api private
27
+ def relation_cache_key(name, **)
28
+ [name, auto_struct, struct_namespace]
20
29
  end
21
30
  end
22
31
 
23
32
  # @api private
24
- def initialize(klass, relations)
25
- @klass = klass
26
- @relations = relations
27
- define_readers!
33
+ class Readers < ::Module
34
+ # @api private
35
+ attr_reader :cache
36
+
37
+ def initialize(relations)
38
+ super()
39
+
40
+ include InstanceMethods
41
+
42
+ define_readers(relations)
43
+ end
44
+
45
+ # @api private
46
+ def define_readers(relations)
47
+ cache = Cache.new
48
+ relations.each do |name|
49
+ define_readers_for_relation(cache, name)
50
+ end
51
+ end
52
+
53
+ # @api private
54
+ def define_readers_for_relation(cache, name)
55
+ define_method(name) do |**kwargs|
56
+ relation_reader(cache, name, **kwargs)
57
+ end
58
+ end
28
59
  end
29
60
 
30
61
  # @api private
31
- def included(klass)
32
- super
33
- klass.include(InstanceMethods)
34
- end
62
+ def initialize(relations:, cache:, root: Undefined)
63
+ super()
35
64
 
36
- private
65
+ add_readers(relations, cache, root)
66
+ end
37
67
 
38
68
  # @api private
39
- def define_readers!
40
- relations.each do |name|
41
- define_method(name) do
42
- @relations[name] ||= set_relation(name)
43
- end
69
+ def add_readers(relations, cache, root)
70
+ include cache.fetch_or_store(:relation_readers) {
71
+ Readers.new(relations)
72
+ }
73
+
74
+ unless Undefined.equal?(root)
75
+ define_method(:root) { |**kwargs| public_send(root, **kwargs) }
44
76
  end
45
77
  end
46
78
  end
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'dry/core/class_attributes'
4
-
5
3
  module ROM
6
4
  class Repository
7
5
  # A specialized repository type dedicated to work with a root relation
@@ -45,9 +43,10 @@ module ROM
45
43
  # @return [Symbol]
46
44
  defines :root
47
45
 
48
- # @!attribute [r] root
49
- # @return [Relation] The root relation
50
- attr_reader :root
46
+ # @api public
47
+ def self.new(*args, **kwargs)
48
+ super(*args, **kwargs, root: root)
49
+ end
51
50
 
52
51
  # Sets descendant root relation
53
52
  #
@@ -56,13 +55,6 @@ module ROM
56
55
  super
57
56
  klass.root(root)
58
57
  end
59
-
60
- # @see Repository#initialize
61
- def initialize(*)
62
- super
63
- @root = set_relation(self.class.root)
64
- end
65
- ruby2_keywords(:initialize) if respond_to?(:ruby2_keywords, true)
66
58
  end
67
59
  end
68
60
  end
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'dry/equalizer'
4
-
5
3
  module ROM
6
4
  # TODO: finish this in 1.1.0
7
5
  #
@@ -2,6 +2,6 @@
2
2
 
3
3
  module ROM
4
4
  class Repository
5
- VERSION = '5.2.2'
5
+ VERSION = '5.4.0'
6
6
  end
7
7
  end
@@ -1,8 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'dry/core/cache'
4
- require 'dry/core/class_attributes'
5
-
6
3
  require 'rom/initializer'
7
4
  require 'rom/struct'
8
5
  require 'rom/container'
@@ -83,8 +80,9 @@ module ROM
83
80
 
84
81
  # @!method self.relation_reader
85
82
  # Get or set relation reader module
86
- # @return [RelationReader]
83
+ # @return [Module]
87
84
  defines :relation_reader
85
+ relation_reader RelationReader
88
86
 
89
87
  struct_namespace ROM::Struct
90
88
 
@@ -107,11 +105,10 @@ module ROM
107
105
  # Initializes a new repository object
108
106
  #
109
107
  # @api private
110
- def initialize(*)
108
+ def initialize(*, **)
111
109
  super
112
110
  @relations = {}
113
111
  end
114
- ruby2_keywords(:initialize) if respond_to?(:ruby2_keywords, true)
115
112
 
116
113
  # Open a database transaction
117
114
  #
@@ -146,8 +143,8 @@ module ROM
146
143
  # # => #<ROM::Struct::User id=1 name="Jane">
147
144
  #
148
145
  # @api public
149
- def transaction(*args, &block)
150
- container.gateways[:default].transaction(*args, &block)
146
+ def transaction(...)
147
+ container.gateways[:default].transaction(...)
151
148
  end
152
149
 
153
150
  # Return a string representation of a repository object
metadata CHANGED
@@ -1,97 +1,56 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rom-repository
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.2.2
4
+ version: 5.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Piotr Solnica
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2020-03-03 00:00:00.000000000 Z
10
+ date: 2025-01-08 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
- name: dry-initializer
13
+ name: dry-core
15
14
  requirement: !ruby/object:Gem::Requirement
16
15
  requirements:
17
16
  - - "~>"
18
17
  - !ruby/object:Gem::Version
19
- version: '3.0'
20
- - - ">="
21
- - !ruby/object:Gem::Version
22
- version: 3.0.1
18
+ version: '1.0'
23
19
  type: :runtime
24
20
  prerelease: false
25
21
  version_requirements: !ruby/object:Gem::Requirement
26
22
  requirements:
27
23
  - - "~>"
28
24
  - !ruby/object:Gem::Version
29
- version: '3.0'
30
- - - ">="
31
- - !ruby/object:Gem::Version
32
- version: 3.0.1
25
+ version: '1.0'
33
26
  - !ruby/object:Gem::Dependency
34
- name: dry-core
27
+ name: dry-initializer
35
28
  requirement: !ruby/object:Gem::Requirement
36
29
  requirements:
37
30
  - - "~>"
38
31
  - !ruby/object:Gem::Version
39
- version: '0.4'
32
+ version: '3.2'
40
33
  type: :runtime
41
34
  prerelease: false
42
35
  version_requirements: !ruby/object:Gem::Requirement
43
36
  requirements:
44
37
  - - "~>"
45
38
  - !ruby/object:Gem::Version
46
- version: '0.4'
39
+ version: '3.2'
47
40
  - !ruby/object:Gem::Dependency
48
41
  name: rom-core
49
42
  requirement: !ruby/object:Gem::Requirement
50
43
  requirements:
51
44
  - - "~>"
52
45
  - !ruby/object:Gem::Version
53
- version: '5.2'
54
- - - ">="
55
- - !ruby/object:Gem::Version
56
- version: 5.2.2
46
+ version: '5.4'
57
47
  type: :runtime
58
48
  prerelease: false
59
49
  version_requirements: !ruby/object:Gem::Requirement
60
50
  requirements:
61
51
  - - "~>"
62
52
  - !ruby/object:Gem::Version
63
- version: '5.2'
64
- - - ">="
65
- - !ruby/object:Gem::Version
66
- version: 5.2.2
67
- - !ruby/object:Gem::Dependency
68
- name: rake
69
- requirement: !ruby/object:Gem::Requirement
70
- requirements:
71
- - - "~>"
72
- - !ruby/object:Gem::Version
73
- version: '11.2'
74
- type: :development
75
- prerelease: false
76
- version_requirements: !ruby/object:Gem::Requirement
77
- requirements:
78
- - - "~>"
79
- - !ruby/object:Gem::Version
80
- version: '11.2'
81
- - !ruby/object:Gem::Dependency
82
- name: rspec
83
- requirement: !ruby/object:Gem::Requirement
84
- requirements:
85
- - - "~>"
86
- - !ruby/object:Gem::Version
87
- version: '3.5'
88
- type: :development
89
- prerelease: false
90
- version_requirements: !ruby/object:Gem::Requirement
91
- requirements:
92
- - - "~>"
93
- - !ruby/object:Gem::Version
94
- version: '3.5'
53
+ version: '5.4'
95
54
  description: Repository abstraction for rom-rb
96
55
  email: piotr.solnica+oss@gmail.com
97
56
  executables: []
@@ -116,7 +75,7 @@ metadata:
116
75
  documentation_uri: https://api.rom-rb.org/rom/
117
76
  mailing_list_uri: https://discourse.rom-rb.org/
118
77
  bug_tracker_uri: https://github.com/rom-rb/rom/issues
119
- post_install_message:
78
+ rubygems_mfa_required: 'true'
120
79
  rdoc_options: []
121
80
  require_paths:
122
81
  - lib
@@ -131,8 +90,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
131
90
  - !ruby/object:Gem::Version
132
91
  version: '0'
133
92
  requirements: []
134
- rubygems_version: 3.1.2
135
- signing_key:
93
+ rubygems_version: 3.6.2
136
94
  specification_version: 4
137
95
  summary: Repository abstraction for rom-rb
138
96
  test_files: []