/
accessible.rb
44 lines (37 loc) · 1.18 KB
/
accessible.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
module MongoMapper
module Plugins
module Accessible
module ClassMethods
def attr_accessible(*attrs)
raise AccessibleOrProtected.new(name) if try(:protected_attributes?)
self.write_inheritable_attribute(:attr_accessible, Set.new(attrs) + (accessible_attributes || []))
end
def accessible_attributes?
!accessible_attributes.nil?
end
def accessible_attributes
self.read_inheritable_attribute(:attr_accessible)
end
end
module InstanceMethods
def assign(attrs={})
super(filter_inaccessible_attrs(attrs))
end
def update_attributes(attrs={})
super(filter_inaccessible_attrs(attrs))
end
def update_attributes!(attrs={})
super(filter_inaccessible_attrs(attrs))
end
def accessible_attributes
self.class.accessible_attributes
end
protected
def filter_inaccessible_attrs(attrs)
return attrs if accessible_attributes.blank? || attrs.blank?
attrs.dup.delete_if { |key, val| !accessible_attributes.include?(key.to_sym) }
end
end
end
end
end