module MethodSource::MethodExtensions
This module is to be included by ‘Method` and `UnboundMethod` and provides the `#source` functionality
Public Class Methods
Source
# File lib/method_source.rb, line 84 def self.included(klass) if klass.method_defined?(:source) && Object.const_defined?(:RUBY_ENGINE) && RUBY_ENGINE =~ /rbx/ klass.class_eval do orig_source = instance_method(:source) define_method(:source) do begin super rescue orig_source.bind(self).call end end end end end
We use the included hook to patch Method#source
on rubinius. We need to use the included hook as Rubinius defines a ‘source` on Method
so including a module will have no effect (as it’s higher up the MRO). @param [Class] klass The class that includes the module.
Public Instance Methods
Source
# File lib/method_source.rb, line 139 def class_comment if self.respond_to?(:receiver) class_inst_or_module = self.receiver elsif self.respond_to?(:owner) class_inst_or_module = self.owner else return comment end if class_inst_or_module.respond_to?(:name) const_name = class_inst_or_module.name else const_name = class_inst_or_module.class.name class_inst_or_module = class_inst_or_module.class end location = class_inst_or_module.const_source_location(const_name) MethodSource.comment_helper(location, defined?(name) ? name : inspect) end
Return the comments associated with the method class/module. @return [String] The method’s comments as a string @raise SourceNotFoundException
@example
MethodSource::MethodExtensions.method(:included).module_comment => # This module is to be included by `Method` and `UnboundMethod` and # provides the `#source` functionality
Source
# File lib/method_source.rb, line 126 def comment MethodSource.comment_helper(source_location, defined?(name) ? name : inspect) end
Return the comments associated with the method as a string. @return [String] The method’s comments as a string @raise SourceNotFoundException
@example
Set.instance_method(:clear).comment.display => # Removes all elements and returns self.
Source
# File lib/method_source.rb, line 114 def source MethodSource.source_helper(source_location, defined?(name) ? name : inspect) end
Return the sourcecode for the method as a string @return [String] The method sourcecode as a string @raise SourceNotFoundException
@example
Set.instance_method(:clear).source.display => def clear @hash.clear self end