27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
# File 'app/helpers/kirgudu_base/models/mergeable_elements.rb', line 27
def merge(source_element, options = {})
options ||= {}
if source_element
if self == source_element
raise "MERGE ERROR: Cannot Merge Element to Self"
end
unless self.class == source_element.class
raise "MERGE ERROR: Cannot Merge Elements of Different Classes. Self: #{}"
end
self.class.get_mergeable_attributes.each do |mergeable_attribute|
self_value = self.send(mergeable_attribute)
source_value = source_element.send(mergeable_attribute)
unless self_value.nil? && source_value.nil?
if self_value.nil?
if [String, Symbol, Integer, Float].include?(source_value.class)
self.send("#{mergeable_attribute}=", source_value)
else
value_to_set = source_value.clone
end if source_value
else
if options[:force] == true
value_to_set = source_value
if source_value.is_a?(Array)
value_to_set = []
source_value.each do |array_element|
if [String, Symbol, Integer, Float].include?(array_element.class)
value_to_set << array_element
elsif array_element.respond_to?(:merge)
cloned_element = array_element.class.new
cloned_element.merge(array_element)
value_to_set << cloned_element
end
end
end
self.send("#{mergeable_attribute}=", value_to_set) if value_to_set
else
if source_value
if self_value.class != source_value.class
raise "MERGE ERROR: Attribute #{mergeable_attribute}. Source Entry is of different type."
end
self.send("#{mergeable_attribute}=", source_value) unless self_value
end
end
end
end
end
private
def get_value_for_merge(source_value, attribute, force)
end
end
end
|