Sha256: d6fc3a03c5ef5004e37fe29d0da576a80480aa274d96ddcad757d1bbdd87c95b
Contents?: true
Size: 1.27 KB
Versions: 1
Compression:
Stored size: 1.27 KB
Contents
# Most objects are cloneable, but not all. For example you can't dup +nil+: # # nil.dup # => TypeError: can't dup NilClass # # Classes may signal their instances are not duplicable removing +dup+/+clone+ # or raising exceptions from them. So, to dup an arbitrary object you normally # use an optimistic approach and are ready to catch an exception, say: # # arbitrary_object.dup rescue object # # Rails dups objects in a few critical spots where they are not that arbitrary. # That rescue is very expensive (like 40 times slower than a predicate), and it # is often triggered. # # That's why we hardcode the following cases and check duplicable? instead of # using that rescue idiom. class Object # Can you safely .dup this object? # False for nil, false, true, symbols, numbers, class and module objects; true otherwise. def duplicable? true end end class NilClass #:nodoc: def duplicable? false end end class FalseClass #:nodoc: def duplicable? false end end class TrueClass #:nodoc: def duplicable? false end end class Symbol #:nodoc: def duplicable? false end end class Numeric #:nodoc: def duplicable? false end end class Class #:nodoc: def duplicable? false end end class Module #:nodoc: def duplicable? false end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
cassandra_mapper-0.0.1 | lib/cassandra_mapper/core_ext/object/duplicable.rb |