bri 0.1.4 → 0.1.5
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/Changelog +6 -0
- data/bin/bri +14 -0
- data/lib/bri/match/base.rb +1 -2
- data/lib/bri/renderer.rb +20 -14
- data/lib/bri/templates.rb +7 -37
- data/spec/lib/bri/match/method_match_spec.rb +1 -1
- data/spec/lib/bri/search/class_method_search_spec.rb +1 -1
- data/spec/lib/bri/search/instance_method_spec.rb +1 -1
- metadata +6 -24
data/Changelog
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
0.1.5
|
2
|
+
- Fix rendering of nested lists
|
3
|
+
- Fix highlighting of sequences of + and _ characters
|
4
|
+
- Add a more elaborate help banner
|
5
|
+
- Show the help banner if no arguments are passed to the executable
|
6
|
+
|
1
7
|
0.1.4
|
2
8
|
- Better rendering of list items
|
3
9
|
- Bulleted Lists now have bullets in front of the list items
|
data/bin/bri
CHANGED
@@ -10,6 +10,15 @@ require 'optparse'
|
|
10
10
|
|
11
11
|
def parse_options
|
12
12
|
parser = OptionParser.new do |opts|
|
13
|
+
opts.banner = "Usage: #{$0} [options] <method_name>"
|
14
|
+
opts.separator ""
|
15
|
+
opts.separator " method_name should be in one of the following formats:"
|
16
|
+
opts.separator ""
|
17
|
+
opts.separator " * ClassOrModuleName#instance_method_name"
|
18
|
+
opts.separator " * ClassOrModuleName.class_method_name"
|
19
|
+
opts.separator " * #instance_method_name"
|
20
|
+
opts.separator " * .class_method_name"
|
21
|
+
opts.separator ""
|
13
22
|
opts.on( nil, "--classes", "List known classes" ) { |v| @options[:list_classes] = true }
|
14
23
|
opts.on( nil, "--methods", "List known methods" ) { |v| @options[:list_methods] = true }
|
15
24
|
opts.on( "-l", "--list-names", "List known namespaces/methods" ) { |v| @options[:list_names] = true }
|
@@ -17,6 +26,11 @@ def parse_options
|
|
17
26
|
opts.on_tail( "-h", "--help", "This help text" ) { puts opts; exit }
|
18
27
|
end
|
19
28
|
parser.parse!( ARGV )
|
29
|
+
|
30
|
+
if ARGV.size == 0
|
31
|
+
puts parser.summarize
|
32
|
+
exit 0
|
33
|
+
end
|
20
34
|
end
|
21
35
|
|
22
36
|
parse_options
|
data/lib/bri/match/base.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
module Bri
|
2
2
|
module Match
|
3
3
|
class Base
|
4
|
-
@@renderer = Bri::Renderer.new
|
5
4
|
def to_s
|
6
5
|
ERB.new( self.class.const_get( :TEMPLATE ), nil, '<>' ).
|
7
6
|
result( binding )
|
@@ -9,7 +8,7 @@ module Bri
|
|
9
8
|
|
10
9
|
private
|
11
10
|
def build_description( source )
|
12
|
-
source.collect { |element|
|
11
|
+
source.collect { |element| Bri::Renderer.render element }
|
13
12
|
end
|
14
13
|
end
|
15
14
|
end
|
data/lib/bri/renderer.rb
CHANGED
@@ -1,13 +1,10 @@
|
|
1
1
|
require 'strscan'
|
2
2
|
|
3
3
|
module Bri
|
4
|
-
|
4
|
+
module Renderer
|
5
5
|
INDENT = ' ' * 2
|
6
6
|
|
7
|
-
def
|
8
|
-
end
|
9
|
-
|
10
|
-
def render( element, width = Bri.width )
|
7
|
+
def self.render( element, width = Bri.width )
|
11
8
|
case element
|
12
9
|
when RDoc::Markup::Verbatim
|
13
10
|
text = extract_text( element, width )
|
@@ -24,6 +21,8 @@ module Bri
|
|
24
21
|
when :NUMBER
|
25
22
|
i = 0
|
26
23
|
rendered_items.map! { |item| i+=1; sprintf "%d.%s", i, item }
|
24
|
+
when :NOTE, :LABEL
|
25
|
+
# do nothing
|
27
26
|
end
|
28
27
|
|
29
28
|
rendered_items.join( "\n\n" ) + "\n"
|
@@ -36,7 +35,7 @@ module Bri
|
|
36
35
|
end
|
37
36
|
end
|
38
37
|
|
39
|
-
def extract_text( element, width )
|
38
|
+
def self.extract_text( element, width )
|
40
39
|
text = case element
|
41
40
|
when RDoc::Markup::Paragraph
|
42
41
|
element.text
|
@@ -49,14 +48,17 @@ module Bri
|
|
49
48
|
when RDoc::Markup::Heading
|
50
49
|
"<h>#{element.text}</h>"
|
51
50
|
when RDoc::Markup::ListItem
|
52
|
-
|
51
|
+
parts = element.parts.collect { |part| extract_text part, width }.join
|
52
|
+
element.label ? "#{element.label}: #{parts}" : parts
|
53
|
+
when RDoc::Markup::List
|
54
|
+
render( element, width - INDENT.length )
|
53
55
|
else
|
54
56
|
raise "Don't know how to handle type #{element.class}: #{element.inspect}"
|
55
57
|
end
|
56
58
|
text + "\n"
|
57
59
|
end
|
58
60
|
|
59
|
-
def replace_markup( text )
|
61
|
+
def self.replace_markup( text )
|
60
62
|
text.gsub!( "<tt>", Term::ANSIColor::cyan )
|
61
63
|
text.gsub!( "</tt>", Term::ANSIColor::reset )
|
62
64
|
|
@@ -66,22 +68,26 @@ module Bri
|
|
66
68
|
text.gsub!( "<h>", Term::ANSIColor::green )
|
67
69
|
text.gsub!( "</h>", Term::ANSIColor::reset )
|
68
70
|
|
69
|
-
text.gsub!( /(^|\s)\+(.*?)\+/,
|
71
|
+
text.gsub!( /(^|\s)\+(.*?[a-zA-Z0-9]+.*?)\+/,
|
70
72
|
"\\1#{Term::ANSIColor::yellow}\\2#{Term::ANSIColor::reset}" )
|
71
|
-
text.gsub!( /(^|\s)_(.*?)_/,
|
73
|
+
text.gsub!( /(^|\s)_(.*?[a-zA-Z0-9]+.*?)_/,
|
72
74
|
"\\1#{Term::ANSIColor::yellow}\\2#{Term::ANSIColor::reset}" )
|
73
75
|
text
|
74
76
|
end
|
75
77
|
|
76
|
-
def printable_length( text )
|
78
|
+
def self.printable_length( text )
|
77
79
|
Term::ANSIColor.uncolored( text ).length
|
78
80
|
end
|
79
81
|
|
80
|
-
def
|
82
|
+
def self.wrap_list( array, width = Bri.width )
|
83
|
+
indent( wrap_to_width( array.join(", "), width ) )
|
84
|
+
end
|
85
|
+
|
86
|
+
def self.wrap_to_width( styled_text, width )
|
81
87
|
styled_text.split( "\n" ).collect { |row| wrap_row row, width }.join
|
82
88
|
end
|
83
89
|
|
84
|
-
def wrap_row( physical_row, width )
|
90
|
+
def self.wrap_row( physical_row, width )
|
85
91
|
output_text = ''
|
86
92
|
logical_row = ''
|
87
93
|
printable_row_length = 0
|
@@ -107,7 +113,7 @@ module Bri
|
|
107
113
|
output_text << logical_row << "\n"
|
108
114
|
end
|
109
115
|
|
110
|
-
def indent( text )
|
116
|
+
def self.indent( text )
|
111
117
|
text.split( "\n" ).collect { |row| "#{INDENT}#{row}" }.join("\n" )
|
112
118
|
end
|
113
119
|
end
|
data/lib/bri/templates.rb
CHANGED
@@ -3,7 +3,7 @@ module Bri
|
|
3
3
|
MULTIPLE_CHOICES =<<-EOT
|
4
4
|
<%= Bri::Templates::Helpers.hrule( "Multiple choices:" ) %>
|
5
5
|
|
6
|
-
<%= Bri::
|
6
|
+
<%= Bri::Renderer.wrap_list( qualified_methods.sort ) %>
|
7
7
|
|
8
8
|
|
9
9
|
EOT
|
@@ -20,31 +20,31 @@ module Bri
|
|
20
20
|
|
21
21
|
<% if !includes.empty? %>
|
22
22
|
<%= section_header( "Includes:" ) %>
|
23
|
-
<%=
|
23
|
+
<%= Bri::Renderer.wrap_list( includes.sort ) %>
|
24
24
|
|
25
25
|
|
26
26
|
<% end %>
|
27
27
|
<% if !constants.empty? %>
|
28
28
|
<%= section_header( "Constants:" ) %>
|
29
|
-
<%=
|
29
|
+
<%= Bri::Renderer.wrap_list( constants.sort ) %>
|
30
30
|
|
31
31
|
|
32
32
|
<% end %>
|
33
33
|
<% if !class_methods.empty? %>
|
34
34
|
<%= section_header( "Class methods:" ) %>
|
35
|
-
<%=
|
35
|
+
<%= Bri::Renderer.wrap_list( class_methods.sort ) %>
|
36
36
|
|
37
37
|
|
38
38
|
<% end %>
|
39
39
|
<% if !instance_methods.empty? %>
|
40
40
|
<%= section_header( "Instance methods:" ) %>
|
41
|
-
<%=
|
41
|
+
<%= Bri::Renderer.wrap_list( instance_methods.sort ) %>
|
42
42
|
|
43
43
|
|
44
44
|
<% end %>
|
45
45
|
<% if !attributes.empty? %>
|
46
46
|
<%= section_header( "Attributes:" ) %>
|
47
|
-
<%=
|
47
|
+
<%= Bri::Renderer.wrap_list( attributes.sort ) %>
|
48
48
|
|
49
49
|
|
50
50
|
<% end %>
|
@@ -68,9 +68,7 @@ module Bri
|
|
68
68
|
'-' * width + "\n"
|
69
69
|
else
|
70
70
|
text = " " + text if text != ''
|
71
|
-
'-' * ( width - text.length ) +
|
72
|
-
Term::ANSIColor::bold + text + Term::ANSIColor::reset +
|
73
|
-
"\n"
|
71
|
+
'-' * ( width - text.length ) + Term::ANSIColor::bold( text ) + "\n"
|
74
72
|
end
|
75
73
|
end
|
76
74
|
module_function :hrule
|
@@ -79,34 +77,6 @@ module Bri
|
|
79
77
|
Term::ANSIColor::green + Term::ANSIColor::underline + text + Term::ANSIColor::reset + "\n"
|
80
78
|
end
|
81
79
|
module_function :section_header
|
82
|
-
|
83
|
-
def array_to_width( array, width = Bri.width, separator = ", ", indent_steps = 1 )
|
84
|
-
indentation = ' '
|
85
|
-
rows = '' + indentation * indent_steps
|
86
|
-
row = ''
|
87
|
-
row_length = 0
|
88
|
-
|
89
|
-
array = add_separators( array, separator )
|
90
|
-
|
91
|
-
array.compact.each do |element|
|
92
|
-
if row.length + element.length >= width
|
93
|
-
rows << row + "\n" + indentation * indent_steps
|
94
|
-
row = ''
|
95
|
-
end
|
96
|
-
|
97
|
-
row << element
|
98
|
-
end
|
99
|
-
|
100
|
-
rows << row
|
101
|
-
rows
|
102
|
-
end
|
103
|
-
module_function :array_to_width
|
104
|
-
|
105
|
-
def add_separators( array, separator )
|
106
|
-
last_element = array.pop
|
107
|
-
array.map { |e| e + separator } + [ last_element ]
|
108
|
-
end
|
109
|
-
module_function :add_separators
|
110
80
|
end
|
111
81
|
end
|
112
82
|
end
|
@@ -5,7 +5,7 @@ describe Bri::Search::ClassMethod do
|
|
5
5
|
let( :paragraph ) { RDoc::Markup::Paragraph.new( "Foo Description" ) }
|
6
6
|
let( :document ) { mock( RDoc::Markup::Document, :parts => [ paragraph ] ) }
|
7
7
|
let( :rdoc_method ) { mock( RDoc::AnyMethod, :full_name => "Foo",
|
8
|
-
:
|
8
|
+
:arglists => "",
|
9
9
|
:comment => document ) }
|
10
10
|
before( :each ) do
|
11
11
|
store_one = mock( RDoc::RI::Store, :load_cache => true,
|
@@ -5,7 +5,7 @@ describe Bri::Search::InstanceMethod do
|
|
5
5
|
let( :paragraph ) { RDoc::Markup::Paragraph.new( "Foo Description" ) }
|
6
6
|
let( :document ) { mock( RDoc::Markup::Document, :parts => [ paragraph ] ) }
|
7
7
|
let( :rdoc_method ) { mock( RDoc::AnyMethod, :full_name => "Foo",
|
8
|
-
:
|
8
|
+
:arglists => "",
|
9
9
|
:comment => document ) }
|
10
10
|
before( :each ) do
|
11
11
|
store_one = mock( RDoc::RI::Store, :load_cache => true,
|
metadata
CHANGED
@@ -1,12 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bri
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
prerelease:
|
5
|
-
|
6
|
-
- 0
|
7
|
-
- 1
|
8
|
-
- 4
|
9
|
-
version: 0.1.4
|
4
|
+
prerelease:
|
5
|
+
version: 0.1.5
|
10
6
|
platform: ruby
|
11
7
|
authors:
|
12
8
|
- Sven Riedel
|
@@ -14,7 +10,7 @@ autorequire:
|
|
14
10
|
bindir: bin
|
15
11
|
cert_chain: []
|
16
12
|
|
17
|
-
date:
|
13
|
+
date: 2011-02-04 00:00:00 +01:00
|
18
14
|
default_executable:
|
19
15
|
dependencies:
|
20
16
|
- !ruby/object:Gem::Dependency
|
@@ -25,10 +21,6 @@ dependencies:
|
|
25
21
|
requirements:
|
26
22
|
- - ">="
|
27
23
|
- !ruby/object:Gem::Version
|
28
|
-
segments:
|
29
|
-
- 1
|
30
|
-
- 0
|
31
|
-
- 5
|
32
24
|
version: 1.0.5
|
33
25
|
type: :runtime
|
34
26
|
version_requirements: *id001
|
@@ -38,13 +30,9 @@ dependencies:
|
|
38
30
|
requirement: &id002 !ruby/object:Gem::Requirement
|
39
31
|
none: false
|
40
32
|
requirements:
|
41
|
-
- -
|
33
|
+
- - ~>
|
42
34
|
- !ruby/object:Gem::Version
|
43
|
-
|
44
|
-
- 2
|
45
|
-
- 5
|
46
|
-
- 0
|
47
|
-
version: 2.5.0
|
35
|
+
version: 3.5.2
|
48
36
|
type: :runtime
|
49
37
|
version_requirements: *id002
|
50
38
|
description: An alternative to the ri command
|
@@ -98,23 +86,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
98
86
|
requirements:
|
99
87
|
- - ">="
|
100
88
|
- !ruby/object:Gem::Version
|
101
|
-
segments:
|
102
|
-
- 1
|
103
|
-
- 9
|
104
|
-
- 2
|
105
89
|
version: 1.9.2
|
106
90
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
107
91
|
none: false
|
108
92
|
requirements:
|
109
93
|
- - ">="
|
110
94
|
- !ruby/object:Gem::Version
|
111
|
-
segments:
|
112
|
-
- 0
|
113
95
|
version: "0"
|
114
96
|
requirements: []
|
115
97
|
|
116
98
|
rubyforge_project:
|
117
|
-
rubygems_version: 1.
|
99
|
+
rubygems_version: 1.5.0
|
118
100
|
signing_key:
|
119
101
|
specification_version: 3
|
120
102
|
summary: Beautified RI in the spirit of fastri/qri. Unlike fastri, bri builds on top of the rdoc 2.x backend, only output and formatting is handled by bri
|