method_source 0.6.0 → 0.6.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -15,7 +15,8 @@ Method comments can also be extracted using the `comment` method.
15
15
 
16
16
  It is written in pure Ruby (no C).
17
17
 
18
- * Some Ruby 1.8 support now available.
18
+ * Some Ruby 1.8 support now available.
19
+ * Support for MRI, RBX, JRuby.
19
20
 
20
21
  `method_source` provides the `source` and `comment` methods to the `Method` and
21
22
  `UnboundMethod` and `Proc` classes.
@@ -60,3 +61,29 @@ Special Thanks
60
61
  [Adam Sanderson](https://github.com/adamsanderson) for `comment` functionality.
61
62
 
62
63
  [Dmitry Elastic](https://github.com/dmitryelastic) for the brilliant Ruby 1.8 `source_location` hack.
64
+
65
+ License
66
+ -------
67
+
68
+ (The MIT License)
69
+
70
+ Copyright (c) 2011 John Mair (banisterfiend)
71
+
72
+ Permission is hereby granted, free of charge, to any person obtaining
73
+ a copy of this software and associated documentation files (the
74
+ 'Software'), to deal in the Software without restriction, including
75
+ without limitation the rights to use, copy, modify, merge, publish,
76
+ distribute, sublicense, and/or sell copies of the Software, and to
77
+ permit persons to whom the Software is furnished to do so, subject to
78
+ the following conditions:
79
+
80
+ The above copyright notice and this permission notice shall be
81
+ included in all copies or substantial portions of the Software.
82
+
83
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
84
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
85
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
86
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
87
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
88
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
89
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -1,31 +1,42 @@
1
1
  module MethodSource
2
2
  module SourceLocation
3
3
  module MethodExtensions
4
+ if defined?(RUBY_ENGINE) && RUBY_ENGINE =~ /jruby/
5
+ require 'java'
4
6
 
5
- def trace_func(event, file, line, id, binding, classname)
6
- return unless event == 'call'
7
- set_trace_func nil
7
+ # JRuby version source_location hack
8
+ # @return [Array] A two element array containing the source location of the method
9
+ def source_location
10
+ to_java.source_location(Thread.current.to_java.getContext())
11
+ end
12
+ else
8
13
 
9
- @file, @line = file, line
10
- raise :found
11
- end
12
14
 
13
- private :trace_func
15
+ def trace_func(event, file, line, id, binding, classname)
16
+ return unless event == 'call'
17
+ set_trace_func nil
18
+
19
+ @file, @line = file, line
20
+ raise :found
21
+ end
14
22
 
15
- # Return the source location of a method for Ruby 1.8.
16
- # @return [Array] A two element array. First element is the
17
- # file, second element is the line in the file where the
18
- # method definition is found.
19
- def source_location
20
- if @file.nil?
21
- args =[*(1..(arity<-1 ? -arity-1 : arity ))]
23
+ private :trace_func
22
24
 
23
- set_trace_func method(:trace_func).to_proc
24
- call(*args) rescue nil
25
- set_trace_func nil
26
- @file = File.expand_path(@file) if @file && File.exist?(File.expand_path(@file))
25
+ # Return the source location of a method for Ruby 1.8.
26
+ # @return [Array] A two element array. First element is the
27
+ # file, second element is the line in the file where the
28
+ # method definition is found.
29
+ def source_location
30
+ if @file.nil?
31
+ args =[*(1..(arity<-1 ? -arity-1 : arity ))]
32
+
33
+ set_trace_func method(:trace_func).to_proc
34
+ call(*args) rescue nil
35
+ set_trace_func nil
36
+ @file = File.expand_path(@file) if @file && File.exist?(File.expand_path(@file))
37
+ end
38
+ return [@file, @line] if File.exist?(@file.to_s)
27
39
  end
28
- return [@file, @line] if File.exist?(@file.to_s)
29
40
  end
30
41
  end
31
42
 
@@ -56,43 +67,54 @@ module MethodSource
56
67
  end
57
68
 
58
69
  module UnboundMethodExtensions
70
+ if defined?(RUBY_ENGINE) && RUBY_ENGINE =~ /jruby/
71
+ require 'java'
59
72
 
60
- # Return the source location of an instance method for Ruby 1.8.
61
- # @return [Array] A two element array. First element is the
62
- # file, second element is the line in the file where the
63
- # method definition is found.
64
- def source_location
65
- klass = case owner
66
- when Class
67
- owner
68
- when Module
69
- method_owner = owner
70
- Class.new { include(method_owner) }
71
- end
72
-
73
- # deal with immediate values
74
- case
75
- when klass == Symbol
76
- return :a.method(name).source_location
77
- when klass == Fixnum
78
- return 0.method(name).source_location
79
- when klass == TrueClass
80
- return true.method(name).source_location
81
- when klass == FalseClass
82
- return false.method(name).source_location
83
- when klass == NilClass
84
- return nil.method(name).source_location
73
+ # JRuby version source_location hack
74
+ # @return [Array] A two element array containing the source location of the method
75
+ def source_location
76
+ to_java.source_location(Thread.current.to_java.getContext())
85
77
  end
78
+ else
79
+
80
+
81
+ # Return the source location of an instance method for Ruby 1.8.
82
+ # @return [Array] A two element array. First element is the
83
+ # file, second element is the line in the file where the
84
+ # method definition is found.
85
+ def source_location
86
+ klass = case owner
87
+ when Class
88
+ owner
89
+ when Module
90
+ method_owner = owner
91
+ Class.new { include(method_owner) }
92
+ end
93
+
94
+ # deal with immediate values
95
+ case
96
+ when klass == Symbol
97
+ return :a.method(name).source_location
98
+ when klass == Fixnum
99
+ return 0.method(name).source_location
100
+ when klass == TrueClass
101
+ return true.method(name).source_location
102
+ when klass == FalseClass
103
+ return false.method(name).source_location
104
+ when klass == NilClass
105
+ return nil.method(name).source_location
106
+ end
86
107
 
87
- begin
88
- klass.allocate.method(name).source_location
89
- rescue TypeError
108
+ begin
109
+ klass.allocate.method(name).source_location
110
+ rescue TypeError
90
111
 
91
- # Assume we are dealing with a Singleton Class:
92
- # 1. Get the instance object
93
- # 2. Forward the source_location lookup to the instance
94
- instance ||= ObjectSpace.each_object(owner).first
95
- instance.method(name).source_location
112
+ # Assume we are dealing with a Singleton Class:
113
+ # 1. Get the instance object
114
+ # 2. Forward the source_location lookup to the instance
115
+ instance ||= ObjectSpace.each_object(owner).first
116
+ instance.method(name).source_location
117
+ end
96
118
  end
97
119
  end
98
120
  end
@@ -1,3 +1,3 @@
1
1
  module MethodSource
2
- VERSION = "0.6.0"
2
+ VERSION = "0.6.5"
3
3
  end
@@ -8,10 +8,12 @@ require "#{direc}/test_helper"
8
8
 
9
9
  describe MethodSource do
10
10
 
11
- describe "emitted warnings" do
12
- it 'should emit no warnings' do
13
- Open4.popen4 'ruby -I lib -rubygems -r"method_source" -W -e "exit"' do |pid,stdin,stdout,stderr|
14
- stderr.read.empty?.should == true
11
+ if !jruby?
12
+ describe "emitted warnings" do
13
+ it 'should emit no warnings' do
14
+ Open4.popen4 'ruby -I lib -rubygems -r"method_source" -W -e "exit"' do |pid,stdin,stdout,stderr|
15
+ stderr.read.empty?.should == true
16
+ end
15
17
  end
16
18
  end
17
19
  end
@@ -81,23 +83,23 @@ describe MethodSource do
81
83
  end
82
84
 
83
85
  # if RUBY_VERSION =~ /1.9/ || is_rbx?
84
- describe "Lambdas and Procs" do
85
- it 'should return source for proc' do
86
- MyProc.source.should == @proc_source
87
- end
86
+ describe "Lambdas and Procs" do
87
+ it 'should return source for proc' do
88
+ MyProc.source.should == @proc_source
89
+ end
88
90
 
89
- it 'should return an empty string if there is no comment' do
90
- MyProc.comment.should == ''
91
- end
91
+ it 'should return an empty string if there is no comment' do
92
+ MyProc.comment.should == ''
93
+ end
92
94
 
93
- it 'should return source for lambda' do
94
- MyLambda.source.should == @lambda_source
95
- end
95
+ it 'should return source for lambda' do
96
+ MyLambda.source.should == @lambda_source
97
+ end
96
98
 
97
- it 'should return comment for lambda' do
98
- MyLambda.comment.should == @lambda_comment
99
- end
99
+ it 'should return comment for lambda' do
100
+ MyLambda.comment.should == @lambda_comment
100
101
  end
102
+ end
101
103
  # end
102
104
  describe "Comment tests" do
103
105
  before do
@@ -2,6 +2,11 @@ def is_rbx?
2
2
  defined?(RUBY_ENGINE) && RUBY_ENGINE =~ /rbx/
3
3
  end
4
4
 
5
+ def jruby?
6
+ defined?(RUBY_ENGINE) && RUBY_ENGINE =~ /jruby/
7
+ end
8
+
9
+
5
10
  module M
6
11
  def hello; :hello_module; end
7
12
  end
metadata CHANGED
@@ -1,59 +1,55 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: method_source
3
- version: !ruby/object:Gem::Version
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.6.5
4
5
  prerelease:
5
- version: 0.6.0
6
6
  platform: ruby
7
- authors:
7
+ authors:
8
8
  - John Mair (banisterfiend)
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
-
13
- date: 2011-06-09 00:00:00 Z
14
- dependencies:
15
- - !ruby/object:Gem::Dependency
12
+ date: 2011-09-07 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
16
15
  name: ruby_parser
17
- prerelease: false
18
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: &70251253612220 !ruby/object:Gem::Requirement
19
17
  none: false
20
- requirements:
21
- - - ">="
22
- - !ruby/object:Gem::Version
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
23
21
  version: 2.0.5
24
22
  type: :runtime
25
- version_requirements: *id001
26
- - !ruby/object:Gem::Dependency
27
- name: bacon
28
23
  prerelease: false
29
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: *70251253612220
25
+ - !ruby/object:Gem::Dependency
26
+ name: bacon
27
+ requirement: &70251253611520 !ruby/object:Gem::Requirement
30
28
  none: false
31
- requirements:
32
- - - ">="
33
- - !ruby/object:Gem::Version
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
34
32
  version: 1.1.0
35
33
  type: :development
36
- version_requirements: *id002
37
- - !ruby/object:Gem::Dependency
38
- name: open4
39
34
  prerelease: false
40
- requirement: &id003 !ruby/object:Gem::Requirement
35
+ version_requirements: *70251253611520
36
+ - !ruby/object:Gem::Dependency
37
+ name: open4
38
+ requirement: &70251253610760 !ruby/object:Gem::Requirement
41
39
  none: false
42
- requirements:
40
+ requirements:
43
41
  - - ~>
44
- - !ruby/object:Gem::Version
42
+ - !ruby/object:Gem::Version
45
43
  version: 1.0.1
46
44
  type: :development
47
- version_requirements: *id003
45
+ prerelease: false
46
+ version_requirements: *70251253610760
48
47
  description: retrieve the sourcecode for a method
49
48
  email: jrmair@gmail.com
50
49
  executables: []
51
-
52
50
  extensions: []
53
-
54
51
  extra_rdoc_files: []
55
-
56
- files:
52
+ files:
57
53
  - lib/method_source/source_location.rb
58
54
  - lib/method_source/version.rb
59
55
  - lib/method_source.rb
@@ -64,30 +60,26 @@ files:
64
60
  - .gemtest
65
61
  homepage: http://banisterfiend.wordpress.com
66
62
  licenses: []
67
-
68
63
  post_install_message:
69
64
  rdoc_options: []
70
-
71
- require_paths:
65
+ require_paths:
72
66
  - lib
73
- required_ruby_version: !ruby/object:Gem::Requirement
67
+ required_ruby_version: !ruby/object:Gem::Requirement
74
68
  none: false
75
- requirements:
76
- - - ">="
77
- - !ruby/object:Gem::Version
78
- version: "0"
79
- required_rubygems_version: !ruby/object:Gem::Requirement
69
+ requirements:
70
+ - - ! '>='
71
+ - !ruby/object:Gem::Version
72
+ version: '0'
73
+ required_rubygems_version: !ruby/object:Gem::Requirement
80
74
  none: false
81
- requirements:
82
- - - ">="
83
- - !ruby/object:Gem::Version
84
- version: "0"
75
+ requirements:
76
+ - - ! '>='
77
+ - !ruby/object:Gem::Version
78
+ version: '0'
85
79
  requirements: []
86
-
87
80
  rubyforge_project:
88
- rubygems_version: 1.7.2
81
+ rubygems_version: 1.8.6
89
82
  signing_key:
90
83
  specification_version: 3
91
84
  summary: retrieve the sourcecode for a method
92
85
  test_files: []
93
-