method_introspection 0.0.2 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of method_introspection might be problematic. Click here for more details.

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f8e37158912e43ca147a709371c78620db8933fb
4
- data.tar.gz: f1e14b2af4e5a389b52020a0bd0b64f6da5e021e
3
+ metadata.gz: 5568e7b6d6019161fe15bc2d2e2b1a8fab014096
4
+ data.tar.gz: 8908d1e7888d9189d4b4b3f0a8183e8df75affe8
5
5
  SHA512:
6
- metadata.gz: 3ba4cb7223cf9442f7ec90a11017c8b0119ee8109b27f047b505beb2e73ec358c4fd66816c249d6b3cb8c7eb6f16a81a196ec684714768ed08bbc35812ab70b4
7
- data.tar.gz: 6e3052cc8ea47e1a41a9596593062119145d35b49450d74e66354c435664d624ff97db9cc8d5145d31c333e8af38b1845cdc7e03d955b7915282f5cc1dde3ba5
6
+ metadata.gz: f951b118a85c7b0bd7922ae0398c4024e82f681739054b539b6a83cd13168644239355fdf949a958d4a6d63cd82bb9a0013c649fe25a1f14b4ce5132f166cdc4
7
+ data.tar.gz: 97612912cfa8e08264333f83e92baba4bae9fd1acab912b8e1647adf8e0a14cf80845408d6f5bfaaf704e182193bf57ef4eb4aca4375c6fc8cf971bcb6fd5431
@@ -2,6 +2,62 @@ module MethodIntrospection
2
2
 
3
3
  module CodeHelpers
4
4
 
5
+ # ========================================================================= #
6
+ # === extract_last_comment
7
+ #
8
+ # Get the last comment from the input. We will build up the result.
9
+ #
10
+ # @param [Array<String>] lines
11
+ # @return [String]
12
+ # ========================================================================= #
13
+ def extract_last_comment(lines)
14
+ result = ''
15
+ lines.each { |line|
16
+ # ===================================================================== #
17
+ # Add any line that is a valid ruby comment but stop the moment
18
+ # we hit a non-comment line.
19
+ # ===================================================================== #
20
+ if (line =~ /^\s*#/) || (line =~ /^\s*$/)
21
+ # =================================================================== #
22
+ # Append onto result next. In the past we called .lstrip() here but
23
+ # this is no longer legal as we modify the original comment.
24
+ # =================================================================== #
25
+ result << line
26
+ else
27
+ result.replace("")
28
+ end
29
+ }
30
+ return result
31
+ end; private :extract_last_comment
32
+
33
+ # ========================================================================= #
34
+ # === comment_describing
35
+ #
36
+ # This method will retrieve the comment describing the expression on the
37
+ # given line of the given file.
38
+ #
39
+ # This is useful to get the module or method documentation, in String
40
+ # format.
41
+ #
42
+ # @param [Array<String>, File, String] file The file to parse, either as a File or as
43
+ # a String or an Array of lines.
44
+ # @param [Fixnum] line_number The line number at which to look.
45
+ # NOTE: The first line in a file is line 1!
46
+ # @return [String] The comment
47
+ # ========================================================================= #
48
+ def comment_describing(file, line_number)
49
+ if file.is_a? Array
50
+ lines = file
51
+ else
52
+ lines = file.each_line.to_a
53
+ end
54
+ # ======================================================================= #
55
+ # At this point, lines is now an Array. We extract the proper lines
56
+ # by making use of the line number.
57
+ # ======================================================================= #
58
+ extract_last_comment(lines[0..(line_number - 2)])
59
+ end
60
+
5
61
  # ========================================================================= #
6
62
  # === expression_at
7
63
  #
@@ -55,30 +111,6 @@ module CodeHelpers
55
111
  end
56
112
  end
57
113
 
58
- # ========================================================================= #
59
- # === comment_describing
60
- #
61
- # This method will retrieve the comment describing the expression on the
62
- # given line of the given file.
63
- #
64
- # This is useful to get the module or method documentation, in String
65
- # format.
66
- #
67
- # @param [Array<String>, File, String] file The file to parse, either as a File or as
68
- # a String or an Array of lines.
69
- # @param [Fixnum] line_number The line number at which to look.
70
- # NOTE: The first line in a file is line 1!
71
- # @return [String] The comment
72
- # ========================================================================= #
73
- def comment_describing(file, line_number)
74
- if file.is_a? Array
75
- lines = file
76
- else
77
- lines = file.each_line.to_a
78
- end
79
- extract_last_comment(lines[0..(line_number - 2)])
80
- end
81
-
82
114
  # ========================================================================= #
83
115
  # === complete_expression?
84
116
  #
@@ -87,10 +119,12 @@ module CodeHelpers
87
119
  # @param [String] code The code to validate.
88
120
  # @return [Boolean] Whether or not the code is a complete Ruby expression.
89
121
  # @raise [SyntaxError] Any SyntaxError that does not represent incompleteness.
90
- # @example
91
- # complete_expression?("class Hello") #=> false
92
- # complete_expression?("class Hello; end") #=> true
93
- # complete_expression?("class 123") #=> SyntaxError: unexpected tINTEGER
122
+ #
123
+ # @examples
124
+ #
125
+ # complete_expression?("class Hello") # => false
126
+ # complete_expression?("class Hello; end") # => true
127
+ # complete_expression?("class 123") # => SyntaxError: unexpected tINTEGER
94
128
  # ========================================================================= #
95
129
  def complete_expression?(i)
96
130
  old_verbose = $VERBOSE
@@ -103,10 +137,9 @@ module CodeHelpers
103
137
  rescue IncompleteExpression
104
138
  false
105
139
  ensure
106
- $VERBOSE = old_verbose
140
+ $VERBOSE = old_verbose # Reinstate the old verbosity level here.
107
141
  end
108
142
 
109
- private
110
143
  # ========================================================================= #
111
144
  # === extract_first_expression
112
145
  #
@@ -126,39 +159,18 @@ module CodeHelpers
126
159
  return code if complete_expression?(block ? block.call(code) : code)
127
160
  }
