method_source 1.0.0 → 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
2
  SHA256:
3
- metadata.gz: fe83abc213aa091b0cd4450c6c1d58bff6a9160aba41afc3641ef4424428d0eb
4
- data.tar.gz: 46c108059ac1d6f7967c44e20104bfa5b95a4e15ba434ec007a7d3da4f268a9a
3
+ metadata.gz: e936459f65ba807442d464e51a8d70421850fab753f17df974ffc28e9d414983
4
+ data.tar.gz: 977611dfab90d749a6001794295428fe05becc43d878db7abdc6014ae589c17a
5
5
  SHA512:
6
- metadata.gz: 3b386bd1c4d7ab90649bacf152c42bf92ad8c2ebe6654b58a18dfc0fb70180affa10a151958280a7aa91cf7eb3b443f6c9806d69bb1849694aac5db194041a6d
7
- data.tar.gz: 2075af843b4a1043e6eaa2f68a09e3d02fcc1368c78a8cad830254fda5a6e014c384c61e5fa77b54a4a717a7b8507bed7fc878849ce1cfbe4fe2a137e4f7f7d2
6
+ metadata.gz: 9021fc9ca214aebf3337563b544137c8a80fb30872222f8334f104a3b6a9ef5ce37f7aed8caabb1061f63066afc16fc6c9a87f384f2279dec7fc9b26d312595f
7
+ data.tar.gz: 965fc6d9f5df92dee0d8d300e5e7b4942395c9e17d120b727a82ee2082d00c7ca4edbed9689b332eed0007e0ac128322bda317464800c5b1f089961bacdeaa43
data/CHANGELOG.md CHANGED
@@ -1,10 +1,15 @@
1
- method_source changelog
2
- =======================
1
+ # method_source changelog
3
2
 
4
3
  ### master
5
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
+
6
10
  ### [v1.0.0][v1.0.0] (March 19, 2020)
7
11
 
8
- * Added Ruby 2.7 support
12
+ - Added Ruby 2.7 support
9
13
 
10
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/README.markdown CHANGED
@@ -50,6 +50,14 @@ Example: display method comments
50
50
  # Merges the elements of the given enumerable object to the set and
51
51
  # returns self.
52
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
+
53
61
  Limitations:
54
62
  ------------
55
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
 
@@ -1,3 +1,3 @@
1
1
  module MethodSource
2
- VERSION = '1.0.0'.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
 
@@ -2,32 +2,18 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "method_source".freeze
5
- s.version = "1.0.0"
5
+ s.version = "1.1.0"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
8
8
  s.require_paths = ["lib".freeze]
9
9
  s.authors = ["John Mair (banisterfiend)".freeze]
10
- s.date = "2020-03-19"
10
+ s.date = "2024-04-15"
11
11
  s.description = "retrieve the sourcecode for a method".freeze
12
12
  s.email = "jrmair@gmail.com".freeze
