method_source 0.9.2 → 1.1.0
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.
- checksums.yaml +5 -5
- data/CHANGELOG.md +15 -0
- data/Gemfile +4 -0
- data/LICENSE +1 -4
- data/README.markdown +12 -2
- data/lib/method_source/code_helpers.rb +4 -4
- data/lib/method_source/version.rb +1 -1
- data/lib/method_source.rb +36 -0
- data/method_source.gemspec +4 -20
- data/spec/method_source_spec.rb +15 -1
- data/spec/spec_helper.rb +8 -2
- metadata +10 -38
- data/.travis.yml +0 -31
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: e936459f65ba807442d464e51a8d70421850fab753f17df974ffc28e9d414983
|
4
|
+
data.tar.gz: 977611dfab90d749a6001794295428fe05becc43d878db7abdc6014ae589c17a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9021fc9ca214aebf3337563b544137c8a80fb30872222f8334f104a3b6a9ef5ce37f7aed8caabb1061f63066afc16fc6c9a87f384f2279dec7fc9b26d312595f
|
7
|
+
data.tar.gz: 965fc6d9f5df92dee0d8d300e5e7b4942395c9e17d120b727a82ee2082d00c7ca4edbed9689b332eed0007e0ac128322bda317464800c5b1f089961bacdeaa43
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
# method_source changelog
|
2
|
+
|
3
|
+
### master
|
4
|
+
|
5
|
+
### [v1.1.0][v1.1.0] (April 15, 2024)
|
6
|
+
|
7
|
+
- Added `MethodSource.clear_cache`
|
8
|
+
- Added support for `RUBYOPT="--enable-frozen-string-literal"`
|
9
|
+
|
10
|
+
### [v1.0.0][v1.0.0] (March 19, 2020)
|
11
|
+
|
12
|
+
- Added Ruby 2.7 support
|
13
|
+
|
14
|
+
[v1.0.0]: https://github.com/banister/method_source/releases/tag/v1.0.0
|
15
|
+
[v1.1.0]: https://github.com/banister/method_source/releases/tag/v1.1.0
|
data/Gemfile
CHANGED
data/LICENSE
CHANGED
data/README.markdown
CHANGED
@@ -1,6 +1,8 @@
|
|
1
|
-
method_source
|
1
|
+
method_source
|
2
2
|
=============
|
3
3
|
|
4
|
+
[](https://circleci.com/gh/banister/method_source)
|
5
|
+
|
4
6
|
(C) John Mair (banisterfiend) 2011
|
5
7
|
|
6
8
|
_retrieve the sourcecode for a method_
|
@@ -22,7 +24,7 @@ It is written in pure Ruby (no C).
|
|
22
24
|
`UnboundMethod` and `Proc` classes.
|
23
25
|
|
24
26
|
* Install the [gem](https://rubygems.org/gems/method_source): `gem install method_source`
|
25
|
-
* Read the [documentation](
|
27
|
+
* Read the [documentation](https://www.rubydoc.info/github/banister/method_source/master)
|
26
28
|
* See the [source code](http://github.com/banister/method_source)
|
27
29
|
|
28
30
|
Example: display method source
|
@@ -48,6 +50,14 @@ Example: display method comments
|
|
48
50
|
# Merges the elements of the given enumerable object to the set and
|
49
51
|
# returns self.
|
50
52
|
|
53
|
+
Example: display module/class comments
|
54
|
+
--------------------------------------
|
55
|
+
|
56
|
+
MethodSource::MethodExtensions.method(:included).module_comment
|
57
|
+
# =>
|
58
|
+
# This module is to be included by `Method` and `UnboundMethod` and
|
59
|
+
# provides the `#source` functionality
|
60
|
+
|
51
61
|
Limitations:
|
52
62
|
------------
|
53
63
|
|
@@ -90,7 +90,7 @@ module MethodSource
|
|
90
90
|
# @return [String] a valid ruby expression
|
91
91
|
# @raise [SyntaxError]
|
92
92
|
def extract_first_expression(lines, consume=0, &block)
|
93
|
-
code = consume.zero? ? "" : lines.slice!(0..(consume - 1)).join
|
93
|
+
code = consume.zero? ? +"" : lines.slice!(0..(consume - 1)).join
|
94
94
|
|
95
95
|
lines.each do |v|
|
96
96
|
code << v
|
@@ -104,7 +104,7 @@ module MethodSource
|
|
104
104
|
# @param [Array<String>] lines
|
105
105
|
# @return [String]
|
106
106
|
def extract_last_comment(lines)
|
107
|
-
buffer = ""
|
107
|
+
buffer = +""
|
108
108
|
|
109
109
|
lines.each do |line|
|
110
110
|
# Add any line that is a valid ruby comment,
|
@@ -112,7 +112,7 @@ module MethodSource
|
|
112
112
|
if (line =~ /^\s*#/) || (line =~ /^\s*$/)
|
113
113
|
buffer << line.lstrip
|
114
114
|
else
|
115
|
-
buffer.
|
115
|
+
buffer.clear
|
116
116
|
end
|
117
117
|
end
|
118
118
|
|
@@ -125,7 +125,7 @@ module MethodSource
|
|
125
125
|
GENERIC_REGEXPS = [
|
126
126
|
/unexpected (\$end|end-of-file|end-of-input|END_OF_FILE)/, # mri, jruby, ruby-2.0, ironruby
|
127
127
|
/embedded document meets end of file/, # =begin
|
128
|
-
/unterminated (quoted string|string|regexp) meets end of file/, # "quoted string" is ironruby
|
128
|
+
/unterminated (quoted string|string|regexp|list) meets end of file/, # "quoted string" is ironruby
|
129
129
|
/can't find string ".*" anywhere before EOF/, # rbx and jruby
|
130
130
|
/missing 'end' for/, /expecting kWHEN/ # rbx
|
131
131
|
]
|
data/lib/method_source.rb
CHANGED
@@ -55,6 +55,11 @@ module MethodSource
|
|
55
55
|
raise SourceNotFoundError, "Could not load source for #{name}: #{e.message}"
|
56
56
|
end
|
57
57
|
|
58
|
+
# Clear cache.
|
59
|
+
def self.clear_cache
|
60
|
+
@lines_for_file = {}
|
61
|
+
end
|
62
|
+
|
58
63
|
# @deprecated — use MethodSource::CodeHelpers#complete_expression?
|
59
64
|
def self.valid_expression?(str)
|
60
65
|
complete_expression?(str)
|
@@ -121,6 +126,37 @@ module MethodSource
|
|
121
126
|
def comment
|
122
127
|
MethodSource.comment_helper(source_location, defined?(name) ? name : inspect)
|
123
128
|
end
|
129
|
+
|
130
|
+
# Return the comments associated with the method class/module.
|
131
|
+
# @return [String] The method's comments as a string
|
132
|
+
# @raise SourceNotFoundException
|
133
|
+
#
|
134
|
+
# @example
|
135
|
+
# MethodSource::MethodExtensions.method(:included).module_comment
|
136
|
+
# =>
|
137
|
+
# # This module is to be included by `Method` and `UnboundMethod` and
|
138
|
+
# # provides the `#source` functionality
|
139
|
+
def class_comment
|
140
|
+
if self.respond_to?(:receiver)
|
141
|
+
class_inst_or_module = self.receiver
|
142
|
+
elsif self.respond_to?(:owner)
|
143
|
+
class_inst_or_module = self.owner
|
144
|
+
else
|
145
|
+
return comment
|
146
|
+
end
|
147
|
+
|
148
|
+
if class_inst_or_module.respond_to?(:name)
|
149
|
+
const_name = class_inst_or_module.name
|
150
|
+
else
|
151
|
+
const_name = class_inst_or_module.class.name
|
152
|
+
class_inst_or_module = class_inst_or_module.class
|
153
|
+
end
|
154
|
+
|
155
|
+
location = class_inst_or_module.const_source_location(const_name)
|
156
|
+
|
157
|
+
MethodSource.comment_helper(location, defined?(name) ? name : inspect)
|
158
|
+
end
|
159
|
+
alias module_comment class_comment
|
124
160
|
end
|
125
161
|
end
|
126
162
|
|
data/method_source.gemspec
CHANGED
@@ -1,35 +1,19 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
# stub: method_source 0.9.2 ruby lib
|
3
2
|
|
4
3
|
Gem::Specification.new do |s|
|
5
4
|
s.name = "method_source".freeze
|
6
|
-
s.version = "
|
5
|
+
s.version = "1.1.0"
|
7
6
|
|
8
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
|
9
8
|
s.require_paths = ["lib".freeze]
|
10
9
|
s.authors = ["John Mair (banisterfiend)".freeze]
|
11
|
-
s.date = "
|
10
|
+
s.date = "2024-04-15"
|
12
11
|
s.description = "retrieve the sourcecode for a method".freeze
|
13
12
|
s.email = "jrmair@gmail.com".freeze
|
14
|
-
s.files = [".
|
13
|
+
s.files = ["CHANGELOG.md".freeze, ".gemtest".freeze, ".yardopts".freeze, "Gemfile".freeze, "LICENSE".freeze, "README.markdown".freeze, "Rakefile".freeze, "lib/method_source.rb".freeze, "lib/method_source/code_helpers.rb".freeze, "lib/method_source/source_location.rb".freeze, "lib/method_source/version.rb".freeze, "method_source.gemspec".freeze, "spec/method_source/code_helpers_spec.rb".freeze, "spec/method_source_spec.rb".freeze, "spec/spec_helper.rb".freeze]
|
15
14
|
s.homepage = "http://banisterfiend.wordpress.com".freeze
|
15
|
+
s.metadata["changelog_uri"] = "https://github.com/banister/method_source/blob/master/CHANGELOG.md".freeze
|
16
16
|
s.licenses = ["MIT".freeze]
|
17
|
-
s.rubygems_version = "2.7.6".freeze
|
18
17
|
s.summary = "retrieve the sourcecode for a method".freeze
|
19
18
|
s.test_files = ["spec/method_source/code_helpers_spec.rb".freeze, "spec/method_source_spec.rb".freeze, "spec/spec_helper.rb".freeze]
|
20
|
-
|
21
|
-
if s.respond_to? :specification_version then
|
22
|
-
s.specification_version = 4
|
23
|
-
|
24
|
-
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
25
|
-
s.add_development_dependency(%q<rspec>.freeze, ["~> 3.6"])
|
26
|
-
s.add_development_dependency(%q<rake>.freeze, ["~> 0.9"])
|
27
|
-
else
|
28
|
-
s.add_dependency(%q<rspec>.freeze, ["~> 3.6"])
|
29
|
-
s.add_dependency(%q<rake>.freeze, ["~> 0.9"])
|
30
|
-
end
|
31
|
-
else
|
32
|
-
s.add_dependency(%q<rspec>.freeze, ["~> 3.6"])
|
33
|
-
s.add_dependency(%q<rake>.freeze, ["~> 0.9"])
|
34
|
-
end
|
35
19
|
end
|
data/spec/method_source_spec.rb
CHANGED
@@ -30,10 +30,12 @@ describe MethodSource do
|
|
30
30
|
@hello_source = "def hello; :hello; end\n"
|
31
31
|
@hello_comment = "# A comment for hello\n# It spans two lines and is indented by 2 spaces\n"
|
32
32
|
@lambda_comment = "# This is a comment for MyLambda\n"
|
33
|
+
@module_comment = "# This is a comment for module\n"
|
34
|
+
@class_comment = "# This is a comment for class\n"
|
33
35
|
@lambda_source = "MyLambda = lambda { :lambda }\n"
|
34
36
|
@proc_source = "MyProc = Proc.new { :proc }\n"
|
35
37
|
@hello_instance_evaled_source = " def hello_\#{name}(*args)\n send_mesg(:\#{name}, *args)\n end\n"
|
36
|
-
@hello_instance_evaled_source_2 = " def \#{name}_two()\n if
|
38
|
+
@hello_instance_evaled_source_2 = " def \#{name}_two()\n if 40 + 4\n 45\n end\n end\n"
|
37
39
|
@hello_class_evaled_source = " def hello_\#{name}(*args)\n send_mesg(:\#{name}, *args)\n end\n"
|
38
40
|
@hi_module_evaled_source = " def hi_\#{name}\n @var = \#{name}\n end\n"
|
39
41
|
end
|
@@ -109,6 +111,18 @@ describe MethodSource do
|
|
109
111
|
it 'should return comment for lambda' do
|
110
112
|
expect(MyLambda.comment).to eq(@lambda_comment)
|
111
113
|
end
|
114
|
+
|
115
|
+
it 'should return comment for module' do
|
116
|
+
expect(M.instance_method(:hello).module_comment).to eq(@module_comment)
|
117
|
+
end
|
118
|
+
|
119
|
+
it 'should return comment for class' do
|
120
|
+
expect(C.method(:hello).class_comment).to eq(@class_comment)
|
121
|
+
end
|
122
|
+
|
123
|
+
it 'should return comment for class instance' do
|
124
|
+
expect(C.new.method(:hello).class_comment).to eq(@class_comment)
|
125
|
+
end
|
112
126
|
end
|
113
127
|
# end
|
114
128
|
describe "Comment tests" do
|
data/spec/spec_helper.rb
CHANGED
@@ -10,10 +10,16 @@ def jruby?
|
|
10
10
|
end
|
11
11
|
|
12
12
|
|
13
|
+
# This is a comment for module
|
13
14
|
module M
|
14
15
|
def hello; :hello_module; end
|
15
16
|
end
|
16
17
|
|
18
|
+
# This is a comment for class
|
19
|
+
class C
|
20
|
+
include M
|
21
|
+
end
|
22
|
+
|
17
23
|
$o = Object.new
|
18
24
|
def $o.hello; :hello_singleton; end
|
19
25
|
|
@@ -82,14 +88,14 @@ METHOD
|
|
82
88
|
M.instance_eval <<EOF, __FILE__, __LINE__ + 1
|
83
89
|
|
84
90
|
def #{name}_one()
|
85
|
-
if
|
91
|
+
if 40 + 3
|
86
92
|
44
|
87
93
|
end
|
88
94
|
end
|
89
95
|
|
90
96
|
|
91
97
|
def #{name}_two()
|
92
|
-
if
|
98
|
+
if 40 + 4
|
93
99
|
45
|
94
100
|
end
|
95
101
|
end
|
metadata
CHANGED
@@ -1,43 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: method_source
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Mair (banisterfiend)
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
12
|
-
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: rspec
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - "~>"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '3.6'
|
20
|
-
type: :development
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - "~>"
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '3.6'
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: rake
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - "~>"
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '0.9'
|
34
|
-
type: :development
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - "~>"
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '0.9'
|
11
|
+
date: 2024-04-15 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
41
13
|
description: retrieve the sourcecode for a method
|
42
14
|
email: jrmair@gmail.com
|
43
15
|
executables: []
|
@@ -45,8 +17,8 @@ extensions: []
|
|
45
17
|
extra_rdoc_files: []
|
46
18
|
files:
|
47
19
|
- ".gemtest"
|
48
|
-
- ".travis.yml"
|
49
20
|
- ".yardopts"
|
21
|
+
- CHANGELOG.md
|
50
22
|
- Gemfile
|
51
23
|
- LICENSE
|
52
24
|
- README.markdown
|
@@ -62,8 +34,9 @@ files:
|
|
62
34
|
homepage: http://banisterfiend.wordpress.com
|
63
35
|
licenses:
|
64
36
|
- MIT
|
65
|
-
metadata:
|
66
|
-
|
37
|
+
metadata:
|
38
|
+
changelog_uri: https://github.com/banister/method_source/blob/master/CHANGELOG.md
|
39
|
+
post_install_message:
|
67
40
|
rdoc_options: []
|
68
41
|
require_paths:
|
69
42
|
- lib
|
@@ -78,9 +51,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
78
51
|
- !ruby/object:Gem::Version
|
79
52
|
version: '0'
|
80
53
|
requirements: []
|
81
|
-
|
82
|
-
|
83
|
-
signing_key:
|
54
|
+
rubygems_version: 3.5.3
|
55
|
+
signing_key:
|
84
56
|
specification_version: 4
|
85
57
|
summary: retrieve the sourcecode for a method
|
86
58
|
test_files:
|
data/.travis.yml
DELETED
@@ -1,31 +0,0 @@
|
|
1
|
-
# To use rbx environment.
|
2
|
-
dist: trusty
|
3
|
-
bundler_args: "--verbose"
|
4
|
-
before_install:
|
5
|
-
- gem update --system
|
6
|
-
- which bundle || gem install bundler
|
7
|
-
- gem update bundler
|
8
|
-
rvm:
|
9
|
-
- 1.8.7
|
10
|
-
- 1.9.3
|
11
|
-
- ree
|
12
|
-
- rbx-3
|
13
|
-
- jruby
|
14
|
-
- jruby-head
|
15
|
-
- 2.0.0
|
16
|
-
- 2.1
|
17
|
-
- 2.2
|
18
|
-
- 2.3
|
19
|
-
- 2.4.2
|
20
|
-
- ruby-head
|
21
|
-
matrix:
|
22
|
-
allow_failures:
|
23
|
-
- rvm: ruby-head
|
24
|
-
- rvm: jruby
|
25
|
-
- rvm: jruby-head
|
26
|
-
- rvm: rbx-3
|
27
|
-
fast_finish: true
|
28
|
-
notifications:
|
29
|
-
irc: "irc.freenode.org#pry"
|
30
|
-
recipients:
|
31
|
-
- jrmair@gmail.com
|