core_docs 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,3 @@
1
+ module CoreDocs
2
+ VERSION = '0.9.0'
3
+ end
@@ -0,0 +1,199 @@
1
+ direc = File.dirname(__FILE__)
2
+
3
+ require 'rubygems'
4
+ require "#{direc}/../lib/core_docs"
5
+ require "#{direc}/helper"
6
+ require "#{direc}/gem_with_cext/gems/sample"
7
+ require 'bacon'
8
+ require 'set'
9
+ require 'fileutils'
10
+ require 'readline'
11
+
12
+ puts "Testing core_docs version #{CoreDocs::VERSION}..."
13
+ puts "Ruby version: #{RUBY_VERSION}"
14
+
15
+ describe CoreDocs do
16
+
17
+ describe "core C methods" do
18
+ it 'should look up core (C) methods' do
19
+ obj = CoreDocs::MethodInfo.info_for(method(:puts))
20
+ obj.source.should.not == nil
21
+ end
22
+
23
+ it 'should look up core (C) instance methods' do
24
+ Module.module_eval do
25
+ obj = CoreDocs::MethodInfo.info_for(instance_method(:include))
26
+ obj.source.should.not == nil
27
+ end
28
+ end
29
+
30
+ it 'should look up core (C) class method (by Method object)' do
31
+ Module.module_eval do
32
+ obj = CoreDocs::MethodInfo.info_for(Dir.method(:glob))
33
+ obj.source.should.not == nil
34
+ end
35
+ end
36
+
37
+ it 'should look up core (C) class method (by UnboundMethod object)' do
38
+ Module.module_eval do
39
+ obj = CoreDocs::MethodInfo.info_for(class << Dir; instance_method(:glob); end)
40
+ obj.source.should.not == nil
41
+ end
42
+ end
43
+ end
44
+
45
+ describe "eval methods" do
46
+ it 'should return nil for eval methods' do
47
+ TOPLEVEL_BINDING.eval("def hello; end")
48
+ obj = CoreDocs::MethodInfo.info_for(method(:hello))
49
+ obj.should == nil
50
+ end
51
+ end
52
+
53
+ describe "pure ruby methods" do
54
+ it 'should look up ruby methods' do
55
+ obj = CoreDocs::MethodInfo.info_for(C.new.method(:message))
56
+ obj.should.not == nil
57
+ end
58
+
59
+ it 'should look up ruby instance methods' do
60
+ obj = CoreDocs::MethodInfo.info_for(C.instance_method(:message))
61
+ obj.should.not == nil
62
+ end
63
+ end
64
+
65
+ describe "Ruby stdlib methods" do
66
+ it "should look up ruby stdlib method" do
67
+ obj = CoreDocs::MethodInfo.info_for(Set.instance_method(:union))
68
+ obj.should.not == nil
69
+ end
70
+ end
71
+
72
+ describe "C ext methods" do
73
+
74
+ it "should lookup C ext methods" do
75
+ obj = CoreDocs::MethodInfo.info_for(Sample.instance_method(:gleezor))
76
+ obj.should.not == nil
77
+ end
78
+
79
+ it "should lookup aliased C ext methods" do
80
+ obj = CoreDocs::MethodInfo.info_for(Sample.instance_method(:remove))
81
+ obj.should.not == nil
82
+ end
83
+
84
+ it "should lookup C ext instance methods even when its owners don't have any ruby methods" do
85
+ obj = CoreDocs::MethodInfo.info_for(Sample::A::B.instance_method(:gleezor))
86
+ obj.should.not == nil
87
+ end
88
+
89
+ it "should lookup C ext class methods even when its owners don't have any ruby methods" do
90
+ obj = CoreDocs::MethodInfo.info_for(Sample::A::B.method(:gleezor))
91
+ obj.should.not == nil
92
+ end
93
+ end
94
+
95
+ describe "C stdlib methods" do
96
+ it "finds them" do
97
+ obj = CoreDocs::MethodInfo.info_for(Readline.method(:readline))
98
+ obj.should.not == nil
99
+ end
100
+
101
+ it "finds well hidden docs like BigDecimal docs" do
102
+ require 'bigdecimal'
103
+ obj = CoreDocs::MethodInfo.info_for(BigDecimal.instance_method(:finite?))
104
+ obj.should.not == nil
105
+ end
106
+ end
107
+
108
+ describe ".aliases" do
109
+ it "should return empty array if method does not have any alias" do
110
+ aliases = CoreDocs::MethodInfo.aliases(Sample.instance_method(:some_meth))
111
+ aliases.should == []
112
+ end
113
+
114
+ it "should return aliases of a (C) method" do
115
+ orig = Sample.instance_method(:gleezor)
116
+ copy = Sample.instance_method(:remove)
117
+
118
+ aliases = CoreDocs::MethodInfo.aliases(orig)
119
+ aliases.should == [copy]
120
+
121
+ aliases = CoreDocs::MethodInfo.aliases(copy)
122
+ aliases.should == [orig]
123
+ end
124
+
125
+ it "should return aliases of a ruby method" do
126
+ C.class_eval { alias msg message }
127
+
128
+ orig = C.instance_method(:message)
129
+ copy = C.instance_method(:msg)
130
+
131
+ aliases = CoreDocs::MethodInfo.aliases(orig)
132
+ aliases.should == [copy]
133
+
134
+ aliases = CoreDocs::MethodInfo.aliases(copy)
135
+ aliases.should == [orig]
136
+ end
137
+
138
+ it "should return aliases of protected method" do
139
+ orig = Sample.instance_method(:gleezor_1)
140
+ copy = Sample.instance_method(:remove_1)
141
+
142
+ aliases = CoreDocs::MethodInfo.aliases(orig)
143
+ aliases.should == [copy]
144
+ end
145
+
146
+ it "should return aliases of private method" do
147
+ orig = Sample.instance_method(:gleezor_2)
148
+ copy = Sample.instance_method(:remove_2)
149
+
150
+ aliases = CoreDocs::MethodInfo.aliases(orig)
151
+ aliases.should == [copy]
152
+ end
153
+
154
+ it 'does not error when given a singleton method' do
155
+ c = Class.new do
156
+ def self.my_method; end
157
+ end
158
+
159
+ lambda { CoreDocs::MethodInfo.aliases(c.method(:my_method)) }.should.not.raise NameError
160
+ end
161
+ end
162
+
163
+ describe ".gem_root" do
164
+ # it "should return the path to the gem" do
165
+ # path = Pry::WrappedModule.new(Sample).source_location[0]
166
+
167
+ # CoreDocs::MethodInfo.gem_root(path).should ==
168
+ # File.expand_path("gem_with_cext/gems", direc)
169
+ # end
170
+
171
+ it "should not be fooled by a parent 'lib' or 'ext' dir" do
172
+ path = "/foo/.rbenv/versions/1.9.3-p429/lib/ruby/gems/"\
173
+ "1.9.1/gems/activesupport-4.0.2/lib/active_support/"\
174
+ "core_ext/kernel/reporting.rb"
175
+
176
+ CoreDocs::MethodInfo.gem_root(path).should ==
177
+ "/foo/.rbenv/versions/1.9.3-p429/lib/ruby/"\
178
+ "gems/1.9.1/gems/activesupport-4.0.2"
179
+ end
180
+ end
181
+
182
+ describe "1.9 and higher specific docs" do
183
+ it "finds Kernel#require_relative" do
184
+ obj = CoreDocs::MethodInfo.info_for(Kernel.instance_method(:require_relative))
185
+ obj.should.not == nil
186
+ end
187
+ end
188
+
189
+ # For the time being, Pry doesn't define `mri_20?` helper method.
190
+ if RUBY_VERSION =~ /2.0/ && RbConfig::CONFIG['ruby_install_name'] == 'ruby'
191
+ describe "2.0 specific docs" do
192
+ it "finds Module#refine" do
193
+ obj = CoreDocs::MethodInfo.info_for(Module.instance_method(:refine))
194
+ obj.should.not == nil
195
+ end
196
+ end
197
+ end
198
+
199
+ end
@@ -0,0 +1,2 @@
1
+ require 'mkmf'
2
+ create_makefile("sample")
@@ -0,0 +1,17 @@
1
+ #include "ruby.h"
2
+
3
+ static VALUE gleezor(VALUE self)
4
+ {
5
+ return 1;
6
+ }
7
+
8
+ void Init_sample(void)
9
+ {
10
+ VALUE klass = rb_define_class("Sample", rb_cObject);
11
+ VALUE A = rb_define_module_under(klass, "A");
12
+ VALUE B = rb_define_module_under(A, "B");
13
+
14
+ rb_define_method(klass, "gleezor", gleezor, 0);
15
+ rb_define_method(B, "gleezor", gleezor, 0);
16
+ rb_define_singleton_method(B, "gleezor", gleezor, 0);
17
+ }
@@ -0,0 +1,18 @@
1
+ class Sample
2
+ # ruby method
3
+ def some_meth; end
4
+
5
+ # aliasing a C method
6
+ alias :remove :gleezor
7
+
8
+ protected
9
+
10
+ def gleezor_1; end
11
+ alias :remove_1 :gleezor_1
12
+
13
+ private
14
+
15
+ def gleezor_2; end
16
+
17
+ alias :remove_2 :gleezor_2
18
+ end
@@ -0,0 +1,4 @@
1
+ direc = File.dirname(__FILE__)
2
+
3
+ require "#{direc}/ext/sample"
4
+ require "#{direc}/lib/sample"
data/spec/helper.rb ADDED
@@ -0,0 +1,11 @@
1
+ direc = File.dirname(__FILE__)
2
+
3
+ class C
4
+ def message; end
5
+ end
6
+
7
+ puts
8
+ puts "Building Sample Gem with C Extensions for testing.."
9
+ system("cd #{direc}/gem_with_cext/gems/ext/ && ruby extconf.rb && make")
10
+ puts
11
+
metadata ADDED
@@ -0,0 +1,123 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: core_docs
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.9.0
5
+ platform: ruby
6
+ authors:
7
+ - John Mair (banisterfiend)
8
+ - Jan Lelis (non-pry version)
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2015-03-28 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: yard
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - "~>"
19
+ - !ruby/object:Gem::Version
20
+ version: '0.8'
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - "~>"
26
+ - !ruby/object:Gem::Version
27
+ version: '0.8'
28
+ - !ruby/object:Gem::Dependency
29
+ name: latest_ruby
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - "~>"
33
+ - !ruby/object:Gem::Version
34
+ version: '0.0'
35
+ type: :development
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: '0.0'
42
+ - !ruby/object:Gem::Dependency
43
+ name: bacon
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - "~>"
47
+ - !ruby/object:Gem::Version
48
+ version: '1.1'
49
+ type: :development
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - "~>"
54
+ - !ruby/object:Gem::Version
55
+ version: '1.1'
56
+ description: |
57
+ Pry Doc is a Pry REPL plugin. It provides extended documentation support for the
58
+ REPL by means of improving the `show-doc` and `show-source` commands. With help
59
+ of the plugin the commands are be able to display the source code and the docs
60
+ of Ruby methods and classes implemented in C.
61
+ documentation
62
+ email:
63
+ - jrmair@gmail.com
64
+ - mail@janlelis.de
65
+ executables: []
66
+ extensions: []
67
+ extra_rdoc_files: []
68
+ files:
69
+ - ".gitignore"
70
+ - ".travis.yml"
71
+ - ".yardopts"
72
+ - CHANGELOG.md
73
+ - Gemfile
74
+ - LICENSE
75
+ - README.md
76
+ - Rakefile
77
+ - core_docs.gemspec
78
+ - lib/core_docs.rb
79
+ - lib/core_docs/core_docs_20/checksums
80
+ - lib/core_docs/core_docs_20/object_types
81
+ - lib/core_docs/core_docs_20/objects/root.dat
82
+ - lib/core_docs/core_docs_20/proxy_types
83
+ - lib/core_docs/core_docs_21/checksums
84
+ - lib/core_docs/core_docs_21/object_types
85
+ - lib/core_docs/core_docs_21/objects/root.dat
86
+ - lib/core_docs/core_docs_21/proxy_types
87
+ - lib/core_docs/core_docs_22/checksums
88
+ - lib/core_docs/core_docs_22/object_types
89
+ - lib/core_docs/core_docs_22/objects/root.dat
90
+ - lib/core_docs/core_docs_22/proxy_types
91
+ - lib/core_docs/version.rb
92
+ - spec/core_docs_spec.rb
93
+ - spec/gem_with_cext/gems/ext/extconf.rb
94
+ - spec/gem_with_cext/gems/ext/sample.c
95
+ - spec/gem_with_cext/gems/lib/sample.rb
96
+ - spec/gem_with_cext/gems/sample.rb
97
+ - spec/helper.rb
98
+ homepage: https://github.com/janlelis/core_docs
99
+ licenses:
100
+ - MIT
101
+ metadata: {}
102
+ post_install_message:
103
+ rdoc_options: []
104
+ require_paths:
105
+ - lib
106
+ required_ruby_version: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '2.0'
111
+ required_rubygems_version: !ruby/object:Gem::Requirement
112
+ requirements:
113
+ - - ">="
114
+ - !ruby/object:Gem::Version
115
+ version: '0'
116
+ requirements: []
117
+ rubyforge_project:
118
+ rubygems_version: 2.4.6
119
+ signing_key:
120
+ specification_version: 4
121
+ summary: Provides YARD and extended documentation support for Pry
122
+ test_files: []
123
+ has_rdoc: