- 1.0.0 (0)
- 1.1.6 (0)
- 1.2.6 (2)
- 2.0.3 (-2)
- 2.1.0 (0)
- 2.2.1 (0)
- 2.3.8 (0)
- 3.0.0 (38)
- 3.0.9 (-2)
- 3.1.0 (-36)
- 3.2.1 (0)
- 3.2.8 (0)
- 3.2.13 (0)
- 4.0.2 (0)
- 4.1.8 (0)
- 4.2.1 (0)
- 4.2.7 (0)
- 4.2.9 (0)
- 5.0.0.1 (0)
- 5.1.7 (0)
- 5.2.3 (7)
- 6.0.0 (-2)
- 6.1.3.1 (0)
- 6.1.7.7 (0)
- 7.0.0 (0)
- 7.1.3.2 (2)
- 7.1.3.4 (0)
- 7.2.3 (0)
- 8.0.0 (0)
- 8.1.1 (0)
- What's this?
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.
Constants
ALL = Mime::Type.new("*/*", :all, [])
AbstractRequest = ActionController::Request = ActionDispatch::Request
AbstractResponse = ActionController::Response = ActionDispatch::Response
Routing = ActionDispatch::Routing
Integration = ActionDispatch::Integration
IntegrationTest = ActionDispatch::IntegrationTest
PerformanceTest = ActionDispatch::PerformanceTest
N = Integer(ARGV.first)
HashWithIndifferentAccess = ActiveSupport::HashWithIndifferentAccess
MissingSourceFile = LoadError
FRAMEWORKS = %w( activesupport activemodel activerecord activeresource actionpack actionmailer railties )
TIMES = (ENV['N'] || 10000).to_i

