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