Module: JSONAPI::Consumer::Helpers::Dirty
Instance Method Summary
collapse
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method, *args, &block) ⇒ Object
54
55
56
57
58
59
60
61
62
|
# File 'lib/jsonapi/consumer/helpers/dirty.rb', line 54
def method_missing(method, *args, &block)
if method.to_s =~ /^(.*)_changed\?$/
has_attribute?($1) ? attribute_changed?($1) : nil
elsif method.to_s =~ /^(.*)_was$/
has_attribute?($1) ? attribute_was($1) : nil
else
super
end
end
|
Instance Method Details
#attribute_change(attr) ⇒ Object
48
49
50
|
# File 'lib/jsonapi/consumer/helpers/dirty.rb', line 48
def attribute_change(attr)
[changed_attributes[attr], attributes[attr]] if attribute_changed?(attr)
end
|
#attribute_changed?(attr) ⇒ Boolean
44
45
46
|
# File 'lib/jsonapi/consumer/helpers/dirty.rb', line 44
def attribute_changed?(attr)
changed.include?(attr.to_s)
end
|
#attribute_was(attr) ⇒ Object
40
41
42
|
# File 'lib/jsonapi/consumer/helpers/dirty.rb', line 40
def attribute_was(attr) attribute_changed?(attr) ? changed_attributes[attr] : attributes[attr]
end
|
#attribute_will_change!(attr) ⇒ Object
27
28
29
30
|
# File 'lib/jsonapi/consumer/helpers/dirty.rb', line 27
def attribute_will_change!(attr)
return if attribute_changed?(attr)
set_attribute_was(attr, attributes[attr])
end
|
#changed ⇒ Object
9
10
11
|
# File 'lib/jsonapi/consumer/helpers/dirty.rb', line 9
def changed
changed_attributes.keys
end
|
#changed? ⇒ Boolean
5
6
7
|
# File 'lib/jsonapi/consumer/helpers/dirty.rb', line 5
def changed?
changed_attributes.present?
end
|
#changed_attributes ⇒ Object
13
14
15
|
# File 'lib/jsonapi/consumer/helpers/dirty.rb', line 13
def changed_attributes
@changed_attributes ||= ActiveSupport::HashWithIndifferentAccess.new
end
|
17
18
19
|
# File 'lib/jsonapi/consumer/helpers/dirty.rb', line 17
def clear_changes_information
@changed_attributes = ActiveSupport::HashWithIndifferentAccess.new
end
|
#set_all_attributes_dirty ⇒ Object
21
22
23
24
25
|
# File 'lib/jsonapi/consumer/helpers/dirty.rb', line 21
def set_all_attributes_dirty
attributes.each do |k, v|
set_attribute_was(k, v)
end
end
|
#set_attribute_was(attr, value) ⇒ Object
32
33
34
35
36
37
38
|
# File 'lib/jsonapi/consumer/helpers/dirty.rb', line 32
def set_attribute_was(attr, value)
begin
value = value.duplicable? ? value.clone : value
changed_attributes[attr] = value
rescue TypeError, NoMethodError
end
end
|