rom-repository 1.3.3 → 1.4.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|