Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Use Ruby 2.0 caller_locations instead of caller if available

* we no more have to manipulate the each caller strings by ourselves using caller_locations

* caller_locations runs slightly faster, and creates less objects than good old caller
Benchmark (loading an Engine 1000 times):
  caller: 262.89 ms
  caller_locations: 186.068 ms
  • Loading branch information...
commit 5374960a04d7333ced9b6c4ca36b708af498b1ca 1 parent ad6adcb
@amatsuda amatsuda authored arunagw committed
Showing with 7 additions and 2 deletions.
  1. +7 −2 railties/lib/rails/engine.rb
View
9 railties/lib/rails/engine.rb
@@ -351,8 +351,13 @@ def inherited(base)
Rails::Railtie::Configuration.eager_load_namespaces << base
base.called_from = begin
- # Remove the line number from backtraces making sure we don't leave anything behind
- call_stack = caller.map { |p| p.sub(/:\d+.*/, '') }
+ call_stack = if Kernel.respond_to?(:caller_locations)
+ caller_locations.map(&:path)
+ else
+ # Remove the line number from backtraces making sure we don't leave anything behind
+ caller.map { |p| p.sub(/:\d+.*/, '') }
+ end
+
File.dirname(call_stack.detect { |p| p !~ %r[railties[\w.-]*/lib/rails|rack[\w.-]*/lib/rack] })
end
end
Please sign in to comment.
Something went wrong with that request. Please try again.