rd 0.0.1
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.
- data/README.md +42 -0
- data/bin/rd +12 -0
- data/lib/rklass.rb +124 -0
- metadata +79 -0
data/README.md
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
RD cli tool
|
2
|
+
===========
|
3
|
+
|
4
|
+
The rd is tiny cli tool for ruby 1.9 kernel classes documenation.
|
5
|
+
|
6
|
+
Uses http://ruby-doc.org/ as data source.
|
7
|
+
|
8
|
+
Usage
|
9
|
+
-----
|
10
|
+
|
11
|
+
$ rd list
|
12
|
+
Will output all the kernel classes data retrieving is available for.
|
13
|
+
|
14
|
+
$ rd :class_name
|
15
|
+
Will output all the class methods and class includes such as additional modules.
|
16
|
+
Example:
|
17
|
+
$ rd exception
|
18
|
+
will output:
|
19
|
+
Exception
|
20
|
+
methods
|
21
|
+
• ==
|
22
|
+
• backtrace
|
23
|
+
• exception
|
24
|
+
• inspect
|
25
|
+
• message
|
26
|
+
• new
|
27
|
+
• set_backtrace
|
28
|
+
• to_s
|
29
|
+
|
30
|
+
$ rd :class_name :method
|
31
|
+
Will output method interface definition and method description (if available).
|
32
|
+
Example:
|
33
|
+
$ rd exception to_s
|
34
|
+
will output:
|
35
|
+
Exception
|
36
|
+
method
|
37
|
+
to_s
|
38
|
+
interface
|
39
|
+
• exception.to_s → string
|
40
|
+
description
|
41
|
+
|
42
|
+
Returns exception‘s message (or the name of the exception if no message is set).
|
data/bin/rd
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require File.join(File.dirname(__FILE__), '..', 'lib', 'rklass')
|
4
|
+
|
5
|
+
begin
|
6
|
+
raise "No search data given. Skiped." if ARGV.size == 0
|
7
|
+
rk = RKlass.new(ARGV)
|
8
|
+
puts rk.cout
|
9
|
+
rescue => e
|
10
|
+
puts "Execution error: #{e.message}"
|
11
|
+
exit 1
|
12
|
+
end
|
data/lib/rklass.rb
ADDED
@@ -0,0 +1,124 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'net/http'
|
5
|
+
require 'nokogiri'
|
6
|
+
require 'open-uri'
|
7
|
+
require 'rainbow'
|
8
|
+
|
9
|
+
class RKlass
|
10
|
+
|
11
|
+
KLASSES = [
|
12
|
+
"ARGF", "ArgumentError", "Array", "BasicObject", "Bignum", "Binding", "Class", "Comparable",
|
13
|
+
"Complex", "Continuation", "Data", "Dir", "EOFError", "Encoding", "Encoding/Converter", "Encoding/ConverterNotFoundError",
|
14
|
+
"Encoding/InvalidByteSequenceError", "Encoding/UndefinedConversionError", "EncodingError", "Enumerable",
|
15
|
+
"Enumerator", "Enumerator/Generator", "Enumerator/Yielder", "Errno", "Exception", "FalseClass", "Fiber",
|
16
|
+
"FiberError", "File", "File/Constants", "File/Stat", "FileTest", "Fixnum", "Float", "FloatDomainError",
|
17
|
+
"GC", "GC/Profiler", "Hash", "IO", "IO/WaitReadable", "IO/WaitWritable", "IOError", "IndexError", "Integer",
|
18
|
+
"Interrupt", "Kernel", "KeyError", "LoadError", "LocalJumpError", "Marshal", "MatchData", "Math", "Math/DomainError", "Method",
|
19
|
+
"Module", "Mutex", "NameError", "NameError/message", "NilClass", "NoMemoryError", "NoMethodError", "NotImplementedError",
|
20
|
+
"Numeric", "Object", "ObjectSpace", "Proc", "Process", "Process/GID", "Process/Status", "Process/Sys",
|
21
|
+
"Process/UID", "Random", "Range", "RangeError", "Rational", "Regexp", "RegexpError", "RubyVM", "RubyVM/Env",
|
22
|
+
"RuntimeError", "ScriptError", "SecurityError", "Signal", "Signal", "SignalException", "StandardError",
|
23
|
+
"StopIteration", "String", "Struct", "Symbol", "SyntaxError", "SystemCallError", "SystemExit", "SystemStackError",
|
24
|
+
"Thread", "ThreadError", "ThreadGroup", "Time", "TrueClass", "TypeError", "UnboundMethod", "ZeroDivisionError", "fatal"
|
25
|
+
]
|
26
|
+
|
27
|
+
class Formatter
|
28
|
+
|
29
|
+
class << self
|
30
|
+
|
31
|
+
def cout(data)
|
32
|
+
format_branch(data).join("\n")
|
33
|
+
end
|
34
|
+
|
35
|
+
def inherit(str)
|
36
|
+
" #{str}"
|
37
|
+
end
|
38
|
+
|
39
|
+
def point(str)
|
40
|
+
"#{'•'.color(:red)} #{str.color(:cyan)}"
|
41
|
+
end
|
42
|
+
|
43
|
+
def format_branch(branch)
|
44
|
+
lines = []
|
45
|
+
if branch.is_a? Hash
|
46
|
+
branch.each_pair do |k, v|
|
47
|
+
lines << k.to_s.color(:magenta)
|
48
|
+
format_branch(v).each do |l|
|
49
|
+
lines << inherit(l)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
elsif branch.is_a? Array
|
53
|
+
branch.each do |e|
|
54
|
+
lines << point(e)
|
55
|
+
end
|
56
|
+
else
|
57
|
+
lines << branch
|
58
|
+
end
|
59
|
+
lines
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def initialize(data)
|
66
|
+
@search = data.first
|
67
|
+
raise "No class entry found: #{@search}." if !KLASSES.include?(@search) && !KLASSES.include?(@search.capitalize) && !self.respond_to?(@search.to_sym)
|
68
|
+
@method = data[1] if data.size > 1
|
69
|
+
end
|
70
|
+
|
71
|
+
def cout
|
72
|
+
if self.respond_to?(@search.to_sym)
|
73
|
+
Formatter.cout(self.send(@search.to_sym))
|
74
|
+
else
|
75
|
+
klass = @search
|
76
|
+
klass = klass.capitalize if !KLASSES.include?(klass)
|
77
|
+
doc = Nokogiri::HTML(open("http://ruby-doc.org/core/classes/#{klass}.html"))
|
78
|
+
methods = {}
|
79
|
+
includes = []
|
80
|
+
doc.css('#method-list div.name-list a').each do |method_link|
|
81
|
+
method_name = method_link.content.to_s
|
82
|
+
href = method_link['href'].sub('#', '')
|
83
|
+
method_heading = ''
|
84
|
+
method_descr = ''
|
85
|
+
method_examples = ''
|
86
|
+
doc.css('#method-' + href).each do |l|
|
87
|
+
l.css('div.method-heading span.method-name').each do |span|
|
88
|
+
method_heading = span.content.to_s.split(/<br>|\n/)
|
89
|
+
end
|
90
|
+
l.css('div.method-description p, div.method-description pre').each do |p|
|
91
|
+
method_descr += p.content.to_s.gsub(/<.+?>(.+)?<\/.+?>/, '\1')
|
92
|
+
end
|
93
|
+
end
|
94
|
+
methods[method_name] = {
|
95
|
+
:interface => method_heading,
|
96
|
+
:description => method_descr
|
97
|
+
# :examples => method_examples
|
98
|
+
}
|
99
|
+
end
|
100
|
+
doc.css('#includes-list a').each do |incl|
|
101
|
+
includes << incl.content.to_s
|
102
|
+
end
|
103
|
+
|
104
|
+
data = {}
|
105
|
+
|
106
|
+
if (@method.nil?)
|
107
|
+
data[:methods] = methods.keys if methods.size > 0
|
108
|
+
data[:includes] = includes if includes.size > 0
|
109
|
+
else
|
110
|
+
raise "No method named '#{@method}' found for class #{klass}." if methods[@method].nil?
|
111
|
+
data[:method] = @method
|
112
|
+
[:interface, :description].each do |sub|
|
113
|
+
data[sub] = methods[@method][sub]
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
Formatter.cout({ klass => data })
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
def list
|
122
|
+
{ :available_classes => KLASSES }
|
123
|
+
end
|
124
|
+
end
|
metadata
ADDED
@@ -0,0 +1,79 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rd
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease:
|
5
|
+
version: 0.0.1
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- 4pcbr
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
|
13
|
+
date: 2011-05-07 00:00:00 +04:00
|
14
|
+
default_executable:
|
15
|
+
dependencies:
|
16
|
+
- !ruby/object:Gem::Dependency
|
17
|
+
name: nokogiri
|
18
|
+
prerelease: false
|
19
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
20
|
+
none: false
|
21
|
+
requirements:
|
22
|
+
- - ">="
|
23
|
+
- !ruby/object:Gem::Version
|
24
|
+
version: "0"
|
25
|
+
type: :runtime
|
26
|
+
version_requirements: *id001
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rainbow
|
29
|
+
prerelease: false
|
30
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
31
|
+
none: false
|
32
|
+
requirements:
|
33
|
+
- - ">="
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: "0"
|
36
|
+
type: :runtime
|
37
|
+
version_requirements: *id002
|
38
|
+
description: ruby kernel classes documentation cli tool
|
39
|
+
email: i4pcbr@gmail.com
|
40
|
+
executables:
|
41
|
+
- rd
|
42
|
+
extensions: []
|
43
|
+
|
44
|
+
extra_rdoc_files:
|
45
|
+
- README.md
|
46
|
+
files:
|
47
|
+
- README.md
|
48
|
+
- bin/rd
|
49
|
+
- lib/rklass.rb
|
50
|
+
has_rdoc: true
|
51
|
+
homepage: https://github.com/4pcbr/rd
|
52
|
+
licenses: []
|
53
|
+
|
54
|
+
post_install_message:
|
55
|
+
rdoc_options: []
|
56
|
+
|
57
|
+
require_paths:
|
58
|
+
- lib
|
59
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
60
|
+
none: false
|
61
|
+
requirements:
|
62
|
+
- - ">="
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
version: "0"
|
65
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
66
|
+
none: false
|
67
|
+
requirements:
|
68
|
+
- - ">="
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: "0"
|
71
|
+
requirements: []
|
72
|
+
|
73
|
+
rubyforge_project:
|
74
|
+
rubygems_version: 1.6.2
|
75
|
+
signing_key:
|
76
|
+
specification_version: 3
|
77
|
+
summary: ruby kernel classes documentation cli tool
|
78
|
+
test_files: []
|
79
|
+
|