mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
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
This commit is contained in:
parent
3c6f35dc03
commit
44f785357c
1 changed files with 7 additions and 2 deletions
|
@ -351,8 +351,13 @@ module Rails
|
|||
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
|
||||
|
|
Loading…
Reference in a new issue