rom-repository 1.3.3 → 1.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 +4 -4
- data/CHANGELOG.md +11 -5
- data/lib/rom/repository.rb +2 -1
- data/lib/rom/repository/relation_proxy.rb +38 -2
- data/lib/rom/repository/version.rb +1 -1
- data/lib/rom/struct.rb +12 -1
- data/rom-repository.gemspec +2 -2
- data/spec/integration/multi_adapter_spec.rb +2 -5
- data/spec/shared/relations.rb +7 -11
- data/spec/unit/relation_proxy_spec.rb +3 -3
- metadata +7 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 60e1932a1540f3a5db52bbb5a4ae073b83ee0289
|
4
|
+
data.tar.gz: 8a430f76a00792c4d12d94d8271b0736310dc20b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 514906df2e8c7c3b33fb3cce5083d65f4b238ca1aa7ca03df9d736f0ceb4752b610d66937e372645cc0f71dd7a0d845cbcdeca27a69a8ca13a367bf75a42b3e8
|
7
|
+
data.tar.gz: a75e84fd982d615e4f57802a130658d5d0482c62bf0216f6cf70c6c348c4b99d50561cdcd33de73f6b7ff3700fc15702d4023711b2fe0c0c599b184dc45a77b4
|
data/CHANGELOG.md
CHANGED
@@ -1,12 +1,18 @@
|
|
1
|
+
# v1.4.0 2017-07-04
|
2
|
+
|
3
|
+
### Added
|
4
|
+
|
5
|
+
* `Relation#map_to` available in repository relations to ease upgrade to rom 4.0 (solnic)
|
6
|
+
* Deprecation warnings in preparation for rom 4.0 release (solnic)
|
7
|
+
|
8
|
+
[Compare v1.3.3...v1.3.4](https://github.com/rom-rb/rom-repository/compare/v1.3.3...v1.3.4)
|
9
|
+
|
1
10
|
# v1.3.3 2017-05-31
|
2
11
|
|
3
12
|
### Added
|
4
13
|
|
5
|
-
* `Changeset#extend` to exclude steps from the `#diff` output, this allows
|
6
|
-
|
7
|
-
hitting the database in case of timestamp-only changes. You still can call `.map(:touch)`
|
8
|
-
if you want to have `updated_at` refreshed unconditionally (flash-gordon)
|
9
|
-
|
14
|
+
* `Changeset#extend` to exclude steps from the `#diff` output, this allows to filter out timestamp changes prior to updates so that we can avoid hitting the database in case of timestamp-only changes. You still can call `.map(:touch)` if you want to have `updated_at` refreshed unconditionally (flash-gordon)
|
15
|
+
|
10
16
|
## Fixed
|
11
17
|
|
12
18
|
* `aggregate` and `combine` works correctly with nested graph options where associations are aliased (solnic)
|
data/lib/rom/repository.rb
CHANGED
@@ -125,7 +125,8 @@ module ROM
|
|
125
125
|
|
126
126
|
@relations = RelationRegistry.new do |registry, relations|
|
127
127
|
self.class.relations.each do |name|
|
128
|
-
relation = container.
|
128
|
+
relation = container.relations[name]
|
129
|
+
relation = relation.with(mappers: container.mappers[name]) if container.mappers.key?(name)
|
129
130
|
|
130
131
|
proxy = RelationProxy.new(
|
131
132
|
relation, name: name, mappers: mappers, registry: registry, auto_struct: auto_struct
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'dry/core/deprecations'
|
2
|
+
|
1
3
|
require 'rom/initializer'
|
2
4
|
require 'rom/relation/materializable'
|
3
5
|
|
@@ -15,6 +17,8 @@ module ROM
|
|
15
17
|
# @api public
|
16
18
|
class RelationProxy
|
17
19
|
extend Initializer
|
20
|
+
extend Dry::Core::Deprecations[:rom]
|
21
|
+
|
18
22
|
include Relation::Materializable
|
19
23
|
|
20
24
|
(Kernel.private_instance_methods - %i(raise)).each(&method(:undef_method))
|
@@ -22,6 +26,10 @@ module ROM
|
|
22
26
|
include RelationProxy::Combine
|
23
27
|
include RelationProxy::Wrap
|
24
28
|
|
29
|
+
deprecate :combine_parents
|
30
|
+
deprecate :combine_children
|
31
|
+
deprecate :wrap_parent
|
32
|
+
|
25
33
|
RelationRegistryType = Types.Definition(RelationRegistry).constrained(type: RelationRegistry)
|
26
34
|
|
27
35
|
# @!attribute [r] relation
|
@@ -89,7 +97,31 @@ module ROM
|
|
89
97
|
# @api public
|
90
98
|
def map_with(*names, **opts)
|
91
99
|
if names.size == 1 && names[0].is_a?(Class)
|
92
|
-
|
100
|
+
map_to(names[0])
|
101
|
+
elsif names.size > 1 && names.any? { |name| name.is_a?(Class) }
|
102
|
+
raise ArgumentError, 'using custom mappers and a model is not supported'
|
103
|
+
else
|
104
|
+
if opts[:auto_map] && !meta[:combine_type]
|
105
|
+
mappers = [mapper, *names.map { |name| relation.mappers[name] }]
|
106
|
+
mappers.reduce(self) { |a, e| a >> e }
|
107
|
+
else
|
108
|
+
names.reduce(self) { |a, e| a >> relation.mappers[e] }
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
# @api public
|
114
|
+
def as(*names, **opts)
|
115
|
+
if names.size == 1 && names[0].is_a?(Class)
|
116
|
+
msg = <<-STR
|
117
|
+
Relation#as will change behavior in 4.0. Use `map_to` instead
|
118
|
+
=> Called at:
|
119
|
+
#{Kernel.caller[0..5].join("\n")}
|
120
|
+
STR
|
121
|
+
|
122
|
+
Dry::Core::Deprecations.warn(msg)
|
123
|
+
|
124
|
+
map_to(names[0])
|
93
125
|
elsif names.size > 1 && names.any? { |name| name.is_a?(Class) }
|
94
126
|
raise ArgumentError, 'using custom mappers and a model is not supported'
|
95
127
|
else
|
@@ -101,7 +133,11 @@ module ROM
|
|
101
133
|
end
|
102
134
|
end
|
103
135
|
end
|
104
|
-
|
136
|
+
|
137
|
+
# @api public
|
138
|
+
def map_to(model)
|
139
|
+
with(meta: meta.merge(model: model))
|
140
|
+
end
|
105
141
|
|
106
142
|
# Return a new graph with adjusted node returned from a block
|
107
143
|
#
|
data/lib/rom/struct.rb
CHANGED
@@ -90,12 +90,23 @@ module ROM
|
|
90
90
|
__send__(name)
|
91
91
|
end
|
92
92
|
|
93
|
+
if RUBY_VERSION < '2.3'
|
94
|
+
# @api private
|
95
|
+
def respond_to?(*)
|
96
|
+
super
|
97
|
+
end
|
98
|
+
else
|
99
|
+
# @api private
|
100
|
+
def respond_to_missing?(*)
|
101
|
+
super
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
93
105
|
private
|
94
106
|
|
95
107
|
def method_missing(method, *)
|
96
108
|
super
|
97
109
|
rescue NameError => error
|
98
|
-
raise if method == :to_ary
|
99
110
|
raise MissingAttribute.new("#{ error.message } (not loaded attribute?)")
|
100
111
|
end
|
101
112
|
end
|
data/rom-repository.gemspec
CHANGED
@@ -13,10 +13,10 @@ Gem::Specification.new do |gem|
|
|
13
13
|
gem.test_files = `git ls-files -- {spec}/*`.split("\n")
|
14
14
|
gem.license = 'MIT'
|
15
15
|
|
16
|
-
gem.add_runtime_dependency 'rom', '~> 3.
|
16
|
+
gem.add_runtime_dependency 'rom', '~> 3.3'
|
17
17
|
gem.add_runtime_dependency 'rom-mapper', '~> 0.5'
|
18
18
|
gem.add_runtime_dependency 'dry-core', '~> 0.3', '>= 0.3.1'
|
19
|
-
gem.add_runtime_dependency 'dry-struct', '~> 0.
|
19
|
+
gem.add_runtime_dependency 'dry-struct', '~> 0.3'
|
20
20
|
|
21
21
|
gem.add_development_dependency 'rake', '~> 11.2'
|
22
22
|
gem.add_development_dependency 'rspec', '~> 3.5'
|
@@ -24,18 +24,15 @@ RSpec.describe 'Repository with multi-adapters configuration' do
|
|
24
24
|
|
25
25
|
module Test
|
26
26
|
class Users < ROM::Relation[:sql]
|
27
|
-
|
28
|
-
schema(:users, infer: true)
|
29
|
-
register_as :sql_users
|
27
|
+
schema(:users, as: :sql_users, infer: true)
|
30
28
|
end
|
31
29
|
|
32
30
|
class Tasks < ROM::Relation[:memory]
|
33
|
-
schema(:tasks) do
|
31
|
+
schema(:tasks, as: :memory_tasks) do
|
34
32
|
attribute :user_id, ROM::Types::Int
|
35
33
|
attribute :title, ROM::Types::String
|
36
34
|
end
|
37
35
|
|
38
|
-
register_as :memory_tasks
|
39
36
|
gateway :memory
|
40
37
|
|
41
38
|
use :key_inference
|
data/spec/shared/relations.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
RSpec.shared_context 'relations' do
|
2
|
-
let(:users) { rom.
|
3
|
-
let(:tasks) { rom.
|
4
|
-
let(:tags) { rom.
|
5
|
-
let(:posts) { rom.
|
6
|
-
let(:books) { rom.
|
2
|
+
let(:users) { rom.relations[:users] }
|
3
|
+
let(:tasks) { rom.relations[:tasks] }
|
4
|
+
let(:tags) { rom.relations[:tags] }
|
5
|
+
let(:posts) { rom.relations[:posts] }
|
6
|
+
let(:books) { rom.relations[:books] }
|
7
7
|
|
8
8
|
before do
|
9
9
|
configuration.relation(:books) do
|
@@ -96,9 +96,7 @@ RSpec.shared_context 'relations' do
|
|
96
96
|
end
|
97
97
|
|
98
98
|
configuration.relation(:comments) do
|
99
|
-
|
100
|
-
|
101
|
-
schema(:messages, infer: true) do
|
99
|
+
schema(:messages, as: :comments, infer: true) do
|
102
100
|
associations do
|
103
101
|
has_many :reactions, relation: :likes
|
104
102
|
has_many :reactions, relation: :likes, as: :emotions
|
@@ -107,9 +105,7 @@ RSpec.shared_context 'relations' do
|
|
107
105
|
end
|
108
106
|
|
109
107
|
configuration.relation(:likes) do
|
110
|
-
|
111
|
-
|
112
|
-
schema(:reactions, infer: true) do
|
108
|
+
schema(:reactions, as: :likes, infer: true) do
|
113
109
|
associations do
|
114
110
|
belongs_to :message, relation: :comments
|
115
111
|
end
|
@@ -8,15 +8,15 @@ RSpec.describe 'loading proxy' do
|
|
8
8
|
include_context 'seeds'
|
9
9
|
|
10
10
|
let(:users_proxy) do
|
11
|
-
|
11
|
+
repo.users
|
12
12
|
end
|
13
13
|
|
14
14
|
let(:tasks_proxy) do
|
15
|
-
|
15
|
+
repo.tasks
|
16
16
|
end
|
17
17
|
|
18
18
|
let(:tags_proxy) do
|
19
|
-
|
19
|
+
repo.tags
|
20
20
|
end
|
21
21
|
|
22
22
|
describe '#inspect' do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rom-repository
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Piotr Solnica
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-07-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rom
|
@@ -16,20 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '3.
|
20
|
-
- - ">="
|
21
|
-
- !ruby/object:Gem::Version
|
22
|
-
version: 3.2.3
|
19
|
+
version: '3.3'
|
23
20
|
type: :runtime
|
24
21
|
prerelease: false
|
25
22
|
version_requirements: !ruby/object:Gem::Requirement
|
26
23
|
requirements:
|
27
24
|
- - "~>"
|
28
25
|
- !ruby/object:Gem::Version
|
29
|
-
version: '3.
|
30
|
-
- - ">="
|
31
|
-
- !ruby/object:Gem::Version
|
32
|
-
version: 3.2.3
|
26
|
+
version: '3.3'
|
33
27
|
- !ruby/object:Gem::Dependency
|
34
28
|
name: rom-mapper
|
35
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -70,14 +64,14 @@ dependencies:
|
|
70
64
|
requirements:
|
71
65
|
- - "~>"
|
72
66
|
- !ruby/object:Gem::Version
|
73
|
-
version: '0.
|
67
|
+
version: '0.3'
|
74
68
|
type: :runtime
|
75
69
|
prerelease: false
|
76
70
|
version_requirements: !ruby/object:Gem::Requirement
|
77
71
|
requirements:
|
78
72
|
- - "~>"
|
79
73
|
- !ruby/object:Gem::Version
|
80
|
-
version: '0.
|
74
|
+
version: '0.3'
|
81
75
|
- !ruby/object:Gem::Dependency
|
82
76
|
name: rake
|
83
77
|
requirement: !ruby/object:Gem::Requirement
|
@@ -197,7 +191,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
197
191
|
version: '0'
|
198
192
|
requirements: []
|
199
193
|
rubyforge_project:
|
200
|
-
rubygems_version: 2.6.
|
194
|
+
rubygems_version: 2.6.12
|
201
195
|
signing_key:
|
202
196
|
specification_version: 4
|
203
197
|
summary: Repository abstraction for rom-rb
|