128
161
  raise SyntaxError, "unexpected $end"
129
- end
130
-
131
- # ========================================================================= #
132
- # === extract_last_comment
133
- #
134
- # Get the last comment from the input. We will build up the result.
135
- #
136
- # @param [Array<String>] lines
137
- # @return [String]
138
- # ========================================================================= #
139
- def extract_last_comment(lines)
140
- result = ''
141
- lines.each { |line|
142
- # ===================================================================== #
143
- # Add any line that is a valid ruby comment but stop the moment
144
- # we hit a non-comment line.
145
- # ===================================================================== #
146
- if (line =~ /^\s*#/) || (line =~ /^\s*$/)
147
- result << line.lstrip
148
- else
149
- result.replace("")
150
- end
151
- }
152
- return result
153
- end
162
+ end; private :extract_first_expression
154
163
 
155
164
  # ========================================================================= #
156
165
  # === IncompleteExpression
157
166
  #
158
- # An exception matcher that matches only subsets of SyntaxErrors that can be
159
- # fixed by adding more input to the buffer.
167
+ # IncompleteExpression is an exception matcher that matches only subsets
168
+ # of SyntaxErrors that can be fixed by adding more input to the buffer.
160
169
  # ========================================================================= #
161
170
  module IncompleteExpression
171
+ # ======================================================================= #
172
+ # === GENERIC_REGEXPS
173
+ # ======================================================================= #
162
174
  GENERIC_REGEXPS = [
163
175
  /unexpected (\$end|end-of-file|end-of-input|END_OF_FILE)/, # mri, jruby, ruby-2.0, ironruby
164
176
  /embedded document meets end of file/, # =begin
File without changes
@@ -44,7 +44,8 @@ module MethodIntrospection # The top namespace of this project.
44
44
  # ========================================================================= #
45
45
  # === MethodIntrospection.raise_this
46
46
  #
47
- # Second argument is optional, and allows for a longer description.
47
+ # The second argument to this method is optional, and allows for a longer
48
+ # description of the error at hand.
48
49
  # ========================================================================= #
49
50
  def self.raise_this(name, optional_extra = nil)
50
51
  result = "We could not locate the source for #{name}"
@@ -63,14 +64,22 @@ module MethodIntrospection # The top namespace of this project.
63
64
  #
64
65
  # This is defined here to avoid polluting the `Method` class.
65
66
  #
66
- # @param [Array] source_location The array returned by Method#source_location
67
- # @param [String] method_name
68
- # @return [String] The method body
67
+ # @param [Array] source_location The array returned by Method#source_location
68
+ # @param [String] method_name
69
+ # @return [String] The method body
69
70
  # ========================================================================= #
70
71
  def self.source_helper(source_location, name = nil)
71
72
  raise_this(name) unless source_location
72
- file, line = *source_location
73
- expression_at(lines_for(file), line)
73
+ this_file, line_number = *source_location
74
+ # ======================================================================= #
75
+ # Set the file.
76
+ # ======================================================================= #
77
+ MethodIntrospection.set_this_file(this_file)
78
+ # ======================================================================= #
79
+ # Set the line number in that file.
80
+ # ======================================================================= #
81
+ MethodIntrospection.set_line_number(line_number)
82
+ expression_at(lines_for(this_file), line_number)
74
83
  rescue SyntaxError => error
75
84
  raise SourceNotFoundError,
76
85
  "Could not parse source for #{name}: #{error.message}"
@@ -96,18 +105,19 @@ module MethodIntrospection # The top namespace of this project.
96
105
  # ========================================================================= #
97
106
  # === MethodIntrospection.comment_helper
98
107
  #
99
- # Helper method responsible for opening source file and buffering up
100
- # the comments for a specified method. Defined here to avoid
101
- # polluting the `Method` class.
108
+ # This is a helper method responsible for opening source file and
109
+ # buffering up the comments for a specified method. It is defined here
110
+ # to avoid polluting the `Method` class.
102
111
  #
103
112
  # The expected input should be an Array, which is returned by the
104
113
  # method Method#source_location.
105
114
  #
106
115
  # This will typically be in the form of:
107
116
  #
108
- # ["/Programs/Ruby/2.2.3/lib/ruby/site_ruby/2.2.0/config.rb", 297]
117
+ # ["/Programs/Ruby/2.2.3/lib/ruby/site_ruby/2.2.0/config.rb", 297]
109
118
  #
110
- # The first one yields to us the name, the second the line number.
119
+ # The first one yields to us the name of the file in question, and the
120
+ # second gives us the specific line number.
111
121
  #
112
122
  # @param [String] method_name
113
123
  # @return [String] The comments up to the point of the method.
@@ -115,12 +125,17 @@ module MethodIntrospection # The top namespace of this project.
115
125
  def self.comment_helper(source_location, name = nil)
116
126
  raise_this(name) unless source_location
117
127
  this_file, line_number = *source_location
118
- pp source_location
119
- pp this_file
120
- pp line_number
121
128
  MethodIntrospection.set_this_file(this_file)
122
129
  MethodIntrospection.set_line_number(line_number)
123
- comment_describing(lines_for(this_file), line_number)
130
+ # ======================================================================= #
131
+ # Next, we extract all the lines of a given file. lines will thus be a
132
+ # very big Array if we have a big file.
133
+ # ======================================================================= #
134
+ lines = lines_for(this_file)
135
+ # ======================================================================= #
136
+ # Next tap into comment_describing(). This resides in code_helpers.rb
137
+ # ======================================================================= #
138
+ comment_describing(lines, line_number)
124
139
  end
125
140
 
126
141
  end
@@ -16,8 +16,8 @@ module MethodIntrospection
16
16
  # ===================================================================== #
17
17
  # === source_location
18
18
  #
19
- # Return the source location for a Proc (in implementations
20
- # without Proc#source_location)
19
+ # Return the source location for a Proc (in implementations without
20
+ # Proc#source_location)
21
21
  #
22
22
  # @return [Array] A two element array. First element is the
23
23
  # file, second element is the line in the file where the
@@ -1,5 +1,5 @@
1
1
  module MethodIntrospection
2
2
 
3
- VERSION = '0.0.2'
3
+ VERSION = '0.0.6'
4
4
 
5
5
  end
@@ -4,9 +4,13 @@ module MethodIntrospection
4
4
 
5
5
  extend MethodIntrospection::CodeHelpers
6
6
 
7
+ # ========================================================================= #
7
8
  # This module is to be included by `Method` and `UnboundMethod` and
8
9
  # provides the `#source` functionality
10
+ # ========================================================================= #
9
11
  module MethodExtensions
12
+
13
+ # ======================================================================= #
10
14
  # === source
11
15
  #
12
16
  # The method source() will return the sourcecode for the method as
@@ -22,10 +26,14 @@ module MethodIntrospection
22
26
  # @hash.clear
23
27
  # self
24
28
  # end
29
+ # ======================================================================= #
25
30
  def source
26
- MethodIntrospection.source_helper(source_location, defined?(name) ? name : inspect)
27
- end
31
+ MethodIntrospection.source_helper(
32
+ source_location, defined?(name) ? name : inspect
33
+ )
34
+ end; alias source? source
28
35
 
36
+ # ======================================================================= #
29
37
  # === comment
30
38
  #
31
39
  # Return the comments associated with the method as a string.
@@ -36,6 +44,7 @@ module MethodIntrospection
36
44
  # Set.instance_method(:clear).comment.display
37
45
  # =>
38
46
  # # Removes all elements and returns self.
47
+ # ======================================================================= #
39
48
  def comment
40
49
  MethodIntrospection.comment_helper(source_location, defined?(name) ? name : inspect)
41
50
  end
data/test/test.rb CHANGED
@@ -1,11 +1,8 @@
1
- direc = File.expand_path(File.dirname(__FILE__))
2
-
3
- require 'rubygems'
4
1
  require 'bacon'
5
- require 'method_introspection/method_source.rb'
6
- require "#{direc}/test_helper"
2
+ require 'method_introspection'
3
+ require_relative './test_helper.rb'
7
4
 
8
- describe MethodIntrospection do
5
+ describe MethodIntrospection {
9
6
 
10
7
  describe "source_location (testing 1.8 implementation)" do
11
8
  it 'should return correct source_location for a method' do
@@ -135,4 +132,4 @@ describe MethodIntrospection do
135
132
  method(:comment_test5).comment.should == @comment5
136
133
  end
137
134
  end
138
- end
135
+ }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: method_introspection
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robert A. Heiler
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-08-20 00:00:00.000000000 Z
11
+ date: 2015-09-19 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Allows us to inspect the source code for a method and the documentation.
14
14
  email: shevegen@gmail.com
@@ -47,7 +47,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
47
47
  version: '0'
48
48
  requirements: []
49
49
  rubyforge_project:
50
- rubygems_version: 2.4.5.1
50
+ rubygems_version: 2.4.8
51
51
  signing_key:
52
52
  specification_version: 4
53
53
  summary: Allows us to inspect the source code for a method and the documentation.