lib/oboe/util.rb in oboe-2.6.5.5 vs lib/oboe/util.rb in oboe-2.6.6.1
- old
+ new
@@ -2,49 +2,91 @@
# All rights reserved.
module Oboe
module Util
class << self
- ##
- # method_alias
- #
- # Centralized utility method to alias a method on an arbitrary
- # class or module.
- #
- def method_alias(cls, method, name=nil)
+ def contextual_name(cls)
# Attempt to infer a contextual name if not indicated
#
# For example:
# ::ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter.to_s.split(/::/).last
# => "AbstractMysqlAdapter"
#
begin
- name ||= cls.to_s.split(/::/).last
+ cls.to_s.split(/::/).last
rescue
end
+ end
+ ##
+ # method_alias
+ #
+ # Centralized utility method to alias a method on an arbitrary
+ # class or module.
+ #
+ def method_alias(cls, method, name=nil)
+ name ||= contextual_name(cls)
+
if cls.method_defined? method.to_sym or cls.private_method_defined? method.to_sym
-
+
# Strip '!' or '?' from method if present
safe_method_name = method.to_s.chop if method.to_s =~ /\?$|\!$/
safe_method_name ||= method
without_oboe = "#{safe_method_name}_without_oboe"
with_oboe = "#{safe_method_name}_with_oboe"
-
+
# Only alias if we haven't done so already
- unless cls.method_defined? without_oboe.to_sym or
+ unless cls.method_defined? without_oboe.to_sym or
cls.private_method_defined? without_oboe.to_sym
cls.class_eval do
alias_method without_oboe, "#{method}"
alias_method "#{method}", with_oboe
end
end
else Oboe.logger.warn "[oboe/loading] Couldn't properly instrument #{name}. Partial traces may occur."
end
end
-
+
+ ##
+ # class_method_alias
+ #
+ # Centralized utility method to alias a class method on an arbitrary
+ # class or module
+ #
+ def class_method_alias(cls, method, name=nil)
+ name ||= contextual_name(cls)
+
+ if cls.singleton_methods.include? method.to_sym
+
+ # Strip '!' or '?' from method if present
+ safe_method_name = method.to_s.chop if method.to_s =~ /\?$|\!$/
+ safe_method_name ||= method
+
+ without_oboe = "#{safe_method_name}_without_oboe"
+ with_oboe = "#{safe_method_name}_with_oboe"
+
+ # Only alias if we haven't done so already
+ unless cls.singleton_methods.include? without_oboe.to_sym
+ cls.singleton_class.send(:alias_method, without_oboe, "#{method}")
+ cls.singleton_class.send(:alias_method, "#{method}", with_oboe)
+ end
+ else Oboe.logger.warn "[oboe/loading] Couldn't properly instrument #{name}. Partial traces may occur."
+ end
+ end
+
+ ##
+ # send_extend
+ #
+ # Centralized utility method to send an extend call for an
+ # arbitrary class
+ def send_extend(target_cls, cls)
+ if defined?(target_cls)
+ target_cls.send(:extend, cls)
+ end
+ end
+
##
# send_include
#
# Centralized utility method to send a include call for an
# arbitrary class