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
|
-
|
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
|
-
|
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
|
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
|
data/lib/heritage/version.rb
CHANGED
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
|
-
|
5
|
-
prerelease:
|
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
|
-
|
141
|
-
|
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
|
-
|
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.
|
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
|
-
|