wirb 0.3.1 → 0.3.2
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.rdoc +4 -0
- data/README.rdoc +11 -9
- data/lib/wirb/schema.rb +3 -1
- data/lib/wirb/tokenizer.rb +58 -32
- data/lib/wirb/version.rb +1 -1
- data/spec/tokenizer_rubygems_spec.rb +80 -0
- data/spec/tokenizer_rubyvm_spec.rb +18 -0
- data/spec/tokenizer_symbol_spec.rb +23 -2
- data/wirb.gemspec +1 -0
- metadata +17 -4
data/CHANGELOG.rdoc
CHANGED
data/README.rdoc
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
== Wavy Interactive Ruby
|
2
2
|
*Wirb* colorizes your inspected Ruby objects. It is based on Wirble[http://pablotron.org/software/wirble/], but only provides and improves result highlighting.
|
3
3
|
|
4
|
+
http://travis-ci.org/janlelis/wirb.png
|
5
|
+
|
4
6
|
== Install
|
5
7
|
Install the gem with:
|
6
8
|
|
@@ -13,21 +15,21 @@ Add to your <tt>~/.irbrc</tt>
|
|
13
15
|
require 'wirb'
|
14
16
|
Wirb.start
|
15
17
|
|
16
|
-
==
|
17
|
-
*
|
18
|
-
*
|
19
|
-
* Fixes some symbol bugs (e.g. :+, :*, ...)
|
18
|
+
== Features
|
19
|
+
* Syntax highlighting for Ruby objects
|
20
|
+
* Does not change the inspect value
|
20
21
|
* Support for generic objects, especially sets and enumerators
|
21
22
|
* Comes with tests
|
22
23
|
* Can be used without irb
|
23
|
-
*
|
24
|
+
* Limited stdlib/gem objects support (e.g. Set, Gem::Requirement)
|
25
|
+
* Supports 1.8, 1.9, jruby, rbx, head
|
24
26
|
|
25
27
|
== Customize
|
26
28
|
The color schema can be changed with:
|
27
29
|
|
28
30
|
Wirb.schema = { :comma => :purple, ... }
|
29
31
|
|
30
|
-
Wirb color schemas are (almost) compatible with those from the original Wirble, but there are
|
32
|
+
Wirb color schemas are (almost) compatible with those from the original Wirble, but there are lots of extensions. Take a look at wirb/schema.rb or <tt>Wirb.schema</tt> for a list of available token descriptions. See wirb/colors.rb or <tt>Wirb::COLORS</tt> for the available colors.
|
31
33
|
|
32
34
|
Color schemas wanted! You've got a good looking alternative color schema? Please post it on the wiki[https://github.com/janlelis/wirb/wiki/schemas], it may be bundled with a next version ;)
|
33
35
|
|
@@ -38,9 +40,9 @@ You can colorize any object with <tt>wp</tt> (wavy_print):
|
|
38
40
|
wp some_object, :light_red
|
39
41
|
|
40
42
|
== Also see
|
41
|
-
* hirb[https://github.com/cldwalker/hirb]
|
42
|
-
* irbtools[https://github.com/janlelis/irbtools]
|
43
|
-
* ripl-color_result[https://github.com/janlelis/ripl-color_result]
|
43
|
+
* Configure views for specific objects: hirb[https://github.com/cldwalker/hirb]
|
44
|
+
* Wirb is part of: irbtools[https://github.com/janlelis/irbtools]
|
45
|
+
* ripl is an irb alternative, syntax highlighting plugin (uses wirb by default): ripl-color_result[https://github.com/janlelis/ripl-color_result]
|
44
46
|
|
45
47
|
== Credits
|
46
48
|
Copyright (c) 2011 Jan Lelis <http://rbjl.net>, see COPYING for details.
|
data/lib/wirb/schema.rb
CHANGED
@@ -59,11 +59,13 @@ module Wirb
|
|
59
59
|
|
60
60
|
# misc
|
61
61
|
:default => nil,
|
62
|
-
:keyword => nil, # some lowercased word
|
62
|
+
:keyword => nil, # some lowercased word
|
63
63
|
:time => :purple,
|
64
64
|
:nil => :light_red,
|
65
65
|
:false => :red,
|
66
66
|
:true => :green,
|
67
|
+
:gem_requirement_condition => :cyan,
|
68
|
+
:gem_requirement_version => :light_cyan,
|
67
69
|
}
|
68
70
|
end
|
69
71
|
|
data/lib/wirb/tokenizer.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
class << Wirb
|
2
2
|
# This is an extended version of the original wirble tokenizer.
|
3
|
-
# Almost everyone would say that
|
3
|
+
# Almost everyone would say that 400 lines long case statements need refactoring, but
|
4
4
|
# ...sometimes it just doesn't matter ;)
|
5
5
|
def tokenize(str)
|
6
6
|
raise ArgumentError, 'Tokenizer needs an inspect-string' unless str.is_a? String
|
@@ -52,7 +52,7 @@ class << Wirb
|
|
52
52
|
# warn "char = #{c} state = #{@state*':'}"
|
53
53
|
|
54
54
|
case @state[-1]
|
55
|
-
when nil, :hash, :array, :enumerator, :set, :variable #
|
55
|
+
when nil, :hash, :array, :enumerator, :set, :variable # default state
|
56
56
|
case c
|
57
57
|
when '"' then push_state[:string]
|
58
58
|
when '/' then push_state[:regexp]
|
@@ -61,6 +61,7 @@ class << Wirb
|
|
61
61
|
when /[a-z]/ then push_state[:keyword, :repeat]
|
62
62
|
when /[0-9-]/ then push_state[:number, :repeat]
|
63
63
|
when '.' then push_state[:range, :repeat]
|
64
|
+
when /[~=]/ then push_state[:gem_requirement_condition, :repeat]
|
64
65
|
|
65
66
|
when /\s/
|
66
67
|
if get_state[:variable]
|
@@ -74,6 +75,7 @@ class << Wirb
|
|
74
75
|
pop_state[:repeat]
|
75
76
|
else
|
76
77
|
pass[:comma, ',']
|
78
|
+
@refers_seen[-1] = false if get_state[:hash]
|
77
79
|
end
|
78
80
|
|
79
81
|
when ':'
|
@@ -84,14 +86,10 @@ class << Wirb
|
|
84
86
|
end
|
85
87
|
|
86
88
|
when '>'
|
87
|
-
if
|
88
|
-
if get_state[:hash]
|
89
|
-
pass[:refers, '=>']
|
90
|
-
else # MAYBE remove this <=> cheat
|
91
|
-
pass[:symbol, '=>']
|
92
|
-
end
|
93
|
-
elsif get_state[:variable]
|
89
|
+
if get_state[:variable]
|
94
90
|
pop_state[:repeat]
|
91
|
+
elsif @token == '' && nc =~ /[= ]/
|
92
|
+
push_state[:gem_requirement_condition, :repeat]
|
95
93
|
end
|
96
94
|
when '('
|
97
95
|
if nc =~ /[0-9-]/
|
@@ -106,6 +104,8 @@ class << Wirb
|
|
106
104
|
pass[:open_set, '{']; push_state[nil] # {{ means set-hash
|
107
105
|
else
|
108
106
|
pass[:open_hash, '{']; push_state[:hash]
|
107
|
+
@refers_seen ||= []
|
108
|
+
@refers_seen.push false
|
109
109
|
end
|
110
110
|
|
111
111
|
when '['
|
@@ -121,6 +121,7 @@ class << Wirb
|
|
121
121
|
when '}'
|
122
122
|
if get_state[:hash]
|
123
123
|
pass[:close_hash, '}']
|
124
|
+
@refers_seen.pop
|
124
125
|
elsif get_previous_state[:set]
|
125
126
|
pass[:close_set, '}']
|
126
127
|
pop_state[] # remove extra nil state
|
@@ -129,9 +130,14 @@ class << Wirb
|
|
129
130
|
pop_state[] if get_state[:enumerator]
|
130
131
|
|
131
132
|
when '<'
|
132
|
-
|
133
|
-
|
134
|
-
|
133
|
+
if nc =~ /[= ]/
|
134
|
+
push_state[:gem_requirement_condition, :repeat]
|
135
|
+
else # MAYBE slightly refactoring
|
136
|
+
pass[:open_object, '<']
|
137
|
+
push_state[:object]
|
138
|
+
push_state[:object_class]
|
139
|
+
open_brackets = 0
|
140
|
+
end
|
135
141
|
|
136
142
|
# else
|
137
143
|
# warn "ignoring char #{c.inspect}" if @debug
|
@@ -165,7 +171,7 @@ class << Wirb
|
|
165
171
|
else
|
166
172
|
if c == ']' && lc == '['
|
167
173
|
@token << c
|
168
|
-
elsif c == '=' && nc != '>'
|
174
|
+
elsif c == '=' && nc != '>'
|
169
175
|
@token << c
|
170
176
|
elsif c =~ /[.,]/ && lc == '$' && llc == ':'
|
171
177
|
@token << c
|
@@ -293,24 +299,19 @@ class << Wirb
|
|
293
299
|
pass_state[]
|
294
300
|
pass[:class_separator, '::']
|
295
301
|
elsif !(c == ':' && lc == ':')
|
296
|
-
|
297
|
-
|
298
|
-
|
302
|
+
pass_state[:keep_token]
|
303
|
+
pass[:object_description_prefix, c]
|
304
|
+
|
305
|
+
@token = @token.downcase
|
306
|
+
if %w[set instructionsequence].include?(@token)
|
307
|
+
set_state[@token.to_sym]
|
299
308
|
else
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
@token = @token.downcase
|
304
|
-
if %w[set].include?(@token)
|
305
|
-
set_state[@token.to_sym]
|
306
|
-
else
|
307
|
-
set_state[:object_description]
|
308
|
-
if %w[enumerator].include?(@token) && RUBY_VERSION >= '1.9'
|
309
|
-
push_state[@token.to_sym]
|
310
|
-
end
|
309
|
+
set_state[:object_description]
|
310
|
+
if %w[enumerator].include?(@token) && RUBY_VERSION >= '1.9'
|
311
|
+
push_state[@token.to_sym]
|
311
312
|
end
|
312
|
-
@token = ''
|
313
313
|
end
|
314
|
+
@token = ''
|
314
315
|
end
|
315
316
|
end
|
316
317
|
|
@@ -374,7 +375,6 @@ class << Wirb
|
|
374
375
|
push_state[:object_line_number]
|
375
376
|
elsif c == '>' # e.g. RubyVM
|
376
377
|
pass_state[:remove, :repeat]
|
377
|
-
pass[:close_object, '>'] # TODO move somewhere else if disturbing
|
378
378
|
else
|
379
379
|
@token << c
|
380
380
|
end
|
@@ -386,12 +386,38 @@ class << Wirb
|
|
386
386
|
pass_state[:remove, :repeat]
|
387
387
|
end
|
388
388
|
|
389
|
-
|
390
|
-
|
389
|
+
when :gem_requirement_condition
|
390
|
+
if c == '>' && lc == '='
|
391
|
+
@token = ''; pop_state[] # TODO in pass helper
|
392
|
+
if get_state[:hash]
|
393
|
+
if nc == '=' || @refers_seen[-1]
|
394
|
+
pass[:symbol, '=>']
|
395
|
+
else
|
396
|
+
pass[:refers, '=>']
|
397
|
+
@refers_seen[-1] = true
|
398
|
+
end
|
399
|
+
else # MAYBE remove this <=> cheat
|
400
|
+
pass[:symbol, '=>']
|
401
|
+
end
|
402
|
+
elsif c =~ /[^\s]/
|
403
|
+
@token << c
|
404
|
+
else
|
405
|
+
pass_state[:remove]
|
406
|
+
pass[:whitespace, c]
|
407
|
+
push_state[:gem_requirement_version]
|
408
|
+
end
|
409
|
+
|
410
|
+
when :gem_requirement_version
|
411
|
+
if c =~ /[0-9a-z.]/i
|
412
|
+
@token << c
|
413
|
+
else
|
414
|
+
pass_state[:remove, :repeat]
|
415
|
+
end
|
416
|
+
|
417
|
+
when :instructionsequence # RubyVM
|
391
418
|
if c =~ /[^@]/i
|
392
419
|
@token << c
|
393
420
|
else
|
394
|
-
pass[:object_description_prefix, ':']
|
395
421
|
pass[:object_line_prefix, @token + '@']
|
396
422
|
@token = ''
|
397
423
|
set_state[:object_line]
|
data/lib/wirb/version.rb
CHANGED
@@ -0,0 +1,80 @@
|
|
1
|
+
describe tokenizer(__FILE__) do
|
2
|
+
after :each do check_value end
|
3
|
+
|
4
|
+
please do check_inspected "> 3.0.0.beta.4"
|
5
|
+
tokens.should == [
|
6
|
+
[:gem_requirement_condition, ">"],
|
7
|
+
[:whitespace, " "],
|
8
|
+
[:gem_requirement_version, "3.0.0.beta.4"],
|
9
|
+
]
|
10
|
+
end
|
11
|
+
|
12
|
+
please do check_inspected "< 3"
|
13
|
+
tokens.should == [
|
14
|
+
[:gem_requirement_condition, "<"],
|
15
|
+
[:whitespace, " "],
|
16
|
+
[:gem_requirement_version, "3"],
|
17
|
+
]
|
18
|
+
end
|
19
|
+
|
20
|
+
please do check_inspected "<= 3"
|
21
|
+
tokens.should == [
|
22
|
+
[:gem_requirement_condition, "<="],
|
23
|
+
[:whitespace, " "],
|
24
|
+
[:gem_requirement_version, "3"],
|
25
|
+
]
|
26
|
+
end
|
27
|
+
|
28
|
+
please do check_inspected "{1=>>= 0}"
|
29
|
+
tokens.should == [
|
30
|
+
[:open_hash, '{'],
|
31
|
+
[:number, '1'],
|
32
|
+
[:refers, '=>'],
|
33
|
+
[:gem_requirement_condition, ">="],
|
34
|
+
[:whitespace, " "],
|
35
|
+
[:gem_requirement_version, "0"],
|
36
|
+
[:close_hash, '}'],
|
37
|
+
]
|
38
|
+
end
|
39
|
+
|
40
|
+
if Gem::Specification.respond_to? :find_by_name
|
41
|
+
only19 do
|
42
|
+
please do
|
43
|
+
require 'rspec'
|
44
|
+
check [Gem::Specification.find_by_name('rspec').dependencies.first.requirement]*2
|
45
|
+
tokens.should == [
|
46
|
+
[:open_array, '['],
|
47
|
+
[:gem_requirement_condition, "~>"],
|
48
|
+
[:whitespace, " "],
|
49
|
+
[:gem_requirement_version, RSpec::Version::STRING],
|
50
|
+
[:comma, ","],
|
51
|
+
[:whitespace, " "],
|
52
|
+
[:gem_requirement_condition, "~>"],
|
53
|
+
[:whitespace, " "],
|
54
|
+
[:gem_requirement_version, RSpec::Version::STRING],
|
55
|
+
[:close_array, ']'],
|
56
|
+
]
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
please do
|
61
|
+
check Gem::Specification.find_by_name('wirb').dependencies.first
|
62
|
+
tokens.should == [ # <Gem::Dependency type=:development name="rspec" requirements=">= 0">
|
63
|
+
[:open_object, "<"],
|
64
|
+
[:object_class, "Gem"],
|
65
|
+
[:class_separator, "::"],
|
66
|
+
[:object_class, "Dependency"],
|
67
|
+
[:object_description_prefix, " "],
|
68
|
+
[:object_description, "type=:development name="],
|
69
|
+
[:open_string, "\""],
|
70
|
+
[:string, "rspec"],
|
71
|
+
[:close_string, "\""],
|
72
|
+
[:object_description, " requirements="],
|
73
|
+
[:open_string, "\""],
|
74
|
+
[:string, ">= 0"],
|
75
|
+
[:close_string, "\""],
|
76
|
+
[:close_object, ">"],
|
77
|
+
]
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
describe tokenizer(__FILE__) do
|
2
|
+
after :each do check_value end
|
3
|
+
please do
|
4
|
+
check_inspected "<RubyVM::InstructionSequence:pp"\
|
5
|
+
"@/home/jan/.rvm/rubies/ruby-1.9.2-p180"\
|
6
|
+
"/lib/ruby/1.9.1/irb/output-method.rb>"
|
7
|
+
tokens.should == [
|
8
|
+
[:open_object, "<"],
|
9
|
+
[:object_class, "RubyVM"],
|
10
|
+
[:class_separator, "::"],
|
11
|
+
[:object_class, "InstructionSequence"],
|
12
|
+
[:object_description_prefix, ":"],
|
13
|
+
[:object_line_prefix, "pp@"],
|
14
|
+
[:object_line, "/home/jan/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/irb/output-method.rb"],
|
15
|
+
[:close_object, ">"],
|
16
|
+
]
|
17
|
+
end
|
18
|
+
end
|
@@ -37,7 +37,7 @@ describe tokenizer(__FILE__) do
|
|
37
37
|
[:comma, ","],
|
38
38
|
[:whitespace, " "],
|
39
39
|
[:symbol_prefix, ":"],
|
40
|
-
# [:symbol, "<=>"], #
|
40
|
+
# [:symbol, "<=>"], # MAYBE fixme
|
41
41
|
[:symbol, "<"],
|
42
42
|
[:symbol, "=>"],
|
43
43
|
[:comma, ","],
|
@@ -95,7 +95,7 @@ describe tokenizer(__FILE__) do
|
|
95
95
|
]
|
96
96
|
end
|
97
97
|
|
98
|
-
please do check [[:hallo],{:'hallo'=>:'test'}, {:'hallo='=>:'test='}, {:'<'=>9}]
|
98
|
+
please do check [[:hallo],{:'hallo'=>:'test'}, {:'hallo='=>:'test='}, {:'<'=>9}, {:'<=>'=>9}, {:'<'=>:'<=>'}]
|
99
99
|
tokens.should == [
|
100
100
|
[:open_array, "["],
|
101
101
|
[:open_array, "["],
|
@@ -128,6 +128,27 @@ describe tokenizer(__FILE__) do
|
|
128
128
|
[:refers, "=>"],
|
129
129
|
[:number, "9"],
|
130
130
|
[:close_hash, "}"],
|
131
|
+
[:comma, ","],
|
132
|
+
[:whitespace, " "],
|
133
|
+
[:open_hash, "{"],
|
134
|
+
[:symbol_prefix, ":"],
|
135
|
+
# [:symbol, "<=>"], # MAYBE fixme
|
136
|
+
[:symbol, "<"],
|
137
|
+
[:symbol, "=>"],
|
138
|
+
[:refers, "=>"],
|
139
|
+
[:number, "9"],
|
140
|
+
[:close_hash, "}"],
|
141
|
+
[:comma, ","],
|
142
|
+
[:whitespace, " "],
|
143
|
+
[:open_hash, "{"],
|
144
|
+
[:symbol_prefix, ":"],
|
145
|
+
[:symbol, "<"],
|
146
|
+
[:refers, "=>"],
|
147
|
+
[:symbol_prefix, ":"],
|
148
|
+
# [:symbol, "<=>"], # MAYBE fixme
|
149
|
+
[:symbol, "<"],
|
150
|
+
[:symbol, "=>"],
|
151
|
+
[:close_hash, "}"],
|
131
152
|
[:close_array, "]"],
|
132
153
|
]
|
133
154
|
end
|
data/wirb.gemspec
CHANGED
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: wirb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.3.
|
5
|
+
version: 0.3.2
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Jan Lelis
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-
|
13
|
+
date: 2011-06-15 00:00:00 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rspec
|
@@ -35,16 +35,27 @@ dependencies:
|
|
35
35
|
type: :development
|
36
36
|
version_requirements: *id002
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
|
-
name:
|
38
|
+
name: rake
|
39
39
|
prerelease: false
|
40
40
|
requirement: &id003 !ruby/object:Gem::Requirement
|
41
41
|
none: false
|
42
42
|
requirements:
|
43
43
|
- - ">="
|
44
44
|
- !ruby/object:Gem::Version
|
45
|
-
version: "
|
45
|
+
version: "0"
|
46
46
|
type: :development
|
47
47
|
version_requirements: *id003
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: zucker
|
50
|
+
prerelease: false
|
51
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
52
|
+
none: false
|
53
|
+
requirements:
|
54
|
+
- - ">="
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: "11"
|
57
|
+
type: :development
|
58
|
+
version_requirements: *id004
|
48
59
|
description: Colorizes your irb results. It's based on Wirble but only provides result highlighting. Just call Wirb.start and enjoy the colors ;).
|
49
60
|
email: mail@janlelis.de
|
50
61
|
executables: []
|
@@ -76,7 +87,9 @@ files:
|
|
76
87
|
- spec/tokenizer_object_spec.rb
|
77
88
|
- spec/tokenizer_nested_spec.rb
|
78
89
|
- spec/tokenizer_time_spec.rb
|
90
|
+
- spec/tokenizer_rubyvm_spec.rb
|
79
91
|
- spec/tokenizer_string_spec.rb
|
92
|
+
- spec/tokenizer_rubygems_spec.rb
|
80
93
|
- COPYING.txt
|
81
94
|
- README.rdoc
|
82
95
|
- CHANGELOG.rdoc
|