Module: DeepClonable::InstanceMethods
- Defined in:
- lib/deep_clonable.rb
Instance Method Summary collapse
- #clone ⇒ Object
-
#deep_vars ⇒ Object
You can override deep_vars in your class to specify which instance_variables should be deep cloned.
- #dup(method = :dup) ⇒ Object
- #freeze ⇒ Object
- #old_freeze ⇒ Object
- #update_vars(vars, method) ⇒ Object
Instance Method Details
#clone ⇒ Object
10 11 12 13 14 15 |
# File 'lib/deep_clonable.rb', line 10 def clone was_frozen = frozen? cloned_object = super.dup cloned_object = yield(cloned_object) if block_given? was_frozen ? cloned_object.freeze : cloned_object end |
#deep_vars ⇒ Object
You can override deep_vars in your class to specify which instance_variables should be deep cloned. As it is, all Arrays and Hashes are deep cloned.
31 32 33 34 35 36 |
# File 'lib/deep_clonable.rb', line 31 def deep_vars instance_variables.select do |var| value = instance_variable_get(var) value.kind_of?(Array) or value.kind_of?(Hash) or value.kind_of?(DeepClonable::InstanceMethods) end end |
#dup(method = :dup) ⇒ Object
17 18 19 20 21 |
# File 'lib/deep_clonable.rb', line 17 def dup(method = :dup) cloned_object = super() cloned_object.update_vars(deep_vars, method) cloned_object end |
#freeze ⇒ Object
25 26 27 |
# File 'lib/deep_clonable.rb', line 25 def freeze dup(:freeze).old_freeze end |
#old_freeze ⇒ Object
23 |
# File 'lib/deep_clonable.rb', line 23 alias old_freeze freeze |
#update_vars(vars, method) ⇒ Object
38 39 40 41 42 43 |
# File 'lib/deep_clonable.rb', line 38 def update_vars(vars, method) vars.each do |var| value = instance_variable_get(var) instance_variable_set(var, value.send(method)) end end |