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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: a028cf570a878212656d23cea883b8c951d1faba
4
- data.tar.gz: 3470552886d0ea7f7ca782dc3d3dee9aed645776
2
+ SHA256:
3
+ metadata.gz: e936459f65ba807442d464e51a8d70421850fab753f17df974ffc28e9d414983
4
+ data.tar.gz: 977611dfab90d749a6001794295428fe05becc43d878db7abdc6014ae589c17a
5
5
  SHA512:
6
- metadata.gz: 587e875c403107b65ec2148565a1fef1c95e6a4426f691f03750382ba10c894f165818e30c52a69fe07ccdf0cec4290f966a382b107bed9e093efd8b7f13f288
7
- data.tar.gz: 3ca93afc377f2f53da696f326251688c9cc45956027cdefca84df8ac37c90be26d31ba60405c8cd0d001e0841999286040a6941acecb679671fa850266a093a1
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
@@ -1,2 +1,6 @@
1
1
  source 'https://rubygems.org'
2
+
2
3
  gemspec
4
+
5
+ gem "rake"
6
+ gem "rspec"
data/LICENSE CHANGED
@@ -1,7 +1,4 @@
1
- License
2
- -------
3
-
4
- (The MIT License)
1
+ MIT License
5
2
 
6
3
  Copyright (c) 2011 John Mair (banisterfiend)
7
4
 
data/README.markdown CHANGED
@@ -1,6 +1,8 @@
1
- method_source [![Build Status](https://travis-ci.org/banister/method_source.svg?branch=master)](https://travis-ci.org/banister/method_source)
1
+ method_source
2
2
  =============
3
3
 
4
+ [![Circle Build Status](https://circleci.com/gh/banister/method_source.svg?style=shield)](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](http://rdoc.info/github/banister/method_source/master/file/README.markdown)
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.replace("")
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
  ]
@@ -1,3 +1,3 @@
1
1
  module MethodSource
2
- VERSION = '0.9.2'.freeze
2
+ VERSION = '1.1.0'.freeze
3
3
  end
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
 
@@ -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 = "0.9.2"
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 = "2018-11-12"
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 = [".gemtest".freeze, ".travis.yml".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]
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
@@ -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 44\n 45\n end\n end\n"
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 43
91
+ if 40 + 3
86
92
  44
87
93
  end
88
94
  end
89
95
 
90
96
 
91
97
  def #{name}_two()
92
- if 44
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: 0.9.2
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: 2018-11-12 00:00:00.000000000 Z
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
- post_install_message:
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
- rubyforge_project:
82
- rubygems_version: 2.6.13
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