occams-record 0.12.0 → 0.13.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a33f839ea9d811478c883f3cf8e54ad3c67c366761db4281ad7994d54234e519
4
- data.tar.gz: f3370573806301fd8b7beeb60d66fce4cd37160d147f9a626a3ba228430ba935
3
+ metadata.gz: 64aef087892a4022dbfe3d6cdd225a7c00a5e32c44ff34473736d464ba6d62f4
4
+ data.tar.gz: 7f3f8120d97ea431b41ef26e699410413cba4dc23ec6f88f0d64da497b9c6904
5
5
  SHA512:
6
- metadata.gz: b28285305d8e16e497e813e1e89362b27f2d6a35f79bdb529d175dfbd07741592fd168150bfc8170eea8fcf1a538b0c22a6e1258615632240e2661c184583fc8
7
- data.tar.gz: 3ed3e6cee8688afd1227d3aa736d4744e78102cc040735691f753ee32943be8a71ea24044570a64aa02739e52a5b4303b8d1c79be3359a7cd10e11e67056b7da
6
+ metadata.gz: 3e723f610281672d0f050feceb95d2037f21d82b799a254711c0fc756fd6c1582027a5796674a63a968155118fe7746abcbd26995311544be3ee5842c0a0b113
7
+ data.tar.gz: 1f9ccbf33361d7e81b79552aaf75876c02c02f9144bf1476e7bb4e71f68ab472009219d9fc86322921b0fa8489492b4a4458d2cca51be64284e6ead5178e0190
@@ -9,6 +9,25 @@ module OccamsRecord
9
9
  # @return [Array<OccamsRecord::Results::Row>] the rows into which associated rows will be merged
10
10
  attr_reader :target_rows
11
11
 
12
+ # Exception raised when a foreign or primary key is missing from a record
13
+ class MissingFieldError < StandardError
14
+ # @return [OccamsRecord::Result::Row]
15
+ attr_reader :record
16
+ # @return [Symbol]
17
+ attr_reader :field
18
+
19
+ # @param record [OccamsRecord::Result::Row]
20
+ # @param field [Symbol]
21
+ def initialize(record, field)
22
+ @record, @field = record, field
23
+ end
24
+
25
+ # @return [String]
26
+ def message
27
+ "Missing field '#{field}' on #{record.inspect}. Did you forget to select it?"
28
+ end
29
+ end
30
+
12
31
  #
13
32
  # Initialize a new Merge operation.
14
33
  #
@@ -30,13 +49,21 @@ module OccamsRecord
30
49
  #
31
50
  def single!(assoc_rows, target_attr, assoc_attr)
32
51
  assoc_rows_by_id = assoc_rows.reduce({}) { |a, assoc_row|
33
- id = assoc_row.send assoc_attr
52
+ begin
53
+ id = assoc_row.send assoc_attr
54
+ rescue NoMethodError => e
55
+ raise MissingFieldError.new(assoc_row, e.name)
56
+ end
34
57
  a[id] = assoc_row
35
58
  a
36
59
  }
37
60
 
38
61
  target_rows.each do |row|
39
- attr = row.send target_attr
62
+ begin
63
+ attr = row.send target_attr
64
+ rescue NoMethodError => e
65
+ raise MissingFieldError.new(row, e.name)
66
+ end
40
67
  row.send @assign, attr ? assoc_rows_by_id[attr] : nil
41
68
  end
42
69
  end
@@ -47,9 +74,18 @@ module OccamsRecord
47
74
  # target_attr and assoc_attr are the matching keys on target_rows and assoc_rows, respectively.
48
75
  #
49
76
  def many!(assoc_rows, target_attr, assoc_attr)
50
- assoc_rows_by_attr = assoc_rows.group_by(&assoc_attr.to_sym)
77
+ begin
78
+ assoc_rows_by_attr = assoc_rows.group_by(&assoc_attr.to_sym)
79
+ rescue NoMethodError => e
80
+ raise MissingFieldError.new(assoc_rows_by_attr[0], e.name)
81
+ end
82
+
51
83
  target_rows.each do |row|
52
- pkey = row.send target_attr
84
+ begin
85
+ pkey = row.send target_attr
86
+ rescue NoMethodError => e
87
+ raise MissingFieldError.new(row, e.name)
88
+ end
53
89
  row.send @assign, assoc_rows_by_attr[pkey] || []
54
90
  end
55
91
  end
@@ -3,5 +3,5 @@
3
3
  #
4
4
  module OccamsRecord
5
5
  # Library version
6
- VERSION = '0.12.0'.freeze
6
+ VERSION = '0.13.0'.freeze
7
7
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: occams-record
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.12.0
4
+ version: 0.13.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jordan Hollinger