multiple_table_inheritance 0.1.5 → 0.1.7
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.
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,18 @@
|
|
1
|
+
0.1.8
|
2
|
+
|
3
|
+
* Child model records can now inherit parent model methods via the :methods
|
4
|
+
option when calling :inherits_from.
|
5
|
+
* Added several unit tests.
|
6
|
+
|
7
|
+
0.1.7
|
8
|
+
|
9
|
+
* Fix bug caused by extraneous super call in sanitizer class.
|
10
|
+
|
11
|
+
0.1.6
|
12
|
+
|
13
|
+
* Fix issue with mass assignment sanitizer classes not being loaded
|
14
|
+
consistently across different versions of Rails 3.
|
15
|
+
|
1
16
|
0.1.5
|
2
17
|
|
3
18
|
* Fix issue with LoggerSanitizer not being defined in Rails projects.
|
data/README.md
CHANGED
@@ -25,7 +25,7 @@ From the command line:
|
|
25
25
|
|
26
26
|
From your Gemfile:
|
27
27
|
|
28
|
-
gem 'multiple_table_inheritance', '~> 0.1.
|
28
|
+
gem 'multiple_table_inheritance', '~> 0.1.7'
|
29
29
|
|
30
30
|
Usage
|
31
31
|
=====
|
@@ -254,5 +254,5 @@ option when calling `inherits_from`.
|
|
254
254
|
@programmer.give_raise!
|
255
255
|
# yields: "Congrats on your well-deserved raise, Mike!"
|
256
256
|
|
257
|
-
NOTE: This is not fully implemented yet as of version 0.1.
|
257
|
+
NOTE: This is not fully implemented yet as of version 0.1.7. Please wait until
|
258
258
|
a future release to prior to using this feature.
|
@@ -39,9 +39,6 @@ module MultipleTableInheritance
|
|
39
39
|
attr_accessible attr.to_sym
|
40
40
|
end
|
41
41
|
|
42
|
-
# Sanitize attributes across parent and child
|
43
|
-
self.mass_assignment_sanitizer = Child::Sanitizer.new(self)
|
44
|
-
|
45
42
|
# Bind relationship, handle validation, and save properly.
|
46
43
|
belongs_to parent_association_name, options
|
47
44
|
alias_method_chain parent_association_name, :autobuild
|
@@ -94,6 +91,12 @@ module MultipleTableInheritance
|
|
94
91
|
end
|
95
92
|
|
96
93
|
module InstanceMethods
|
94
|
+
protected
|
95
|
+
|
96
|
+
def sanitize_for_mass_assignment(attributes, role = :default)
|
97
|
+
Child::Sanitizer.new(self.class, role).sanitize(attributes)
|
98
|
+
end
|
99
|
+
|
97
100
|
private
|
98
101
|
|
99
102
|
def parent_association
|
@@ -1,14 +1,12 @@
|
|
1
|
-
require 'activemodel/mass_assignment_security/sanitizer' unless defined?(ActiveModel::MassAssignmentSecurity::LoggerSanitizer)
|
2
|
-
|
3
1
|
module MultipleTableInheritance
|
4
2
|
module Child
|
5
|
-
class Sanitizer
|
6
|
-
def initialize(target)
|
3
|
+
class Sanitizer
|
4
|
+
def initialize(target, role)
|
7
5
|
@target = target
|
8
|
-
|
6
|
+
@role = role
|
9
7
|
end
|
10
8
|
|
11
|
-
def sanitize(attributes
|
9
|
+
def sanitize(attributes)
|
12
10
|
sanitized_attributes = attributes.reject { |key, value| deny?(key) }
|
13
11
|
debug_protected_attribute_removal(attributes, sanitized_attributes)
|
14
12
|
sanitized_attributes
|
@@ -16,6 +14,25 @@ module MultipleTableInheritance
|
|
16
14
|
|
17
15
|
protected
|
18
16
|
|
17
|
+
def debug_protected_attribute_removal(attributes, sanitized_attributes)
|
18
|
+
removed_keys = attributes.keys - sanitized_attributes.keys
|
19
|
+
process_removed_attributes(removed_keys) if removed_keys.any?
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def logger
|
25
|
+
@target.logger
|
26
|
+
end
|
27
|
+
|
28
|
+
def logger?
|
29
|
+
@target.respond_to?(:logger) && @target.logger
|
30
|
+
end
|
31
|
+
|
32
|
+
def process_removed_attributes(attrs)
|
33
|
+
logger.warn "Can't mass-assign protected attributes: #{attrs.join(', ')}" if logger?
|
34
|
+
end
|
35
|
+
|
19
36
|
def deny?(key)
|
20
37
|
return true if protected_attribute?(key)
|
21
38
|
return !accessible_attribute?(key)
|
@@ -32,19 +49,27 @@ module MultipleTableInheritance
|
|
32
49
|
end
|
33
50
|
|
34
51
|
def protected_attributes
|
35
|
-
@protected_attributes ||= (
|
52
|
+
@protected_attributes ||= (protected_child_attributes + protected_parent_attributes)
|
36
53
|
end
|
37
54
|
|
38
55
|
def accessible_attributes
|
39
|
-
@accessible_attributes ||= (
|
56
|
+
@accessible_attributes ||= (accessible_child_attributes + accessible_parent_attributes)
|
57
|
+
end
|
58
|
+
|
59
|
+
def protected_child_attributes
|
60
|
+
@protected_child_attributes ||= @target.protected_attributes(@role)
|
61
|
+
end
|
62
|
+
|
63
|
+
def protected_parent_attributes
|
64
|
+
@protected_parent_attributes ||= @target.parent_association_class.protected_attributes(@role)
|
40
65
|
end
|
41
66
|
|
42
67
|
def accessible_child_attributes
|
43
|
-
@accessible_child_attributes ||= @target.accessible_attributes
|
68
|
+
@accessible_child_attributes ||= @target.accessible_attributes(@role)
|
44
69
|
end
|
45
70
|
|
46
71
|
def accessible_parent_attributes
|
47
|
-
@accessible_parent_attributes ||= @target.parent_association_class.accessible_attributes
|
72
|
+
@accessible_parent_attributes ||= @target.parent_association_class.accessible_attributes(@role)
|
48
73
|
end
|
49
74
|
|
50
75
|
def child_attribute_names
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: multiple_table_inheritance
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.7
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-03-
|
12
|
+
date: 2012-03-16 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activerecord
|
16
|
-
requirement: &
|
16
|
+
requirement: &2153035620 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 3.0.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *2153035620
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: activesupport
|
27
|
-
requirement: &
|
27
|
+
requirement: &2153035040 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 3.0.0
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *2153035040
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rspec-rails
|
38
|
-
requirement: &
|
38
|
+
requirement: &2153034460 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: 2.8.0
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *2153034460
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: rspec_tag_matchers
|
49
|
-
requirement: &
|
49
|
+
requirement: &2153033940 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 1.0.0
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *2153033940
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: sqlite3-ruby
|
60
|
-
requirement: &
|
60
|
+
requirement: &2153033420 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: 1.3.3
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *2153033420
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: database_cleaner
|
71
|
-
requirement: &
|
71
|
+
requirement: &2153032860 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,7 +76,7 @@ dependencies:
|
|
76
76
|
version: 0.7.1
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *2153032860
|
80
80
|
description: ActiveRecord plugin designed to allow simple multiple table inheritance.
|
81
81
|
email:
|
82
82
|
- matt@matthuggins.com
|