Method: ZergXcode::XcodeObject.from
- Defined in:
- lib/zerg_xcode/objects/xcode_object.rb
.from(object_or_hash) ⇒ Object
Deep copy
159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 |
# File 'lib/zerg_xcode/objects/xcode_object.rb', line 159 def self.from(object_or_hash) new_object = case object_or_hash when ZergXcode::XcodeObject object_or_hash.shallow_copy else self.new object_or_hash.dup end object_map = { object_or_hash => new_object } new_object.visit do |object, parent, key, value| case value when Hash, Array next value.dup when ZergXcode::XcodeObject if object_map[value] parent[key] = object_map[value] next false else object_map[value] = value.shallow_copy next object_map[value] end else next true end end end |