rom 3.0.1 → 3.0.2
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 +38 -25
- data/LICENSE +1 -1
- data/lib/rom/association_set.rb +8 -1
- data/lib/rom/relation/curried.rb +2 -0
- data/lib/rom/schema.rb +2 -2
- data/lib/rom/schema/attribute.rb +25 -0
- data/lib/rom/version.rb +1 -1
- data/spec/spec_helper.rb +1 -1
- data/spec/unit/rom/association_set_spec.rb +21 -0
- data/spec/unit/rom/relation/curried_spec.rb +10 -5
- data/spec/unit/rom/relation/output_schema_spec.rb +28 -0
- data/spec/unit/rom/schema/wrap_spec.rb +1 -0
- metadata +3 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: e937480122a0f25c272a123788205fca636c3914
|
|
4
|
+
data.tar.gz: 14f714ced390387ee4e3008c6ac7028ec3ffb342
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: f88ca6fd4d17cce1332c5005f422e4b8fbbfa86e4acd72e602b89322b1a35f22ab8a176fa1dd5e497de78e32432e133b6cc9ba8e08b9d4ac6bf54e65dd0feccd
|
|
7
|
+
data.tar.gz: b2e112e5baaa3d27b035ef18143b81576c1a86fda420e2ad8d96e350f4b7ad7a8328f03c8edc12b6b1f927af3d9d1f3d210eb048c7c5e5733c08a67d466c8b0c
|
data/CHANGELOG.md
CHANGED
|
@@ -1,4 +1,17 @@
|
|
|
1
|
-
|
|
1
|
+
# v3.0.2 2017-02-24
|
|
2
|
+
|
|
3
|
+
## Added
|
|
4
|
+
|
|
5
|
+
* `Schema::Attribute#key` which returns tuple key name, either alias or canonical name (solnic)
|
|
6
|
+
|
|
7
|
+
## Fixed
|
|
8
|
+
|
|
9
|
+
* Fix the error message for missing association (flash-gordon)
|
|
10
|
+
* Curried relation called without any arguments will raise an ArgumentError (solnic)
|
|
11
|
+
|
|
12
|
+
[Compare v3.0.1...v3.0.2](https://github.com/rom-rb/rom/compare/v3.0.1...v3.0.2)
|
|
13
|
+
|
|
14
|
+
# v3.0.1 2017-02-01
|
|
2
15
|
|
|
3
16
|
## Fixed
|
|
4
17
|
|
|
@@ -6,7 +19,7 @@
|
|
|
6
19
|
|
|
7
20
|
[Compare v3.0.0...v3.0.1](https://github.com/rom-rb/rom/compare/v3.0.0...v3.0.1)
|
|
8
21
|
|
|
9
|
-
|
|
22
|
+
# v3.0.0 2017-01-29
|
|
10
23
|
|
|
11
24
|
## Added
|
|
12
25
|
|
|
@@ -40,7 +53,7 @@
|
|
|
40
53
|
|
|
41
54
|
[Compare v2.0.2...v3.0.0](https://github.com/rom-rb/rom/compare/v2.0.2...v3.0.0)
|
|
42
55
|
|
|
43
|
-
|
|
56
|
+
# v2.0.2 2016-11-11
|
|
44
57
|
|
|
45
58
|
## Added
|
|
46
59
|
|
|
@@ -53,7 +66,7 @@
|
|
|
53
66
|
|
|
54
67
|
[Compare v2.0.1...v2.0.2](https://github.com/rom-rb/rom/compare/v2.0.1...v2.0.2)
|
|
55
68
|
|
|
56
|
-
|
|
69
|
+
# v2.0.1 2016-09-30
|
|
57
70
|
|
|
58
71
|
### Added
|
|
59
72
|
|
|
@@ -66,7 +79,7 @@
|
|
|
66
79
|
|
|
67
80
|
[Compare v2.0.0...v2.0.1](https://github.com/rom-rb/rom/compare/v2.0.0...v2.0.1)
|
|
68
81
|
|
|
69
|
-
|
|
82
|
+
# v2.0.0 2016-07-27
|
|
70
83
|
|
|
71
84
|
### Added
|
|
72
85
|
|
|
@@ -104,7 +117,7 @@
|
|
|
104
117
|
|
|
105
118
|
[Compare v1.0.0...v2.0.0](https://github.com/rom-rb/rom/compare/v1.0.0...v2.0.0)
|
|
106
119
|
|
|
107
|
-
|
|
120
|
+
# v1.0.0 2016-01-06
|
|
108
121
|
|
|
109
122
|
### Added
|
|
110
123
|
|
|
@@ -132,7 +145,7 @@
|
|
|
132
145
|
|
|
133
146
|
[Compare v0.9.1...v1.0.0](https://github.com/rom-rb/rom/compare/v0.9.1...v1.0.0)
|
|
134
147
|
|
|
135
|
-
|
|
148
|
+
# v0.9.1 2015-08-21
|
|
136
149
|
|
|
137
150
|
This is a small bug-fix release which addresses a couple of issues for inline
|
|
138
151
|
setup DSL and multi-environments.
|
|
@@ -152,7 +165,7 @@ setup DSL and multi-environments.
|
|
|
152
165
|
|
|
153
166
|
[Compare v0.9.0...v0.9.1](https://github.com/rom-rb/rom/compare/v0.9.0...v0.9.1)
|
|
154
167
|
|
|
155
|
-
|
|
168
|
+
# v0.9.0 2015-08-19
|
|
156
169
|
|
|
157
170
|
### Added
|
|
158
171
|
|
|
@@ -184,7 +197,7 @@ setup DSL and multi-environments.
|
|
|
184
197
|
|
|
185
198
|
[Compare v0.8.1...v0.9.0](https://github.com/rom-rb/rom/compare/v0.8.1...v0.9.0)
|
|
186
199
|
|
|
187
|
-
|
|
200
|
+
# v0.8.1 2015-07-12
|
|
188
201
|
|
|
189
202
|
### Fixed
|
|
190
203
|
|
|
@@ -196,7 +209,7 @@ setup DSL and multi-environments.
|
|
|
196
209
|
|
|
197
210
|
[Compare v0.8.0...v0.8.1](https://github.com/rom-rb/rom/compare/v0.8.0...v0.8.1)
|
|
198
211
|
|
|
199
|
-
|
|
212
|
+
# v0.8.0 2015-06-22
|
|
200
213
|
|
|
201
214
|
### Added
|
|
202
215
|
|
|
@@ -224,7 +237,7 @@ setup DSL and multi-environments.
|
|
|
224
237
|
|
|
225
238
|
[Compare v0.7.1...v0.8.0](https://github.com/rom-rb/rom/compare/v0.7.1...v0.8.0)
|
|
226
239
|
|
|
227
|
-
|
|
240
|
+
# v0.7.1 2015-05-22
|
|
228
241
|
|
|
229
242
|
### Added
|
|
230
243
|
|
|
@@ -242,7 +255,7 @@ setup DSL and multi-environments.
|
|
|
242
255
|
|
|
243
256
|
[Compare v0.7.0...v0.7.1](https://github.com/rom-rb/rom/compare/v0.7.0...v0.7.1)
|
|
244
257
|
|
|
245
|
-
|
|
258
|
+
# v0.7.0 2015-05-17
|
|
246
259
|
|
|
247
260
|
### Added
|
|
248
261
|
|
|
@@ -276,7 +289,7 @@ setup DSL and multi-environments.
|
|
|
276
289
|
|
|
277
290
|
[Compare v0.6.2...v0.7.0](https://github.com/rom-rb/rom/compare/v0.6.2...v0.7.0)
|
|
278
291
|
|
|
279
|
-
|
|
292
|
+
# v0.6.2 2015-04-14
|
|
280
293
|
|
|
281
294
|
### Changed
|
|
282
295
|
|
|
@@ -288,7 +301,7 @@ setup DSL and multi-environments.
|
|
|
288
301
|
|
|
289
302
|
[Compare v0.6.1...v0.6.2](https://github.com/rom-rb/rom/compare/v0.6.1...v0.6.2)
|
|
290
303
|
|
|
291
|
-
|
|
304
|
+
# v0.6.1 2015-04-04
|
|
292
305
|
|
|
293
306
|
### Added
|
|
294
307
|
|
|
@@ -301,7 +314,7 @@ setup DSL and multi-environments.
|
|
|
301
314
|
|
|
302
315
|
[Compare v0.6.0...v0.6.1](https://github.com/rom-rb/rom/compare/v0.6.0...v0.6.1)
|
|
303
316
|
|
|
304
|
-
|
|
317
|
+
# v0.6.0 2015-03-22
|
|
305
318
|
|
|
306
319
|
### Added
|
|
307
320
|
|
|
@@ -342,7 +355,7 @@ setup DSL and multi-environments.
|
|
|
342
355
|
|
|
343
356
|
[Compare v0.5.0...v0.6.0](https://github.com/rom-rb/rom/compare/v0.5.0...v0.6.0)
|
|
344
357
|
|
|
345
|
-
|
|
358
|
+
# v0.5.0 2014-12-31
|
|
346
359
|
|
|
347
360
|
### Added
|
|
348
361
|
|
|
@@ -383,7 +396,7 @@ setup DSL and multi-environments.
|
|
|
383
396
|
|
|
384
397
|
[Compare v0.4.2...v0.5.0](https://github.com/rom-rb/rom/compare/v0.4.2...v0.5.0)
|
|
385
398
|
|
|
386
|
-
|
|
399
|
+
# v0.4.2 2014-12-19
|
|
387
400
|
|
|
388
401
|
### Added
|
|
389
402
|
|
|
@@ -399,7 +412,7 @@ setup DSL and multi-environments.
|
|
|
399
412
|
|
|
400
413
|
[Compare v0.4.1...v0.4.2](https://github.com/rom-rb/rom/compare/v0.4.1...v0.4.2)
|
|
401
414
|
|
|
402
|
-
|
|
415
|
+
# v0.4.1 2014-12-15
|
|
403
416
|
|
|
404
417
|
### Added
|
|
405
418
|
|
|
@@ -416,7 +429,7 @@ setup DSL and multi-environments.
|
|
|
416
429
|
|
|
417
430
|
[Compare v0.4.0...v0.4.1](https://github.com/rom-rb/rom/compare/v0.4.0...v0.4.1)
|
|
418
431
|
|
|
419
|
-
|
|
432
|
+
# v0.4.0 2014-12-06
|
|
420
433
|
|
|
421
434
|
### Added
|
|
422
435
|
|
|
@@ -436,7 +449,7 @@ setup DSL and multi-environments.
|
|
|
436
449
|
|
|
437
450
|
[Compare v0.3.1...v0.4.0](https://github.com/rom-rb/rom/compare/v0.3.1...v0.4.0)
|
|
438
451
|
|
|
439
|
-
|
|
452
|
+
# v0.3.1 2014-11-25
|
|
440
453
|
|
|
441
454
|
### Added
|
|
442
455
|
|
|
@@ -452,14 +465,14 @@ setup DSL and multi-environments.
|
|
|
452
465
|
|
|
453
466
|
[Compare v0.3.0...v0.3.1](https://github.com/rom-rb/rom/compare/v0.3.0...v0.3.1)
|
|
454
467
|
|
|
455
|
-
|
|
468
|
+
# v0.3.0 2014-11-24
|
|
456
469
|
|
|
457
470
|
This version is a rewrite that introduces a new, simplified architecture based
|
|
458
471
|
on a new adapter interface.
|
|
459
472
|
|
|
460
473
|
[Compare v0.2.0...v0.3.0](https://github.com/rom-rb/rom/compare/v0.2.0...v0.3.0)
|
|
461
474
|
|
|
462
|
-
|
|
475
|
+
# v0.2.0 2014-04-06
|
|
463
476
|
|
|
464
477
|
### Added
|
|
465
478
|
|
|
@@ -482,19 +495,19 @@ on a new adapter interface.
|
|
|
482
495
|
|
|
483
496
|
[Compare v0.1.2...v0.2.0](https://github.com/rom-rb/rom/compare/v0.1.2...v0.2.0)
|
|
484
497
|
|
|
485
|
-
|
|
498
|
+
# v0.1.2 2013-09-02
|
|
486
499
|
|
|
487
500
|
* [updated] [rom-relation](https://github.com/rom-rb/rom-relation/blob/v0.1.2/Changelog.md#v012-2013-09-02)
|
|
488
501
|
|
|
489
502
|
[Compare v0.1.1...v0.1.2](https://github.com/rom-rb/rom/compare/v0.1.1...v0.1.2)
|
|
490
503
|
|
|
491
|
-
|
|
504
|
+
# v0.1.1 2013-08-30
|
|
492
505
|
|
|
493
506
|
* [updated] [rom-relation](https://github.com/rom-rb/rom-relation/blob/v0.1.1/Changelog.md#v011-2013-08-30)
|
|
494
507
|
* [updated] [rom-session](https://github.com/rom-rb/rom-session/blob/v0.1.1/Changelog.md#v011-2013-08-30)
|
|
495
508
|
|
|
496
509
|
[Compare v0.1.0...v0.1.1](https://github.com/rom-rb/rom/compare/v0.1.0...v0.1.1)
|
|
497
510
|
|
|
498
|
-
|
|
511
|
+
# v0.1.0 2013-08-23
|
|
499
512
|
|
|
500
513
|
First public release
|
data/LICENSE
CHANGED
data/lib/rom/association_set.rb
CHANGED
|
@@ -21,10 +21,17 @@ module ROM
|
|
|
21
21
|
if key?(key)
|
|
22
22
|
super
|
|
23
23
|
else
|
|
24
|
-
|
|
24
|
+
sk = singularize(key)
|
|
25
|
+
|
|
26
|
+
if key?(sk)
|
|
27
|
+
super(sk)
|
|
28
|
+
else
|
|
29
|
+
super
|
|
30
|
+
end
|
|
25
31
|
end
|
|
26
32
|
end
|
|
27
33
|
|
|
34
|
+
# @api private
|
|
28
35
|
def singularize(key)
|
|
29
36
|
Dry::Core::Inflector.singularize(key).to_sym
|
|
30
37
|
end
|
data/lib/rom/relation/curried.rb
CHANGED
|
@@ -38,6 +38,8 @@ module ROM
|
|
|
38
38
|
|
|
39
39
|
if arity == all_args.size
|
|
40
40
|
Loaded.new(relation.__send__(name.relation, *all_args))
|
|
41
|
+
elsif args.empty?
|
|
42
|
+
raise ArgumentError, "curried #{relation.class}##{name.to_sym} relation was called without any arguments"
|
|
41
43
|
else
|
|
42
44
|
__new__(relation, curry_args: all_args)
|
|
43
45
|
end
|
data/lib/rom/schema.rb
CHANGED
|
@@ -227,7 +227,7 @@ module ROM
|
|
|
227
227
|
#
|
|
228
228
|
# @api public
|
|
229
229
|
def wrap(prefix = name.dataset)
|
|
230
|
-
new(map { |attr| attr.wrapped(prefix) })
|
|
230
|
+
new(map { |attr| attr.wrapped? ? attr : attr.wrapped(prefix) })
|
|
231
231
|
end
|
|
232
232
|
|
|
233
233
|
# Return FK attribute for a given relation name
|
|
@@ -342,7 +342,7 @@ module ROM
|
|
|
342
342
|
# @api private
|
|
343
343
|
def to_output_hash
|
|
344
344
|
Types::Coercible::Hash.schema(
|
|
345
|
-
map { |attr| [attr.
|
|
345
|
+
map { |attr| [attr.key, attr.to_read_type] }.to_h
|
|
346
346
|
)
|
|
347
347
|
end
|
|
348
348
|
|
data/lib/rom/schema/attribute.rb
CHANGED
|
@@ -173,6 +173,31 @@ module ROM
|
|
|
173
173
|
meta[:name]
|
|
174
174
|
end
|
|
175
175
|
|
|
176
|
+
# Return tuple key
|
|
177
|
+
#
|
|
178
|
+
# When schemas are projected with aliased attributes, we need a simple access to tuple keys
|
|
179
|
+
#
|
|
180
|
+
# @example
|
|
181
|
+
# class Tasks < ROM::Relation[:memory]
|
|
182
|
+
# schema do
|
|
183
|
+
# attribute :user_id, Types::Int.meta(alias: :id)
|
|
184
|
+
# attribute :name, Types::String
|
|
185
|
+
# end
|
|
186
|
+
# end
|
|
187
|
+
#
|
|
188
|
+
# Users.schema[:id].key
|
|
189
|
+
# # :id
|
|
190
|
+
#
|
|
191
|
+
# Users.schema.project(Users.schema[:id].aliased(:user_id)).key
|
|
192
|
+
# # :user_id
|
|
193
|
+
#
|
|
194
|
+
# @return [Symbol]
|
|
195
|
+
#
|
|
196
|
+
# @api public
|
|
197
|
+
def key
|
|
198
|
+
meta[:alias] || name
|
|
199
|
+
end
|
|
200
|
+
|
|
176
201
|
# Return attribute's alias
|
|
177
202
|
#
|
|
178
203
|
# @example
|
data/lib/rom/version.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
|
@@ -24,4 +24,25 @@ RSpec.describe ROM::AssociationSet do
|
|
|
24
24
|
expect(fallback).to have_received(:done)
|
|
25
25
|
end
|
|
26
26
|
end
|
|
27
|
+
|
|
28
|
+
describe '#[]' do
|
|
29
|
+
let(:users) { BasicObject.new }
|
|
30
|
+
let(:posts) { BasicObject.new }
|
|
31
|
+
let(:set) { ROM::AssociationSet.new(users: users, post: posts) }
|
|
32
|
+
|
|
33
|
+
it 'fetches association' do
|
|
34
|
+
expect(set[:users]).to be users
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it 'tries to fetch under singularized key' do
|
|
38
|
+
expect(set[:post]).to be posts
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
it 'throws exception on missing association' do
|
|
42
|
+
expect { set[:labels] }.to raise_error(
|
|
43
|
+
ROM::Registry::ElementNotFoundError,
|
|
44
|
+
":labels doesn't exist in ROM::AssociationSet registry"
|
|
45
|
+
)
|
|
46
|
+
end
|
|
47
|
+
end
|
|
27
48
|
end
|
|
@@ -17,16 +17,21 @@ RSpec.describe ROM::Relation::Curried do
|
|
|
17
17
|
end
|
|
18
18
|
|
|
19
19
|
describe '#call' do
|
|
20
|
-
let(:relation) { users_relation.by_name
|
|
20
|
+
let(:relation) { users_relation.by_name }
|
|
21
21
|
|
|
22
22
|
it 'materializes a relation' do
|
|
23
|
-
expect(relation).to
|
|
24
|
-
name: 'Jane', email: 'jane@doe.org'
|
|
25
|
-
])
|
|
23
|
+
expect(relation.('Jane').to_a).to eql([name: 'Jane', email: 'jane@doe.org'])
|
|
26
24
|
end
|
|
27
25
|
|
|
28
26
|
it 'returns a loaded relation' do
|
|
29
|
-
expect(relation.source).to eql(users_relation.by_name('Jane'))
|
|
27
|
+
expect(relation.('Jane').source).to eql(users_relation.by_name('Jane'))
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it 'raises argument error if no arguments were provided' do
|
|
31
|
+
expect { relation.() }.
|
|
32
|
+
to raise_error(
|
|
33
|
+
ArgumentError,
|
|
34
|
+
"curried #{users_relation.class}#by_name relation was called without any arguments")
|
|
30
35
|
end
|
|
31
36
|
end
|
|
32
37
|
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
require 'rom/memory'
|
|
2
|
+
|
|
3
|
+
RSpec.describe ROM::Relation, '#output_schema' do
|
|
4
|
+
subject(:relation) do
|
|
5
|
+
Class.new(ROM::Relation[:memory]) do
|
|
6
|
+
schema do
|
|
7
|
+
attribute :id, ROM::Types::String, read: ROM::Types::Int
|
|
8
|
+
attribute :name, ROM::Types::String
|
|
9
|
+
end
|
|
10
|
+
end.new(ROM::Memory::Dataset.new([]))
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
let(:schema) do
|
|
14
|
+
relation.schema
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it 'returns output_schema based on canonical schema' do
|
|
18
|
+
expect(relation.output_schema).
|
|
19
|
+
to eql(ROM::Types::Coercible::Hash.schema(id: schema[:id].to_read_type, name: schema[:name].type))
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
it 'returns output_schema based on projected schema' do
|
|
23
|
+
projected = relation.project(schema[:id].aliased(:user_id))
|
|
24
|
+
|
|
25
|
+
expect(projected.output_schema).
|
|
26
|
+
to eql(ROM::Types::Coercible::Hash.schema(user_id: projected.schema[:id].to_read_type))
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -13,5 +13,6 @@ RSpec.describe ROM::Schema, '#wrap' do
|
|
|
13
13
|
expect(wrapped.map(&:alias)).to eql(%i[users_id users_name])
|
|
14
14
|
expect(wrapped.map { |attr| attr.meta[:name] }).to eql(%i[id name])
|
|
15
15
|
expect(wrapped.all?(&:wrapped?)).to be(true)
|
|
16
|
+
expect(wrapped.wrap(:foo)).to eql(wrapped)
|
|
16
17
|
end
|
|
17
18
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: rom
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 3.0.
|
|
4
|
+
version: 3.0.2
|
|
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-02-
|
|
11
|
+
date: 2017-02-24 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: concurrent-ruby
|
|
@@ -360,6 +360,7 @@ files:
|
|
|
360
360
|
- spec/unit/rom/relation/lazy_spec.rb
|
|
361
361
|
- spec/unit/rom/relation/loaded_spec.rb
|
|
362
362
|
- spec/unit/rom/relation/name_spec.rb
|
|
363
|
+
- spec/unit/rom/relation/output_schema_spec.rb
|
|
363
364
|
- spec/unit/rom/relation/schema_spec.rb
|
|
364
365
|
- spec/unit/rom/relation/view_spec.rb
|
|
365
366
|
- spec/unit/rom/relation_spec.rb
|