custom_counter_cache 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -32,25 +32,29 @@ module CustomCounterCache::Model
32
32
  end
33
33
  end
34
34
 
35
- def update_counter_cache(association_id, cache_column, options = {})
36
- association_id = association_id.to_sym
37
- cache_column = cache_column.to_sym
38
- method_name = "callback_#{cache_column}".to_sym
39
- reflection = reflect_on_association(association_id)
40
- foreign_key = reflection.options[:foreign_key] || reflection.association_foreign_key
35
+ def update_counter_cache(association, cache_column, options = {})
36
+ association = association.to_sym
37
+ cache_column = cache_column.to_sym
38
+ method_name = "callback_#{cache_column}".to_sym
39
+ reflection = reflect_on_association(association)
40
+ foreign_key = reflection.options[:foreign_key] || reflection.association_foreign_key
41
41
  # define callback
42
42
  define_method method_name do
43
43
  # update old association
44
- if send("#{foreign_key}_changed?")
45
- old_assoc_id = send("#{foreign_key}_was")
46
- if ( old_assoc_id && old_assoc = reflection.klass.find(old_assoc_id))
47
- old_assoc.send("update_#{cache_column}")
44
+ if send("#{foreign_key}_changed?") || ( !respond_to?("#{association}_type") || send("#{association}_type_changed?") )
45
+ old_id = send("#{foreign_key}_was")
46
+ klass = if reflection.options[:polymorphic]
47
+ ( send("#{association}_type_was") || send("#{association}_type") ).constantize
48
+ else
49
+ reflection.klass
50
+ end
51
+ if ( old_id && record = klass.find(old_id) )
52
+ record.send("update_#{cache_column}")
48
53
  end
49
54
  end
50
55
  # update new association
51
- new_assoc_id = send(foreign_key)
52
- if ( new_assoc_id && new_assoc = reflection.klass.find(new_assoc_id) )
53
- new_assoc.send("update_#{cache_column}")
56
+ if ( record = send(association) )
57
+ record.send("update_#{cache_column}")
54
58
  end
55
59
  end
56
60
  # set callbacks
@@ -1,5 +1,5 @@
1
1
  module CustomCounterCache
2
2
 
3
- VERSION = '0.0.4'
3
+ VERSION = '0.0.5'
4
4
 
5
5
  end
data/test/test_helper.rb CHANGED
@@ -1,13 +1,9 @@
1
- $: << File.join(File.dirname(__FILE__), '..', 'lib')
2
- $: << File.join(File.dirname(__FILE__))
3
-
4
1
  require 'rubygems'
5
2
  require 'test/unit'
6
3
  require 'sqlite3'
7
4
  require 'action_view'
8
5
  require 'active_record'
9
6
  require 'custom_counter_cache'
10
- require 'ruby-debug'
11
7
 
12
8
  ActiveRecord::Base.establish_connection(:adapter => 'sqlite3', :database => ':memory:')
13
9
 
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: custom_counter_cache
3
3
  version: !ruby/object:Gem::Version
4
- hash: 23
4
+ hash: 21
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 4
10
- version: 0.0.4
9
+ - 5
10
+ version: 0.0.5
11
11
  platform: ruby
12
12
  authors:
13
13
  - Cedric Howe
@@ -15,41 +15,25 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-07-13 00:00:00 Z
18
+ date: 2012-08-28 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: rails
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
22
+ version_requirements: &id001 !ruby/object:Gem::Requirement
24
23
  none: false
25
24
  requirements:
26
25
  - - ">="
27
26
  - !ruby/object:Gem::Version
28
27
  hash: 5
29
28
  segments:
30
- - 2
31
29
  - 3
32
- version: "2.3"
30
+ version: "3"
33
31
  type: :runtime
34
- version_requirements: *id001
35
- - !ruby/object:Gem::Dependency
36
- name: sqlite3-ruby
32
+ requirement: *id001
37
33
  prerelease: false
38
- requirement: &id002 !ruby/object:Gem::Requirement
39
- none: false
40
- requirements:
41
- - - ">="
42
- - !ruby/object:Gem::Version
43
- hash: 3
44
- segments:
45
- - 0
46
- version: "0"
47
- type: :development
48
- version_requirements: *id002
49
34
  - !ruby/object:Gem::Dependency
50
- name: debugger
51
- prerelease: false
52
- requirement: &id003 !ruby/object:Gem::Requirement
35
+ name: sqlite3
36
+ version_requirements: &id002 !ruby/object:Gem::Requirement
53
37
  none: false
54
38
  requirements:
55
39
  - - ">="
@@ -59,7 +43,8 @@ dependencies:
59
43
  - 0
60
44
  version: "0"
61
45
  type: :development
62
- version_requirements: *id003
46
+ requirement: *id002
47
+ prerelease: false
63
48
  description: ""
64
49
  email: cedric@howe.net
65
50
  executables: []