occams-record 0.12.0 → 0.13.0

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