13
- s.files = ["CHANGELOG.md".freeze, ".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]
14
14
  s.homepage = "http://banisterfiend.wordpress.com".freeze
15
+ s.metadata["changelog_uri"] = "https://github.com/banister/method_source/blob/master/CHANGELOG.md".freeze
15
16
  s.licenses = ["MIT".freeze]
16
17
  s.summary = "retrieve the sourcecode for a method".freeze
17
18
  s.test_files = ["spec/method_source/code_helpers_spec.rb".freeze, "spec/method_source_spec.rb".freeze, "spec/spec_helper.rb".freeze]
18
-
19
- if s.respond_to? :specification_version then
20
- s.specification_version = 4
21
-
22
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
23
- s.add_development_dependency(%q<rspec>.freeze, ["~> 3.6"])
24
- s.add_development_dependency(%q<rake>.freeze, ["~> 0.9"])
25
- else
26
- s.add_dependency(%q<rspec>.freeze, ["~> 3.6"])
27
- s.add_dependency(%q<rake>.freeze, ["~> 0.9"])
28
- end
29
- else
30
- s.add_dependency(%q<rspec>.freeze, ["~> 3.6"])
31
- s.add_dependency(%q<rake>.freeze, ["~> 0.9"])
32
- end
33
19
  end
@@ -30,6 +30,8 @@ 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"
@@ -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
 
metadata CHANGED
@@ -1,50 +1,21 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: method_source
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
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: 2020-03-19 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: []
44
16
  extensions: []
45
17
  extra_rdoc_files: []
46
18
  files:
47
- - ".circleci/config.yml"
48
19
  - ".gemtest"
49
20
  - ".yardopts"
50
21
  - CHANGELOG.md
@@ -63,8 +34,9 @@ files:
63
34
  homepage: http://banisterfiend.wordpress.com
64
35
  licenses:
65
36
  - MIT
66
- metadata: {}
67
- post_install_message:
37
+ metadata:
38
+ changelog_uri: https://github.com/banister/method_source/blob/master/CHANGELOG.md
39
+ post_install_message:
68
40
  rdoc_options: []
69
41
  require_paths:
70
42
  - lib
@@ -79,8 +51,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
79
51
  - !ruby/object:Gem::Version
80
52
  version: '0'
81
53
  requirements: []
82
- rubygems_version: 3.1.2
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/.circleci/config.yml DELETED
@@ -1,139 +0,0 @@
1
- version: 2
2
- references:
3
- repo_restore_cache: &repo_restore_cache
4
- restore_cache:
5
- keys:
6
- - repo-{{ .Environment.CIRCLE_SHA1 }}
7
-
8
- repo_save_cache: &repo_save_cache
9
- save_cache:
10
- key: repo-{{ .Environment.CIRCLE_SHA1 }}-{{ epoch }}
11
- paths:
12
- - ~/method_source
13
-
14
- bundle_install: &bundle_install
15
- run:
16
- name: Install Bundler dependencies
17
- command: bundle install --path ~/method_source/vendor/bundle --jobs 15
18
-
19
- unit: &unit
20
- run:
21
- name: Run unit tests
22
- command: bundle exec rake
23
-
24
- jobs:
25
- "ruby-1.9":
26
- docker:
27
- - image: kyrylo/ruby-1.9.3p551
28
- working_directory: /home/circleci/method_source
29
- steps:
30
- - checkout
31
- - <<: *repo_restore_cache
32
- - <<: *bundle_install
33
- - <<: *unit
34
- "ruby-2.0":
35
- docker:
36
- - image: kyrylo/ruby-2.0.0p648
37
- working_directory: /home/circleci/method_source
38
- steps:
39
- - checkout
40
- - <<: *repo_restore_cache
41
- - <<: *bundle_install
42
- - <<: *unit
43
- "ruby-2.1":
44
- docker:
45
- - image: circleci/ruby:2.1
46
- working_directory: ~/method_source
47
- steps:
48
- - checkout
49
- - <<: *repo_restore_cache
50
- - <<: *bundle_install
51
- - <<: *unit
52
- "ruby-2.2":
53
- docker:
54
- - image: circleci/ruby:2.2
55
- working_directory: ~/method_source
56
- steps:
57
- - checkout
58
- - <<: *repo_restore_cache
59
- - <<: *bundle_install
60
- - <<: *unit
61
- "ruby-2.3":
62
- docker:
63
- - image: circleci/ruby:2.3
64
- working_directory: ~/method_source
65
- steps:
66
- - checkout
67
- - <<: *repo_restore_cache
68
- - <<: *bundle_install
69
- - <<: *unit
70
- "ruby-2.4":
71
- docker:
72
- - image: circleci/ruby:2.4
73
- working_directory: ~/method_source
74
- steps:
75
- - checkout
76
- - <<: *repo_restore_cache
77
- - <<: *bundle_install
78
- - <<: *unit
79
- "ruby-2.5":
80
- docker:
81
- - image: circleci/ruby:2.5
82
- working_directory: ~/method_source
83
- steps:
84
- - checkout
85
- - <<: *repo_restore_cache
86
- - <<: *bundle_install
87
- - <<: *unit
88
- "ruby-2.6":
89
- docker:
90
- - image: circleci/ruby:2.6
91
- working_directory: ~/method_source
92
- steps:
93
- - checkout
94
- - <<: *repo_restore_cache
95
- - <<: *bundle_install
96
- - <<: *unit
97
- "ruby-2.7":
98
- docker:
99
- - image: circleci/ruby:2.7.0
100
- working_directory: ~/method_source
101
- steps:
102
- - checkout
103
- - <<: *repo_restore_cache
104
- - <<: *bundle_install
105
- - <<: *unit
106
- "jruby-9.1-jdk":
107
- docker:
108
- - image: circleci/jruby:9.1-jdk
109
- working_directory: ~/method_source
110
- steps:
111
- - checkout
112
- - <<: *repo_restore_cache
113
- - <<: *bundle_install
114
- - <<: *unit
115
- "jruby-9.2-jdk":
116
- docker:
117
- - image: circleci/jruby:9.2-jdk
118
- working_directory: ~/method_source
119
- steps:
120
- - checkout
121
- - <<: *repo_restore_cache
122
- - <<: *bundle_install
123
- - <<: *unit
124
-
125
- workflows:
126
- version: 2
127
- build:
128
- jobs:
129
- - "ruby-1.9"
130
- - "ruby-2.0"
131
- - "ruby-2.1"
132
- - "ruby-2.2"
133
- - "ruby-2.3"
134
- - "ruby-2.4"
135
- - "ruby-2.5"
136
- - "ruby-2.6"
137
- - "ruby-2.7"
138
- - "jruby-9.1-jdk"
139
- - "jruby-9.2-jdk"