pry-doc 0.13.0pre8 → 0.13.0pre9
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 +4 -4
- data/Rakefile +1 -0
- data/lib/pry-doc/pry_ext/show_source_with_c_internals.rb +14 -14
- data/lib/pry-doc/pry_ext/show_source_with_c_internals/c_file.rb +31 -12
- data/lib/pry-doc/pry_ext/show_source_with_c_internals/code_fetcher.rb +47 -36
- data/lib/pry-doc/pry_ext/show_source_with_c_internals/symbol_extractor.rb +23 -27
- data/lib/pry-doc/version.rb +1 -1
- data/pry-doc.gemspec +1 -1
- data/spec/pry-doc_spec.rb +24 -12
- metadata +18 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bc2cce15654d5274eafc32d64f55017731f9c886
|
4
|
+
data.tar.gz: ab085546cca4977bd51a7d4be0c80804cd12af9c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7b0811fb74814d2f15f0c0ef562231ef7690eb889e1bcd9aff49babb8238eb6ee2fbd6f358149937194baf3c45bfdce6d05ba3e716322925a483e681a565700d
|
7
|
+
data.tar.gz: 6f21469f06a59961638c6db297b3fe2dc14a055946d18751a2c93423221acfb88bd4721dbbcd87a875086ba7d47a95b4a330110640b3a51dadeefb34d82a91f4
|
data/Rakefile
CHANGED
@@ -4,14 +4,16 @@ module Pry::CInternals
|
|
4
4
|
class ShowSourceWithCInternals < Pry::Command::ShowSource
|
5
5
|
def options(opt)
|
6
6
|
super(opt)
|
7
|
-
opt.on :c, "c-source", "Show source of a C
|
7
|
+
opt.on :c, "c-source", "Show source of a C identifier in MRI (rather than Ruby method of same name)"
|
8
8
|
end
|
9
9
|
|
10
10
|
def show_c_source
|
11
11
|
if opts.present?(:all)
|
12
|
-
result, file = CodeFetcher.new(line_number_style)
|
12
|
+
result, file = CodeFetcher.new(line_number_style: line_number_style)
|
13
|
+
.fetch_all_definitions(obj_name)
|
13
14
|
else
|
14
|
-
result, file = CodeFetcher.new(line_number_style)
|
15
|
+
result, file = CodeFetcher.new(line_number_style: line_number_style)
|
16
|
+
.fetch_first_definition(obj_name)
|
15
17
|
end
|
16
18
|
if result
|
17
19
|
set_file_and_dir_locals(file)
|
@@ -22,14 +24,14 @@ module Pry::CInternals
|
|
22
24
|
end
|
23
25
|
|
24
26
|
def process
|
25
|
-
if opts.present?(:c) && !Pry.config.
|
27
|
+
if opts.present?(:c) && !Pry.config.skip_cruby_source
|
26
28
|
show_c_source
|
27
29
|
return
|
28
30
|
else
|
29
31
|
super
|
30
32
|
end
|
31
33
|
rescue Pry::CommandError
|
32
|
-
raise if Pry.config.
|
34
|
+
raise if Pry.config.skip_cruby_source
|
33
35
|
show_c_source
|
34
36
|
end
|
35
37
|
|
@@ -38,15 +40,13 @@ module Pry::CInternals
|
|
38
40
|
# We can number lines with their actual line numbers
|
39
41
|
# or starting with 1 (base-one)
|
40
42
|
def line_number_style
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
{ line_number_style: style }
|
43
|
+
if opts.present?(:'base-one')
|
44
|
+
:'base-one'
|
45
|
+
elsif opts.present?(:'line-numbers')
|
46
|
+
:'line-numbers'
|
47
|
+
else
|
48
|
+
nil
|
49
|
+
end
|
50
50
|
end
|
51
51
|
|
52
52
|
Pry::Commands.add_command(ShowSourceWithCInternals)
|
@@ -9,37 +9,56 @@
|
|
9
9
|
# Following lines are the symbols followed by line number with char 127 as separator.
|
10
10
|
module Pry::CInternals
|
11
11
|
class CFile
|
12
|
-
SourceLocation = Struct.new(:file, :line, :
|
12
|
+
SourceLocation = Struct.new(:file, :line, :symbol_type)
|
13
13
|
|
14
14
|
# Used to separate symbol from line number
|
15
15
|
SYMBOL_SEPARATOR = "\x7f"
|
16
16
|
|
17
17
|
attr_accessor :symbols, :file_name
|
18
|
+
attr_reader :ruby_source_folder
|
18
19
|
|
19
|
-
def
|
20
|
-
|
21
|
-
end
|
22
|
-
|
23
|
-
def initialize(str)
|
20
|
+
def initialize(str, ruby_source_folder: nil)
|
21
|
+
@ruby_source_folder = ruby_source_folder
|
24
22
|
@lines = str.lines
|
25
23
|
@file_name = @lines.shift.split(",").first
|
26
24
|
end
|
27
25
|
|
28
26
|
def process_symbols
|
29
|
-
|
27
|
+
@symbols = @lines.each_with_object({}) do |v, h|
|
30
28
|
symbol, line_number = v.split(SYMBOL_SEPARATOR)
|
31
|
-
|
32
|
-
|
29
|
+
next if symbol.strip =~ /^\w+$/ # these symbols are usually errors in etags
|
30
|
+
h[cleanup_symbol(symbol)] = [source_location_for(symbol, line_number)]
|
33
31
|
end
|
34
|
-
|
35
|
-
@symbols = Hash[array]
|
36
32
|
end
|
37
33
|
|
38
34
|
private
|
39
35
|
|
36
|
+
def source_location_for(symbol, line_number)
|
37
|
+
SourceLocation.new(File.join(ruby_source_folder, @file_name),
|
38
|
+
cleanup_linenumber(line_number), symbol_type_for(symbol.strip))
|
39
|
+
end
|
40
|
+
|
41
|
+
def symbol_type_for(symbol)
|
42
|
+
if symbol.start_with?("#define")
|
43
|
+
:macro
|
44
|
+
elsif symbol =~ /\bstruct\b/
|
45
|
+
:struct
|
46
|
+
elsif symbol =~ /\benum\b/
|
47
|
+
:enum
|
48
|
+
elsif symbol.start_with?("}")
|
49
|
+
:typedef_struct
|
50
|
+
elsif symbol =~/^typedef.*;$/
|
51
|
+
:typedef_oneliner
|
52
|
+
elsif symbol =~ /\($/
|
53
|
+
:function
|
54
|
+
else
|
55
|
+
:unknown
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
40
59
|
def cleanup_symbol(symbol)
|
41
60
|
symbol = symbol.split.last
|
42
|
-
symbol.
|
61
|
+
symbol.gsub(/\W/, '')
|
43
62
|
end
|
44
63
|
|
45
64
|
def cleanup_linenumber(line_number)
|
@@ -10,8 +10,15 @@ module Pry::CInternals
|
|
10
10
|
attr_accessor :ruby_source_folder
|
11
11
|
end
|
12
12
|
|
13
|
-
#
|
14
|
-
|
13
|
+
# The Ruby version that corresponds to a downloadable release
|
14
|
+
# Note that after Ruby 2.1.0 they exclude the patchlevel from the release name
|
15
|
+
def self.ruby_version
|
16
|
+
if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("2.1.0")
|
17
|
+
RUBY_VERSION.tr(".", "_")
|
18
|
+
else
|
19
|
+
RUBY_VERSION.tr(".", "_") + "_#{RUBY_PATCHLEVEL}"
|
20
|
+
end
|
21
|
+
end
|
15
22
|
|
16
23
|
self.ruby_source_folder = File.join(File.expand_path("~/.pry.d"), "ruby-#{ruby_version}")
|
17
24
|
|
@@ -27,13 +34,12 @@ module Pry::CInternals
|
|
27
34
|
infos = self.class.symbol_map[symbol]
|
28
35
|
return unless infos
|
29
36
|
|
30
|
-
""
|
31
|
-
|
32
|
-
|
33
|
-
end
|
34
|
-
|
35
|
-
return [result, full_path_for(infos.first.file)]
|
37
|
+
result = ""
|
38
|
+
infos.count.times do |index|
|
39
|
+
result << fetch_first_definition(symbol, index).first << "\n"
|
36
40
|
end
|
41
|
+
|
42
|
+
return [result, infos.first.file]
|
37
43
|
end
|
38
44
|
|
39
45
|
def fetch_first_definition(symbol, index=nil)
|
@@ -43,33 +49,25 @@ module Pry::CInternals
|
|
43
49
|
info = infos[index || 0]
|
44
50
|
code = symbol_extractor.extract(info)
|
45
51
|
|
46
|
-
""
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
+
result = ""
|
53
|
+
result << "\n#{bold('From: ')}#{info.file} @ line #{info.line}:\n"
|
54
|
+
result << "#{bold('Number of implementations:')} #{infos.count}\n" unless index
|
55
|
+
result << "#{bold('Number of lines: ')} #{code.lines.count}\n\n"
|
56
|
+
result << Pry::Code.new(code, start_line_for(info.line), :c).
|
57
|
+
with_line_numbers(use_line_numbers?).highlighted
|
58
|
+
|
59
|
+
return [result, info.file]
|
52
60
|
|
53
|
-
return [result, full_path_for(info.file)]
|
54
|
-
end
|
55
61
|
end
|
56
62
|
|
57
63
|
private
|
58
64
|
|
59
|
-
def full_path_for(file)
|
60
|
-
File.join(self.class.ruby_source_folder, file)
|
61
|
-
end
|
62
|
-
|
63
65
|
def use_line_numbers?
|
64
66
|
!!line_number_style
|
65
67
|
end
|
66
68
|
|
67
69
|
def start_line_for(line)
|
68
|
-
|
69
|
-
1
|
70
|
-
else
|
71
|
-
line || 1
|
72
|
-
end
|
70
|
+
line_number_style == :'base-one' ? 1 : line || 1
|
73
71
|
end
|
74
72
|
|
75
73
|
def self.symbol_map
|
@@ -81,7 +79,7 @@ module Pry::CInternals
|
|
81
79
|
|
82
80
|
def self.parse_tagfile
|
83
81
|
@c_files ||= tagfile.split("\f\n")[1..-1].map do |v|
|
84
|
-
CFile.
|
82
|
+
CFile.new(v, ruby_source_folder: ruby_source_folder).tap(&:process_symbols)
|
85
83
|
end
|
86
84
|
end
|
87
85
|
|
@@ -92,34 +90,47 @@ module Pry::CInternals
|
|
92
90
|
@tagfile ||= File.read(tags)
|
93
91
|
end
|
94
92
|
|
95
|
-
|
96
|
-
|
93
|
+
# @param [String] message Message to display on error
|
94
|
+
# @param [&Block] block Optional assertion
|
95
|
+
def self.check_for_error(message, &block)
|
96
|
+
raise Pry::CommandError, message if $?.to_i != 0 || block && !block.call
|
97
97
|
end
|
98
98
|
|
99
99
|
def self.ask_for_install
|
100
|
-
|
100
|
+
print "Identifier not found - do you want to install CRuby sources to attempt to resolve the identifier there?\n(This allows the lookup of C internals) Y/N "
|
101
101
|
|
102
102
|
if $stdin.gets !~ /^y/i
|
103
|
-
puts "
|
103
|
+
puts "CRuby sources not installed. To prevent being asked again, add `Pry.config.skip_cruby_source = true` to your ~/.pryrc"
|
104
104
|
raise Pry::CommandError, "No definition found."
|
105
105
|
end
|
106
106
|
end
|
107
107
|
|
108
108
|
def self.install_and_setup_ruby_source
|
109
109
|
ask_for_install
|
110
|
-
puts "Downloading and setting up Ruby #{ruby_version} source
|
110
|
+
puts "Downloading and setting up Ruby #{ruby_version} source..."
|
111
|
+
download_ruby
|
112
|
+
generate_tagfile
|
113
|
+
puts "...Finished!"
|
114
|
+
end
|
115
|
+
|
116
|
+
def self.download_ruby
|
117
|
+
curl_cmd = "curl --show-error --fail-early --fail -L https://github.com/ruby/ruby/archive/v#{ruby_version}.tar.gz | tar xzvf - 2> /dev/null"
|
118
|
+
|
111
119
|
FileUtils.mkdir_p(ruby_source_folder)
|
112
120
|
FileUtils.cd(File.dirname(ruby_source_folder)) do
|
113
|
-
%x{
|
114
|
-
check_for_error(
|
121
|
+
%x{ #{curl_cmd} }
|
122
|
+
check_for_error(curl_cmd) { Dir.entries(ruby_source_folder).count > 5 }
|
115
123
|
end
|
124
|
+
end
|
125
|
+
|
126
|
+
def self.generate_tagfile
|
127
|
+
find_cmd = "find . -type f -name '*.[chy]' | etags - --no-members -o tags"
|
116
128
|
|
117
129
|
FileUtils.cd(ruby_source_folder) do
|
118
130
|
puts "Generating tagfile!"
|
119
|
-
%x{
|
120
|
-
check_for_error(
|
131
|
+
%x{ #{find_cmd} }
|
132
|
+
check_for_error(find_cmd) { File.size(File.join(ruby_source_folder, "tags")) > 500 }
|
121
133
|
end
|
122
|
-
puts "...Finished!"
|
123
134
|
end
|
124
135
|
end
|
125
136
|
end
|
@@ -10,16 +10,20 @@ module Pry::CInternals
|
|
10
10
|
end
|
11
11
|
|
12
12
|
def extract(info)
|
13
|
-
|
13
|
+
case info.symbol_type
|
14
|
+
when :macro
|
14
15
|
extract_macro(info)
|
15
|
-
|
16
|
+
when :struct, :enum
|
16
17
|
extract_struct(info)
|
17
|
-
|
18
|
+
when :typedef_struct
|
18
19
|
extract_typedef_struct(info)
|
19
|
-
|
20
|
-
|
21
|
-
|
20
|
+
when :typedef_oneliner
|
21
|
+
extract_oneliner(info)
|
22
|
+
when :function
|
22
23
|
extract_function(info)
|
24
|
+
else
|
25
|
+
# if we dont know what it is, just extract out a single line
|
26
|
+
extract_oneliner(info)
|
23
27
|
end
|
24
28
|
end
|
25
29
|
|
@@ -43,7 +47,7 @@ module Pry::CInternals
|
|
43
47
|
end
|
44
48
|
end
|
45
49
|
|
46
|
-
def
|
50
|
+
def extract_oneliner(info)
|
47
51
|
source_file = source_from_file(info.file)
|
48
52
|
return source_file[info.line]
|
49
53
|
end
|
@@ -57,7 +61,13 @@ module Pry::CInternals
|
|
57
61
|
offset += 1
|
58
62
|
end
|
59
63
|
|
60
|
-
|
64
|
+
(0..4).each do |v|
|
65
|
+
line = source_file[info.line + v]
|
66
|
+
if line && line.strip.end_with?("{")
|
67
|
+
offset += v
|
68
|
+
break
|
69
|
+
end
|
70
|
+
end
|
61
71
|
|
62
72
|
extract_code(info, offset: offset, start_line: start_line) do |code|
|
63
73
|
return code if balanced?(code)
|
@@ -81,35 +91,21 @@ module Pry::CInternals
|
|
81
91
|
end
|
82
92
|
|
83
93
|
def function_return_type?(str)
|
84
|
-
str.strip =~
|
94
|
+
str.strip =~ /\w\s*\*?$/
|
85
95
|
end
|
86
96
|
|
87
97
|
def balanced?(str)
|
88
98
|
tokens = CodeRay.scan(str, :c).tokens.each_slice(2)
|
89
|
-
token_count(tokens,
|
99
|
+
token_count(tokens, '{') == token_count(tokens, '}')
|
90
100
|
end
|
91
101
|
|
92
102
|
def token_count(tokens, token)
|
93
|
-
tokens.count { |v|
|
103
|
+
tokens.count { |v| v.first.to_s.include?(token) && v.last == :operator }
|
94
104
|
end
|
95
105
|
|
96
106
|
def source_from_file(file)
|
97
|
-
|
98
|
-
|
99
|
-
file_cache[file]
|
100
|
-
else
|
101
|
-
# inject a "\n" as first element to align array index and line number
|
102
|
-
file_cache[file] = ["\n", *File.read(full_path_for(file)).lines]
|
103
|
-
end
|
104
|
-
end
|
105
|
-
|
106
|
-
def full_path_for(file)
|
107
|
-
File.join(@ruby_source_folder, file)
|
108
|
-
end
|
109
|
-
|
110
|
-
# normalized
|
111
|
-
def ruby_version
|
112
|
-
RUBY_VERSION.tr(".", "_")
|
107
|
+
# inject a leading "\n" to align array index and line number
|
108
|
+
self.class.file_cache[file] ||= ["\n", *File.read(file).lines]
|
113
109
|
end
|
114
110
|
end
|
115
111
|
end
|
data/lib/pry-doc/version.rb
CHANGED
data/pry-doc.gemspec
CHANGED
@@ -23,7 +23,7 @@ DESCR
|
|
23
23
|
s.required_ruby_version = '>= 2.0'
|
24
24
|
|
25
25
|
s.add_dependency 'yard', "~> 0.9.11"
|
26
|
-
s.add_dependency 'pry', "
|
26
|
+
s.add_dependency 'pry', "~> 0.11.3"
|
27
27
|
s.add_development_dependency 'latest_ruby', '~> 0.0'
|
28
28
|
s.add_development_dependency 'rspec', '~> 3.5'
|
29
29
|
s.add_development_dependency 'rake', "~> 10.0"
|
data/spec/pry-doc_spec.rb
CHANGED
@@ -47,8 +47,14 @@ RSpec.describe PryDoc do
|
|
47
47
|
end
|
48
48
|
|
49
49
|
describe "#fetch_all_definitions" do
|
50
|
+
it "returns both code and file name" do
|
51
|
+
file_ = described_class.symbol_map["foo"].first.file
|
52
|
+
_, file = described_class.new.fetch_all_definitions("foo")
|
53
|
+
expect(file).to eq file_
|
54
|
+
end
|
55
|
+
|
50
56
|
it "returns the code for all symbols" do
|
51
|
-
code, = described_class.new
|
57
|
+
code, = described_class.new.fetch_all_definitions("foo")
|
52
58
|
expect(decolor code).to include <<EOF
|
53
59
|
int
|
54
60
|
foo(void) {
|
@@ -65,6 +71,12 @@ EOF
|
|
65
71
|
end
|
66
72
|
|
67
73
|
describe "#fetch_first_definition" do
|
74
|
+
it "returns both code and file name" do
|
75
|
+
code, file = described_class.new.fetch_first_definition("wassup")
|
76
|
+
expect(decolor code).to include "typedef int wassup;"
|
77
|
+
expect(file).to eq File.join(__dir__, "fixtures/c_source/hello.c")
|
78
|
+
end
|
79
|
+
|
68
80
|
context "with line numbers" do
|
69
81
|
context "normal style (actual line numbers)" do
|
70
82
|
it "displays actual line numbers" do
|
@@ -94,7 +106,7 @@ EOF
|
|
94
106
|
end
|
95
107
|
|
96
108
|
it "returns the code for a function" do
|
97
|
-
code, = described_class.new
|
109
|
+
code, = described_class.new.fetch_first_definition("foo")
|
98
110
|
expect(decolor code).to include(<<EOF
|
99
111
|
int
|
100
112
|
foo(void) {
|
@@ -109,7 +121,7 @@ EOF
|
|
109
121
|
end
|
110
122
|
|
111
123
|
it "returns the code for an enum" do
|
112
|
-
code, = described_class.new
|
124
|
+
code, = described_class.new.fetch_first_definition("bar")
|
113
125
|
expect(decolor code).to include <<EOF
|
114
126
|
enum bar {
|
115
127
|
alpha,
|
@@ -120,19 +132,19 @@ EOF
|
|
120
132
|
end
|
121
133
|
|
122
134
|
it "returns the code for a macro" do
|
123
|
-
code, = described_class.new
|
135
|
+
code, = described_class.new.fetch_first_definition("baby")
|
124
136
|
expect(decolor code).to include('#define baby do {')
|
125
137
|
expect(decolor code).to include('printf("baby");')
|
126
138
|
expect(decolor code).to include('while(0)')
|
127
139
|
end
|
128
140
|
|
129
141
|
it "returns the code for a typedef" do
|
130
|
-
code, = described_class.new
|
142
|
+
code, = described_class.new.fetch_first_definition("wassup")
|
131
143
|
expect(decolor code).to include('typedef int wassup;')
|
132
144
|
end
|
133
145
|
|
134
146
|
it "returns the code for a struct" do
|
135
|
-
code, = described_class.new
|
147
|
+
code, = described_class.new.fetch_first_definition("baz")
|
136
148
|
expect(decolor code).to include <<EOF
|
137
149
|
struct baz {
|
138
150
|
int x;
|
@@ -142,7 +154,7 @@ EOF
|
|
142
154
|
end
|
143
155
|
|
144
156
|
it "returns the code for a typedef'd struct" do
|
145
|
-
code, = described_class.new
|
157
|
+
code, = described_class.new.fetch_first_definition("cutie_pie")
|
146
158
|
expect(decolor code).to include <<EOF
|
147
159
|
typedef struct {
|
148
160
|
int lovely;
|
@@ -152,7 +164,7 @@ EOF
|
|
152
164
|
end
|
153
165
|
|
154
166
|
it "returns the code for a typedef'd enum" do
|
155
|
-
code, = described_class.new
|
167
|
+
code, = described_class.new.fetch_first_definition("baby_enum")
|
156
168
|
expect(decolor code).to include <<EOF
|
157
169
|
typedef enum cute_enum_e {
|
158
170
|
lillybing,
|
@@ -165,7 +177,7 @@ EOF
|
|
165
177
|
context "function definitions" do
|
166
178
|
context "return type is on same line" do
|
167
179
|
subject do
|
168
|
-
decolor described_class.new
|
180
|
+
decolor described_class.new
|
169
181
|
.fetch_first_definition("tinkywinky")
|
170
182
|
.first
|
171
183
|
end
|
@@ -177,9 +189,9 @@ EOF
|
|
177
189
|
end
|
178
190
|
end
|
179
191
|
|
180
|
-
context "
|
192
|
+
context "curly brackets on subsequent line" do
|
181
193
|
subject do
|
182
|
-
decolor described_class.new
|
194
|
+
decolor described_class.new
|
183
195
|
.fetch_first_definition("lala")
|
184
196
|
.first
|
185
197
|
end
|
@@ -194,7 +206,7 @@ EOF
|
|
194
206
|
|
195
207
|
context "return type on prior line and curly brackets on subsequent" do
|
196
208
|
subject do
|
197
|
-
decolor described_class.new
|
209
|
+
decolor described_class.new
|
198
210
|
.fetch_first_definition("po")
|
199
211
|
.first
|
200
212
|
end
|
metadata
CHANGED
@@ -1,83 +1,83 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pry-doc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.13.
|
4
|
+
version: 0.13.0pre9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Mair (banisterfiend)
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-02-
|
11
|
+
date: 2018-02-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: yard
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ~>
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: 0.9.11
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ~>
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 0.9.11
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: pry
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ~>
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: 0.11.3
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ~>
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: 0.11.3
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: latest_ruby
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ~>
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0.0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ~>
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0.0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rspec
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ~>
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '3.5'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - ~>
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '3.5'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rake
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- -
|
73
|
+
- - ~>
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '10.0'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- -
|
80
|
+
- - ~>
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '10.0'
|
83
83
|
description: |
|
@@ -92,9 +92,9 @@ executables: []
|
|
92
92
|
extensions: []
|
93
93
|
extra_rdoc_files: []
|
94
94
|
files:
|
95
|
-
-
|
96
|
-
-
|
97
|
-
-
|
95
|
+
- .gitignore
|
96
|
+
- .travis.yml
|
97
|
+
- .yardopts
|
98
98
|
- CHANGELOG.md
|
99
99
|
- Gemfile
|
100
100
|
- LICENSE
|
@@ -153,17 +153,17 @@ require_paths:
|
|
153
153
|
- lib
|
154
154
|
required_ruby_version: !ruby/object:Gem::Requirement
|
155
155
|
requirements:
|
156
|
-
- -
|
156
|
+
- - '>='
|
157
157
|
- !ruby/object:Gem::Version
|
158
158
|
version: '2.0'
|
159
159
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
160
160
|
requirements:
|
161
|
-
- -
|
161
|
+
- - '>'
|
162
162
|
- !ruby/object:Gem::Version
|
163
163
|
version: 1.3.1
|
164
164
|
requirements: []
|
165
165
|
rubyforge_project:
|
166
|
-
rubygems_version: 2.
|
166
|
+
rubygems_version: 2.0.14
|
167
167
|
signing_key:
|
168
168
|
specification_version: 4
|
169
169
|
summary: Provides YARD and extended documentation support for Pry
|