junk_drawer 1.5.0 → 1.6.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
  SHA1:
3
- metadata.gz: 9ccbaed0545acce12327a2220ffd61a1f2c89a88
4
- data.tar.gz: bb229cb6b5d34628b6122a1476bb854afd474726
3
+ metadata.gz: d60be93d64ee4342cb14f414e72b1844e9f640b9
4
+ data.tar.gz: 04edabc898bec4b016d171ad9b2f9b31465f100f
5
5
  SHA512:
6
- metadata.gz: dc88c0d245fe98b677b94b172968605fa4bec3070fb889e226ce2eb92b848cc24fba1c59bbe92ec99a834c66498f5642b69681a4f34ade042c0db3c6c716a287
7
- data.tar.gz: 1743c1dc5149e743d231ff3aa0708ef1cfdc52b19b78f094ed03eaa2e5dbbb8a57cb2cf7def040918e47f766ff5d63898d60bd9103be6eb7062ca1adacec95cc
6
+ metadata.gz: 5f287f07b3d588795ba80267818cf8fd5794fba500d7a5bbc5396447d4299cd7ac44c562778d49be9ebbcaca8f016215bec1d28ae1c26cf33a28623338becbe7
7
+ data.tar.gz: 7d0a4b6a89fd495b32a3b40566af88b3e0c777ae7c4fba6ba7217f1782292f8dcc40802cacc0506ba6a57f2863faa18cc1c3aac8f1e88d0ae1055ccd1d63be43
@@ -11,13 +11,30 @@ module JunkDrawer
11
11
  objects = objects.select(&:changed?)
12
12
  return unless objects.any?
13
13
 
14
- changed_attributes = extract_changed_attributes(objects)
15
- query = build_query_for(objects, changed_attributes)
14
+ unique_objects = uniquify_and_merge(objects)
15
+ changed_attributes = extract_changed_attributes(unique_objects)
16
+ query = build_query_for(unique_objects, changed_attributes)
16
17
  connection.execute(query)
18
+ objects.each(&:clear_changes_information)
17
19
  end
18
20
 
19
21
  private
20
22
 
23
+ def uniquify_and_merge(objects)
24
+ grouped_objects = objects.group_by(&:id).values
25
+ grouped_objects.each do |group|
26
+ next if group.length == 1
27
+
28
+ attrs = group.each_with_object({}) do |object, changes|
29
+ object.changed.each do |changed_attribute|
30
+ changes[changed_attribute] = object[changed_attribute]
31
+ end
32
+ end
33
+ group.each { |object| object.attributes = attrs }
34
+ end
35
+ grouped_objects.map(&:first)
36
+ end
37
+
21
38
  def extract_changed_attributes(objects)
22
39
  now = Time.zone.now
23
40
  objects.each { |object| object.updated_at = now }
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module JunkDrawer
4
- VERSION = '1.5.0'
4
+ VERSION = '1.6.0'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: junk_drawer
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.0
4
+ version: 1.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robert Fletcher
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-03-29 00:00:00.000000000 Z
11
+ date: 2018-07-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler