uuid_associations-active_record 0.2.0 → 0.3.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/README.md +3 -4
- data/lib/uuid_associations/active_record/nested_attributes/uuid_finder.rb +6 -4
- data/lib/uuid_associations/active_record/version.rb +1 -1
- data/spec/integration/nested_attributes/collection_spec.rb +5 -6
- data/spec/unit/uuid_associations/active_record/nested_attributes/uuid_finder_spec.rb +6 -2
- data/uuid_associations-active_record.gemspec +3 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7bd48c49180664455d830bf4877bab4a57001cba97d710d0ec104753c71a456c
|
4
|
+
data.tar.gz: e6259cc8ef51b92bc456b00cf89839c088823567afc8de1d605440c85e79b5d7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8e94d8ffa58e122b70e09f60b9031de98510cb9452fa4b98a11f5b8225cb7474e995eb8dd1cff8e40efbf43ea05ac4e45b34a8211ae9a28f749352f16a61764e
|
7
|
+
data.tar.gz: 510166b160fc1c19ce2ac78215d92169246f64e41c335583e905110f5ed3aa205101aea8f308bb65105a6643f162b84b2d31ffe107d4a9e66310e1dd32dd41d0
|
data/README.md
CHANGED
@@ -218,14 +218,13 @@ Here are some things to take into account:
|
|
218
218
|
1. If the nested model (Comment in the example) does not have a column named `uuid`, the gem will take no action, will
|
219
219
|
just preserve the original behavior.
|
220
220
|
1. If the hash has both the `:id` and `:uuid` keys, the record will be fetched by `id`, and `uuid` will be passed as an attribute.
|
221
|
-
1. When the hash has a `:uuid` key and no record is found for that key,
|
222
|
-
(this will change to raise a not found error instead).
|
221
|
+
1. When the hash has a `:uuid` key and no record is found for that key, an `ActiveRecord::RecordNotFound` error will be raised.
|
223
222
|
|
224
223
|
## Future Work
|
225
224
|
|
226
225
|
1. Not commonly used by me, but testing and adding these methods to a `has_one` relationship.
|
227
|
-
1. Raise not found error if the array of UUIDs is bigger that the array
|
228
|
-
|
226
|
+
1. Raise not found error if the array of UUIDs is bigger that the array of IDs fetched with the `where` statement (ActiveRecord's behavior).
|
227
|
+
1. Allow `accepts_nested_attributes_for` to take a configuration to allow the creation of new records if not found by UUID.
|
229
228
|
|
230
229
|
## Development
|
231
230
|
|
@@ -26,11 +26,13 @@ module UuidAssociations
|
|
26
26
|
|
27
27
|
record = found_records.find { |found_record| found_record.uuid == uuid }
|
28
28
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
29
|
+
if record.blank?
|
30
|
+
raise ::ActiveRecord::RecordNotFound.new(
|
31
|
+
"Couldn't find #{association_klass.name} with UUID=#{uuid}", association_klass, :id, uuid
|
32
|
+
)
|
33
33
|
end
|
34
|
+
|
35
|
+
collection << attributes.merge(id: record.id)
|
34
36
|
end
|
35
37
|
|
36
38
|
to_keep + replaced
|
@@ -10,20 +10,19 @@ RSpec.describe 'nested attributes for collection' do
|
|
10
10
|
end
|
11
11
|
|
12
12
|
context 'when creating a new record' do
|
13
|
-
|
13
|
+
let(:uuid) { SecureRandom.uuid }
|
14
|
+
|
15
|
+
it 'raises an expception if no record is found with the specified UUID' do
|
14
16
|
expect do
|
15
17
|
Post.create!(
|
16
18
|
uuid: SecureRandom.uuid,
|
17
19
|
content: 'post',
|
18
20
|
comments_attributes: [
|
19
21
|
body: 'New comment',
|
20
|
-
uuid:
|
22
|
+
uuid: uuid
|
21
23
|
]
|
22
24
|
)
|
23
|
-
end.to
|
24
|
-
.and change(Comment, :count).from(0).to(1)
|
25
|
-
|
26
|
-
expect(Post.first.comments.count).to eq(1)
|
25
|
+
end.to raise_error(ActiveRecord::RecordNotFound, "Couldn't find Comment with UUID=#{uuid}")
|
27
26
|
end
|
28
27
|
|
29
28
|
it 'creates nested resources when no UUID or ID is passed' do
|
@@ -17,7 +17,9 @@ RSpec.describe UuidAssociations::ActiveRecord::NestedAttributes::UuidFinder do
|
|
17
17
|
context 'when record with specified UUID does not exist on the sytem' do
|
18
18
|
let(:attribute_collection) { [{ uuid: SecureRandom.uuid, body: 'new comment :/' }] }
|
19
19
|
|
20
|
-
it
|
20
|
+
it 'raises a not found error' do
|
21
|
+
expect { subject }.to raise_error(ActiveRecord::RecordNotFound)
|
22
|
+
end
|
21
23
|
end
|
22
24
|
end
|
23
25
|
|
@@ -47,7 +49,9 @@ RSpec.describe UuidAssociations::ActiveRecord::NestedAttributes::UuidFinder do
|
|
47
49
|
context 'when record with specified UUID does not exist on the sytem' do
|
48
50
|
let(:attribute_collection) { { first: { uuid: SecureRandom.uuid, body: 'new comment :/' } } }
|
49
51
|
|
50
|
-
it
|
52
|
+
it 'raises a not found error' do
|
53
|
+
expect { subject }.to raise_error(ActiveRecord::RecordNotFound)
|
54
|
+
end
|
51
55
|
end
|
52
56
|
end
|
53
57
|
|
@@ -12,6 +12,9 @@ Gem::Specification.new do |spec|
|
|
12
12
|
spec.description = 'Adds association_uuids= method on has_many and has_and_belongs_to_many associations'
|
13
13
|
spec.homepage = 'https://github.com/mcelicalderon/uuid_associations-active_record'
|
14
14
|
spec.license = 'MIT'
|
15
|
+
spec.metadata = {
|
16
|
+
'source_code_uri' => 'https://github.com/mcelicalderon/uuid_associations-active_record'
|
17
|
+
}
|
15
18
|
|
16
19
|
spec.files = `git ls-files -z`.split("\x0")
|
17
20
|
spec.test_files = spec.files.grep(%r{^spec\/})
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: uuid_associations-active_record
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mario Celi
|
@@ -165,7 +165,8 @@ files:
|
|
165
165
|
homepage: https://github.com/mcelicalderon/uuid_associations-active_record
|
166
166
|
licenses:
|
167
167
|
- MIT
|
168
|
-
metadata:
|
168
|
+
metadata:
|
169
|
+
source_code_uri: https://github.com/mcelicalderon/uuid_associations-active_record
|
169
170
|
post_install_message:
|
170
171
|
rdoc_options: []
|
171
172
|
require_paths:
|