directory_diff 0.4.11 → 0.4.12

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
  SHA1:
3
- metadata.gz: 15e07baf8cd9794e7c7725ff856c366829f17de7
4
- data.tar.gz: 97966de2c4dbd7e6361fa6669fef1e57d8cbf68e
3
+ metadata.gz: 8c2bfcffa269d189122f5a26e497e67413990319
4
+ data.tar.gz: a97ad9941677dcf9f4da9e40225a0080c3226fc7
5
5
  SHA512:
6
- metadata.gz: 7dad0393c22d490b7b9d777b1217183dc144da9d8feb36d4575e80e879a97bdaaf2aab77a5f9e0d0b98b06dffc0d3cd23fcbe661d1fb540c37d4710e6c151442
7
- data.tar.gz: 12f8cdb06594281b48664bb96ace66c7a671ff69493dae688a283e1c461fd3c9b125842047bb61fd98acac0cc2f7585a0783527677d3884efd016355e86f43b6
6
+ metadata.gz: 41cac991119fab2db6acf885eba8f4767d3159a40c4bf3ea49f3dfd5c7cf2c52ae2ae1f0e2fa505a968592cbce79983b868977e465fe56d19cda286fc422ad80
7
+ data.tar.gz: bf5a930f70ccc7af38f87a8607f83772b8ca16e0a602fedac351e28cd10db3433f48befbdcf392db3df5ceba8ca72db5d290d0d79a35bc44942b6f2f12eec9aa
@@ -64,11 +64,24 @@ module DirectoryDiff
64
64
  original_assistant_value = new_employee[3]
65
65
  end
66
66
 
67
+ # phone_number may be nil. we only use the csv to *set* phone numbers if
68
+ # it has a value. if it was nil, we backfill from current employee so that
69
+ # the new record apperas to the be same as the current record
70
+ phone_number = new_employee[2].presence
71
+ if phone_number.nil?
72
+ original_phone_number_value = nil
73
+ new_employee[2] = old_employee&.fetch(2)
74
+ else
75
+ original_phone_number_value = new_employee[2]
76
+ end
77
+
67
78
  if old_employee.nil?
68
79
  add_transform(:insert, new_employee)
69
80
  elsif new_employee[0, 4] == old_employee[0, 4]
70
81
  # restore assistant value after cleanup like missing assistants and own email
71
82
  new_employee[3] = original_assistant_value
83
+ # restore phone number value
84
+ new_employee[2] = original_phone_number_value
72
85
  add_transform(:noop, new_employee) unless options[:skip_noop]
73
86
  else
74
87
  add_transform(:update, new_employee)
@@ -2,12 +2,6 @@
2
2
 
3
3
  require "activerecord_pg_stuff"
4
4
 
5
- Arel::Predications.module_eval do
6
- def contains(other)
7
- Arel::Nodes::InfixOperation.new(:"@>", self, other)
8
- end
9
- end
10
-
11
5
  module DirectoryDiff
12
6
  module Transformer
13
7
  class TempTable
@@ -36,9 +30,14 @@ module DirectoryDiff
36
30
  attributes_unchanged = employees[:name].eq(csv[:name])
37
31
  .and(
38
32
  employees[:phone_number].eq(csv[:phone_number])
33
+ .or(csv[:phone_number].eq(""))
34
+ # ☝🏽 Comparing to an empty string because we cast
35
+ # phone number to an empty string. The reason is
36
+ # comparing NULL = NULL is always false in SQL
39
37
  )
40
38
  .and(
41
- employees[:assistants].contains(csv[:assistants])
39
+ employees[:assistants].eq(csv[:assistants])
40
+ .or(csv[:assistants].eq("{}"))
42
41
  )
43
42
 
44
43
  # Creates joins between the temp table and the csv table and
@@ -59,7 +58,8 @@ module DirectoryDiff
59
58
 
60
59
  connection.execute(SQL.cleanup_sql(csv.name))
61
60
 
62
- csv_fields = [:name, :email, :phone_number, :assistants, :extra]
61
+ csv_fields = %I[name email phone_number assistants extra].map { |c| csv[c] }
62
+ emp_fields = %I[name email phone_number assistants].map { |c| employees[c] }
63
63
 
64
64
  # new records are records in the new directory that don't exist in
65
65
  # the current directory
@@ -71,7 +71,8 @@ module DirectoryDiff
71
71
  # exist in the new directory
72
72
  deleted_records = employee_records
73
73
  .select("'delete'::varchar operation, row_number")
74
- .select(csv_fields)
74
+ .select(emp_fields)
75
+ .select("null extra")
75
76
  .where({ csv.name => { email: nil } })
76
77
  # changed records are records that have difference in name, phone
77
78
  # number and/or assistants
@@ -169,7 +170,12 @@ module DirectoryDiff
169
170
  if activerecord52?
170
171
  rel = ActiveRecord::Relation.new(dec)
171
172
  else
172
- rel = ActiveRecord::Relation.new(dec, dec.arel_table, dec.predicate_builder, {})
173
+ rel = ActiveRecord::Relation.new(
174
+ dec,
175
+ dec.arel_table,
176
+ dec.predicate_builder,
177
+ {}
178
+ )
173
179
  end
174
180
  rel.readonly!
175
181
  block.call(rel)
@@ -1,3 +1,3 @@
1
1
  module DirectoryDiff
2
- VERSION = "0.4.11"
2
+ VERSION = "0.4.12"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: directory_diff
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.11
4
+ version: 0.4.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kamal Mahyuddin