heritage 0.3.0 → 0.3.1

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.
@@ -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
-