Class: Entitlements::Models::Person
- Inherits:
-
Object
- Object
- Entitlements::Models::Person
show all
- Includes:
- Contracts::Core
- Defined in:
- lib/entitlements.rb,
lib/entitlements/models/person.rb
Constant Summary
collapse
- C =
::Contracts
Instance Attribute Summary collapse
Instance Method Summary
collapse
common, extended, included
Constructor Details
#initialize(uid:, attributes: {}) ⇒ Person
19
20
21
22
|
# File 'lib/entitlements/models/person.rb', line 19
def initialize(uid:, attributes: {})
@uid = uid
setup_attributes(attributes)
end
|
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(m, *args, &block) ⇒ Object
Grab any methods that have been defined by extras and dispatch them to the appropriate backend.
The first argument sent to the method is a reference to this object (self). Any arguments passed
by the caller are sent thereafter. For now this ignores blocks (maybe figure this out later?).
Arguments and return varies.
29
30
31
32
33
34
35
36
37
|
# File 'lib/entitlements/models/person.rb', line 29
def method_missing(m, *args, &block)
if method_class_ref = Entitlements.[m]
return method_class_ref.send(m, self, *args)
end
raise NoMethodError, "No method '#{m}' exists for Entitlements::Models::Person or any registered extras."
end
|
Instance Attribute Details
#uid ⇒ Object
Returns the value of attribute uid.
9
10
11
|
# File 'lib/entitlements/models/person.rb', line 9
def uid
@uid
end
|
Instance Method Details
#[](attribute) ⇒ Object
45
46
47
|
# File 'lib/entitlements/models/person.rb', line 45
def [](attribute)
outward(@current_attributes.fetch(attribute))
end
|
#[]=(attribute, val) ⇒ Object
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
# File 'lib/entitlements/models/person.rb', line 66
def []=(attribute, val)
@touched_attributes.add(attribute)
if val.nil? && @original_attributes[attribute].nil?
@original_attributes.delete(attribute)
@current_attributes.delete(attribute)
return
end
@original_attributes[attribute] ||= nil
if val.nil? || val.is_a?(String)
@current_attributes[attribute] = val
elsif val.is_a?(Set)
@current_attributes[attribute] = val.dup
else
@current_attributes[attribute] = Set.new(val)
end
end
|
#add(attribute, val) ⇒ Object
107
108
109
110
111
112
113
|
# File 'lib/entitlements/models/person.rb', line 107
def add(attribute, val)
@touched_attributes.add(attribute)
ca = @current_attributes.fetch(attribute) raise ArgumentError, "Called add() on attribute that is a #{ca.class}" unless ca.is_a?(Set)
ca.add(val)
nil
end
|
#attribute_changes ⇒ Object
91
92
93
94
95
96
97
98
|
# File 'lib/entitlements/models/person.rb', line 91
def attribute_changes
@current_attributes
.select { |k, _| @touched_attributes.member?(k) }
.reject { |k, v| @original_attributes[k] == v }
.reject { |k, v| (@original_attributes[k].nil? || @original_attributes[k] == Set.new) && (v.nil? || v == Set.new) }
.map { |k, _| [k, self[k]] }
.to_h
end
|
#original(attribute) ⇒ Object
55
56
57
|
# File 'lib/entitlements/models/person.rb', line 55
def original(attribute)
outward(@original_attributes[attribute])
end
|