denormalize_fields 1.2.1 → 1.3.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b50f4ec91d36a884fae8c6463e116754aacccffa563b31d531ef003b331d61db
4
- data.tar.gz: 03ea2b3605d68b075d5d3ba7aebb344cfc9a21e9ff54d08a6be2600bedb21032
3
+ metadata.gz: 1b207d72c3d668c9d67a59315fb11d5830754c1c03a95fcb2dd29c4806b7353c
4
+ data.tar.gz: a836c718d564fa4e03e6b42cdf2453bc25b2a09e5e497a0f86c1ad236a9ec608
5
5
  SHA512:
6
- metadata.gz: 6d1396b558389340190ffefca65373c7c1c44696a11f3a7d2c775111296a74a096b4144a58c31813f4d06912217d76586c0277206fbe72f64f6d8c167769bf01
7
- data.tar.gz: 6556c00f595d9bb5cf2e52fd4ce128ff75f8d8d2423db499e32eebf645ee0e411920f7df66668cc0f66ff48e0db00619ca279539e8b3c67bb4f2e09b8deda162
6
+ metadata.gz: ccc4ff45bd4a52e8b772af093cc18fb1e6652ddc51b0b2da56a19ae1370784e2ad7215ab9cdb02f5d43c7c247d555f98ca803544cdc82f9796442e1191ec083c
7
+ data.tar.gz: c1983d05c34dc22fb8d240f765490b2afacc8b4b153858b43ea2cb1b2ca239e25b4e2a028ee4f57d80ee803e91731b9fac42ebeb4e192da1c5df9897eb2f9a40
@@ -1,3 +1,3 @@
1
1
  module DenormalizeFields
2
- VERSION = '1.2.1'
2
+ VERSION = '1.3.1'
3
3
  end
@@ -4,6 +4,18 @@ require 'denormalize_fields/version'
4
4
  module DenormalizeFields
5
5
  module_function
6
6
 
7
+ class ArgumentError < ::ArgumentError; end
8
+
9
+ class RelatedRecordInvalid < ::ActiveRecord::RecordInvalid
10
+ attr_accessor :owner, :mapping
11
+
12
+ def initialize(record:, owner:, mapping:)
13
+ super(record)
14
+ self.owner = owner
15
+ self.mapping = mapping
16
+ end
17
+ end
18
+
7
19
  def denormalize(fields:, from:, onto:, prefix: nil, **options)
8
20
  mapping = cast_to_mapping(fields, prefix: prefix)
9
21
  validate_options(**options)
@@ -94,15 +106,16 @@ module DenormalizeFields
94
106
  return if to.new_record? ? to.valid? : to.save
95
107
 
96
108
  DenormalizeFields.copy_errors(to.errors, to_record: owner, mapping: mapping)
97
- raise(ActiveRecord::RecordInvalid, to)
109
+ raise RelatedRecordInvalid.new(record: to, owner: owner, mapping: mapping)
98
110
  end
99
111
 
100
112
  # TODO: use Errors#import when it becomes available in rails 6.1 or 6.2
101
113
  def copy_errors(errors, to_record:, mapping:)
102
114
  errors.details.each do |key, array|
103
- field = mapping.rassoc(key.to_sym).first
104
- array.each do |details|
105
- to_record.errors.add(field, details[:error], **details.except(:error))
115
+ Array(mapping.rassoc(key.to_sym)).compact.each do |field|
116
+ array.each do |details|
117
+ to_record.errors.add(field, details[:error], **details.except(:error))
118
+ end
106
119
  end
107
120
  end
108
121
  end
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: denormalize_fields
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.1
4
+ version: 1.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Janosch Müller
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2021-12-06 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: activerecord
@@ -19,7 +18,7 @@ dependencies:
19
18
  version: 4.1.14
20
19
  - - "<"
21
20
  - !ruby/object:Gem::Version
22
- version: 8.0.0
21
+ version: 9.0.0
23
22
  type: :runtime
24
23
  prerelease: false
25
24
  version_requirements: !ruby/object:Gem::Requirement
@@ -29,77 +28,7 @@ dependencies:
29
28
  version: 4.1.14
30
29
  - - "<"
31
30
  - !ruby/object:Gem::Version
32
- version: 8.0.0
33
- - !ruby/object:Gem::Dependency
34
- name: rails
35
- requirement: !ruby/object:Gem::Requirement
36
- requirements:
37
- - - '='
38
- - !ruby/object:Gem::Version
39
- version: 7.0.0.alpha2
40
- type: :development
41
- prerelease: false
42
- version_requirements: !ruby/object:Gem::Requirement
43
- requirements:
44
- - - '='
45
- - !ruby/object:Gem::Version
46
- version: 7.0.0.alpha2
47
- - !ruby/object:Gem::Dependency
48
- name: rake
49
- requirement: !ruby/object:Gem::Requirement
50
- requirements:
51
- - - ">="
52
- - !ruby/object:Gem::Version
53
- version: '0'
54
- type: :development
55
- prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
- requirements:
58
- - - ">="
59
- - !ruby/object:Gem::Version
60
- version: '0'
61
- - !ruby/object:Gem::Dependency
62
- name: rspec
63
- requirement: !ruby/object:Gem::Requirement
64
- requirements:
65
- - - ">="
66
- - !ruby/object:Gem::Version
67
- version: '0'
68
- type: :development
69
- prerelease: false
70
- version_requirements: !ruby/object:Gem::Requirement
71
- requirements:
72
- - - ">="
73
- - !ruby/object:Gem::Version
74
- version: '0'
75
- - !ruby/object:Gem::Dependency
76
- name: rspec-rails
77
- requirement: !ruby/object:Gem::Requirement
78
- requirements:
79
- - - ">="
80
- - !ruby/object:Gem::Version
81
- version: '0'
82
- type: :development
83
- prerelease: false
84
- version_requirements: !ruby/object:Gem::Requirement
85
- requirements:
86
- - - ">="
87
- - !ruby/object:Gem::Version
88
- version: '0'
89
- - !ruby/object:Gem::Dependency
90
- name: sqlite3
91
- requirement: !ruby/object:Gem::Requirement
92
- requirements:
93
- - - ">="
94
- - !ruby/object:Gem::Version
95
- version: '0'
96
- type: :development
97
- prerelease: false
98
- version_requirements: !ruby/object:Gem::Requirement
99
- requirements:
100
- - - ">="
101
- - !ruby/object:Gem::Version
102
- version: '0'
31
+ version: 9.0.0
103
32
  description: 'This gem adds a `denormalize` option to ActiveRecord relation definitions,
104
33
  e.g. `has_many :foos, denormalize: { fields: :updated_at }`.'
105
34
  email:
@@ -115,7 +44,6 @@ homepage: https://www.github.com/jaynetics/denormalize_fields
115
44
  licenses:
116
45
  - MIT
117
46
  metadata: {}
118
- post_install_message:
119
47
  rdoc_options: []
120
48
  require_paths:
121
49
  - lib
@@ -130,8 +58,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
130
58
  - !ruby/object:Gem::Version
131
59
  version: '0'
132
60
  requirements: []
133
- rubygems_version: 3.2.32
134
- signing_key:
61
+ rubygems_version: 4.0.3
135
62
  specification_version: 4
136
63
  summary: Simplify denormalizing fields from one record to another.
137
64
  test_files: []