active_record-acts_as 2.0.3 → 2.0.4

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: 3bdab6c5656685b37735b973c0469d7685f59184
4
- data.tar.gz: 2e194b3da56bf01749ec5b25f6735a44fdbd1db1
3
+ metadata.gz: 9cc915fa77c939869175617ca452707352f1c958
4
+ data.tar.gz: 49e729130f7d047cd550791e47d91f8aae02233e
5
5
  SHA512:
6
- metadata.gz: 3dfdd0ed588ae99de26d55c11d27ee9807d2403def3ddb312b7f88fdb2b4be281be9ffbba85ff6b3731a925597b7298c84e724c5b0a6d20b17fa69eb0982d8bb
7
- data.tar.gz: 072b7afcbae99749ead9b32e0a2feba7456214a0e58d09f2122a346833d097c98fe6343cb9a70d06263595184cfba3b4bfc624e4070abd9f078745b97fedadbf
6
+ metadata.gz: a33e98e3a6fe6df92f4e3a89b597ae503e3091deb9b65c73596d38b14cb29bcf12d0d900e9f0e2779b36e7e902f3b5a767db18b550c6b290e0bee48aee7fd9e7
7
+ data.tar.gz: 4cbe6d4237c1ca1c198bd95a0176ee3cbbe561b773073f3a9168fe739da35a006cdb316467c0a2fc8b3856fcb1a9e4ea498b86128cd16e3b11b7dad44a0da619
data/CHANGELOG.md CHANGED
@@ -4,6 +4,10 @@ All notable changes to this project will be documented in this file.
4
4
  The format is based on [Keep a Changelog](http://keepachangelog.com/)
5
5
  and this project adheres to [Semantic Versioning](http://semver.org/).
6
6
 
7
+ ## [Unreleased]
8
+ ### Fixed
9
+ - Touch associated objects if supermodel is updated
10
+
7
11
  ## [2.0.3] - 2016-11-07
8
12
  ### Fixed
9
13
  - Fix defining associations on `acting_as` model after calling `acting_as`
@@ -9,6 +9,10 @@ module ActiveRecord
9
9
  super || acting_as?(klass)
10
10
  end
11
11
 
12
+ def changed?
13
+ super || acting_as.changed? || @_acting_as_changed
14
+ end
15
+
12
16
  def acting_as_foreign_key
13
17
  acting_as[acting_as_reflection.foreign_key]
14
18
  end
@@ -26,6 +26,14 @@ module ActiveRecord
26
26
  validate :actable_must_be_valid
27
27
  after_update :touch_actable unless touch == false
28
28
 
29
+ before_save do
30
+ @_acting_as_changed = acting_as.changed?
31
+ true
32
+ end
33
+ after_commit do
34
+ @_acting_as_changed = nil
35
+ end
36
+
29
37
  cattr_reader(:acting_as_reflection) { reflections.stringify_keys[name.to_s] }
30
38
  cattr_reader(:acting_as_name) { name.to_s }
31
39
  cattr_reader(:acting_as_model) { (options[:class_name] || name.to_s.camelize).constantize }
@@ -1,6 +1,6 @@
1
1
  module ActiveRecord
2
2
  module ActsAs
3
- VERSION = "2.0.3"
3
+ VERSION = "2.0.4"
4
4
  end
5
5
  end
6
6
 
data/spec/acts_as_spec.rb CHANGED
@@ -214,25 +214,41 @@ RSpec.describe "ActiveRecord::Base model with #acts_as called" do
214
214
  expect(pen.color).to eq('red')
215
215
  end
216
216
 
217
- it "touches supermodel on save" do
218
- pen.save
219
- pen.reload
220
- update = pen.product.updated_at
221
- pen.color = "gray"
222
- pen.save
223
- expect(pen.updated_at).not_to eq(update)
224
- end
217
+ context "touching" do
218
+ it "touches supermodel on save" do
219
+ pen.save
220
+ pen.reload
221
+ update = pen.product.updated_at
222
+ pen.color = "gray"
223
+ pen.save
224
+ expect(pen.updated_at).not_to eq(update)
225
+ end
225
226
 
226
- it "touches supermodel only when attributes changed" do
227
- pen.save
227
+ it "touches supermodel only when attributes changed" do
228
+ pen.save
228
229
 
229
- expect { pen.save }.to_not change { pen.reload.product.updated_at }
230
- end
230
+ expect { pen.save }.to_not change { pen.reload.product.updated_at }
231
+ end
231
232
 
232
- it "touches supermodel when #touch is called" do
233
- pen.save
233
+ it "touches supermodel when #touch is called" do
234
+ pen.save
235
+
236
+ expect { pen.touch }.to change { pen.product.updated_at }
237
+ end
234
238
 
235
- expect { pen.touch }.to change { pen.product.updated_at }
239
+ it "touches belongs_to-touch associations if supermodel is updated" do
240
+ pen.build_pen_collection
241
+ pen.save!
242
+ pen.name = "superpen"
243
+ expect { pen.save! }.to change { pen.pen_collection.updated_at }
244
+ end
245
+
246
+ it "touches belongs_to-touch associations of supermodel when submodel is updated" do
247
+ pen.store = store
248
+ pen.save!
249
+ pen.color = "gray"
250
+ expect { pen.save! }.to change { pen.store.updated_at }
251
+ end
236
252
  end
237
253
 
238
254
  it "raises NoMethodEror on unexisting method call" do
data/spec/models.rb CHANGED
@@ -3,7 +3,7 @@ require 'active_record/acts_as'
3
3
 
4
4
  class Product < ActiveRecord::Base
5
5
  actable
6
- belongs_to :store
6
+ belongs_to :store, touch: true
7
7
  has_many :buyers
8
8
  validates_presence_of :name, :price
9
9
  store :settings, accessors: [:global_option]
@@ -17,11 +17,16 @@ class Product < ActiveRecord::Base
17
17
  end
18
18
  end
19
19
 
20
+ class PenCollection < ActiveRecord::Base
21
+ has_many :pens
22
+ end
23
+
20
24
  class Pen < ActiveRecord::Base
21
25
  acts_as :product
22
26
  store_accessor :settings, :option1
23
27
 
24
28
  has_many :pen_caps
29
+ belongs_to :pen_collection, touch: true
25
30
 
26
31
  validates_presence_of :color
27
32
  end
@@ -67,8 +72,13 @@ end
67
72
 
68
73
  def initialize_schema
69
74
  initialize_database do
75
+ create_table :pen_collections do |t|
76
+ t.timestamps null: true
77
+ end
78
+
70
79
  create_table :pens do |t|
71
80
  t.string :color
81
+ t.integer :pen_collection_id
72
82
  end
73
83
 
74
84
  create_table :products do |t|
@@ -82,6 +92,7 @@ def initialize_schema
82
92
 
83
93
  create_table :stores do |t|
84
94
  t.string :name
95
+ t.timestamps null: true
85
96
  end
86
97
 
87
98
  create_table :buyers do |t|
@@ -103,4 +114,5 @@ def initialize_schema
103
114
  end
104
115
  end
105
116
  end
117
+
106
118
  initialize_schema
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_record-acts_as
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.3
4
+ version: 2.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hassan Zamani
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-11-07 00:00:00.000000000 Z
11
+ date: 2016-12-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sqlite3