Sha256: 811319e3156eda72b5b4cad14dd3c2842153aff1e15fa5010534f782fc141ace
Contents?: true
Size: 1.32 KB
Versions: 3
Compression:
Stored size: 1.32 KB
Contents
require 'tins/deep_const_get' module Utils module Xt module SourceLocationExtension include Tins::DeepConstGet CLASS_METHOD_REGEXP = /\A([A-Z][\w:]+)([#.])([\w!?]+)/ FILE_LINENUMBER_REGEXP = /\A\s*([^:]+):(\d+)/ def source_location filename = nil linenumber = nil if respond_to?(:to_str) string = to_str case when string =~ FILE_LINENUMBER_REGEXP && File.exist?($1) filename = $1 linenumber = $2.to_i when string =~ CLASS_METHOD_REGEXP && !File.exist?(string) klassname = $1 method_kind = $2 == '#' ? :instance_method : :method methodname = $3 filename, linenumber = deep_const_get(klassname).__send__(method_kind, methodname).source_location else filename = string end else filename = to_s end array = linenumber ? [ filename, linenumber ] : [ filename, 1 ] array_singleton_class = class << array; self; end array_singleton_class.instance_eval do define_method(:filename) { filename } define_method(:linenumber) { linenumber } define_method(:to_s) { [ filename, linenumber ].compact * ':' } end array end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
utils-0.9.0 | lib/utils/xt/source_location_extension.rb |
utils-0.2.4 | lib/utils/xt/source_location_extension.rb |
utils-0.2.3 | lib/utils/xt/source_location_extension.rb |