method_source 0.9.2 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
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