heritage 0.3.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,19 +1,19 @@
1
1
  module Heritage
2
2
  module ActiveRecord
3
3
  module ActsAsHeir
4
-
4
+
5
5
  def acts_as_heir_of(predecessor_symbol)
6
6
  extend ClassMethods
7
7
  include InstanceMethods
8
-
8
+
9
9
  class_attribute :_predecessor_klass, :_predecessor_symbol
10
10
  self._predecessor_symbol = predecessor_symbol
11
11
  self._predecessor_klass = Object.const_get(predecessor_symbol.to_s.capitalize)
12
-
12
+
13
13
  has_one :predecessor, :as => :heir, :class_name => predecessor_symbol.to_s.capitalize, :autosave => true, :dependent => :destroy
14
14
 
15
15
  alias_method_chain :predecessor, :build
16
-
16
+
17
17
  # Expose columns from the predecessor
18
18
  self._predecessor_klass.columns.reject{|c| c.primary || c.name =~ /^heir_/}.map(&:name).each do |att|
19
19
  define_method(att) do
@@ -23,7 +23,7 @@ module Heritage
23
23
  predecessor.send("#{att}=",val)
24
24
  end
25
25
  end
26
-
26
+
27
27
  # Expose associations from the predecessor
28
28
  self._predecessor_klass.reflect_on_all_associations.reject{|a| a.name == :heir}.each do |association|
29
29
  define_method(association.name) do
@@ -33,10 +33,10 @@ module Heritage
33
33
  predecessor.send("#{association.name}=",val)
34
34
  end
35
35
  end
36
-
36
+
37
37
  # We need to make sure that updated_at values in the predecessor table is updated when the heir is saved.
38
- after_update :touch_predecessor
39
-
38
+ before_update :touch_predecessor, :unless => lambda { predecessor.changed? }
39
+
40
40
  # Expose methods from predecessor
41
41
  self._predecessor_klass.get_heritage_exposed_methods.each do |method_symbol|
42
42
  define_method(method_symbol.to_s) do |*args|
@@ -48,21 +48,23 @@ module Heritage
48
48
  end
49
49
  end
50
50
  end
51
-
51
+
52
52
  module ClassMethods
53
-
53
+
54
54
  end
55
-
55
+
56
56
  module InstanceMethods
57
57
  def predecessor_with_build(attributes = {})
58
58
  predecessor_without_build || build_predecessor(attributes)
59
59
  end
60
-
60
+
61
61
  def touch_predecessor
62
- predecessor.touch
62
+ if self.changed?
63
+ predecessor.touch
64
+ end
63
65
  end
64
66
  end
65
-
67
+
66
68
  end
67
69
  end
68
70
  end
@@ -1,31 +1,37 @@
1
1
  module Heritage
2
2
  module ActiveRecord
3
3
  module ActsAsPredecessor
4
-
4
+
5
5
  def acts_as_predecessor(options = {})
6
6
  extend ClassMethods
7
7
  include InstanceMethods
8
-
8
+
9
9
  options[:exposes] ||= []
10
10
  class_attribute :_acts_as_predecessor_settings
11
11
  self._acts_as_predecessor_settings = options
12
-
13
- belongs_to :heir, :polymorphic => true, :touch => true
12
+
13
+ belongs_to :heir, :polymorphic => true
14
+
15
+ before_update :touch_heir, :unless => lambda { heir.changed? }
14
16
  end
15
-
17
+
16
18
  module ClassMethods
17
-
19
+
18
20
  def get_heritage_exposed_methods
19
21
  result = self._acts_as_predecessor_settings[:exposes]
20
22
  result.is_a?(Array) ? result : [result]
21
23
  end
22
-
24
+
23
25
  end
24
-
26
+
25
27
  module InstanceMethods
26
-
28
+ def touch_heir
29
+ if self.changed?
30
+ heir.touch
31
+ end
32
+ end
27
33
  end
28
-
34
+
29
35
  end
30
36
  end
31
37
  end
@@ -1,3 +1,3 @@
1
1
  module Heritage
2
- VERSION = "0.3.0"
2
+ VERSION = "0.3.1"
3
3
  end
metadata CHANGED
@@ -1,34 +1,24 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: heritage
3
- version: !ruby/object:Gem::Version
4
- hash: 19
5
- prerelease: false
6
- segments:
7
- - 0
8
- - 3
9
- - 0
10
- version: 0.3.0
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.1
5
+ prerelease:
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Thomas Dippel
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2011-06-28 00:00:00 +02:00
12
+ date: 2011-11-01 00:00:00.000000000 +01:00
19
13
  default_executable:
20
14
  dependencies: []
21
-
22
15
  description: A gem for implementing multiple table inheritance in rails 3
23
- email:
16
+ email:
24
17
  - thomasdi@benjamin.dk
25
18
  executables: []
26
-
27
19
  extensions: []
28
-
29
20
  extra_rdoc_files: []
30
-
31
- files:
21
+ files:
32
22
  - .gitignore
33
23
  - Gemfile
34
24
  - README.textile
@@ -126,36 +116,26 @@ files:
126
116
  has_rdoc: true
127
117
  homepage: http://rubygems.org/gems/heritage
128
118
  licenses: []
129
-
130
119
  post_install_message:
131
120
  rdoc_options: []
132
-
133
- require_paths:
121
+ require_paths:
134
122
  - lib
135
- required_ruby_version: !ruby/object:Gem::Requirement
123
+ required_ruby_version: !ruby/object:Gem::Requirement
136
124
  none: false
137
- requirements:
138
- - - ">="
139
- - !ruby/object:Gem::Version
140
- hash: 3
141
- segments:
142
- - 0
143
- version: "0"
144
- required_rubygems_version: !ruby/object:Gem::Requirement
125
+ requirements:
126
+ - - ! '>='
127
+ - !ruby/object:Gem::Version
128
+ version: '0'
129
+ required_rubygems_version: !ruby/object:Gem::Requirement
145
130
  none: false
146
- requirements:
147
- - - ">="
148
- - !ruby/object:Gem::Version
149
- hash: 3
150
- segments:
151
- - 0
152
- version: "0"
131
+ requirements:
132
+ - - ! '>='
133
+ - !ruby/object:Gem::Version
134
+ version: '0'
153
135
  requirements: []
154
-
155
136
  rubyforge_project:
156
- rubygems_version: 1.3.7
137
+ rubygems_version: 1.6.2
157
138
  signing_key:
158
139
  specification_version: 3
159
140
  summary: A gem for implementing multiple table inheritance in rails 3
160
141
  test_files: []
161
-