Module: KirguduBase::Models::CloneableElements

Defined in:
app/helpers/kirgudu_base/models/cloneable_elements.rb

Class Method Summary collapse

Class Method Details

.clone(source_element) ⇒ Object



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
# File 'app/helpers/kirgudu_base/models/cloneable_elements.rb', line 4

def self.clone(source_element)
	cloned_element = nil
	if source_element
		if [String, Boolean, Symbol, Integer, Float, Rational].include?(source_element.class)
			cloned_element = source_element
		elsif source_element.is_a?(Hash)
			source_element.each_pair
		elsif source_element.is_a?(Array)


		elsif source_element.class.respond_to?(:get_mergeable_attributes)
			source_element.class.get_mergeable_attributes.each do |cloneable_attribute|
				cloned_element = source_element.new
				value = source_element.send("#{cloneable_attribute}")

				if value
					if [String, Boolean, Symbol, Integer, Float, Rational].include?(value.class)
						cloned_element.send("#{cloneable_attribute}=", value)
					elsif value.is_a?(Hash)
						value_hash = {}
						value.each_pair do |value_key, value_data|
							value_hash[value_key] = ::KirguduBase::Models::CloneableElements.clone(value_data)
						end
					elsif value.is_a?(Array)
						value_array = []
						value.each do |value_data|
							value_array << ::KirguduBase::Models::CloneableElements.clone(value_data)
						end
					end
				end
			end
		end
	end
	cloned_element
end