rom-repository 5.2.2 → 5.4.0

Sign up to get free protection for your applications and to get access to all the features.
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: []