wirb 0.2.6 → 0.3.0
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 +8 -0
- data/Rakefile +1 -1
- data/lib/wirb/schema.rb +7 -5
- data/lib/wirb/tokenizer.rb +117 -35
- data/lib/wirb/version.rb +1 -1
- data/lib/wirb.rb +26 -11
- data/spec/spec_helper.rb +4 -4
- data/spec/tokenizer_enumerator_spec.rb +109 -17
- data/spec/tokenizer_misc_spec.rb +33 -4
- data/spec/tokenizer_nested_spec.rb +1 -1
- data/spec/tokenizer_object_spec.rb +31 -5
- data/spec/tokenizer_time_spec.rb +15 -0
- data/wirb.gemspec +11 -2
- metadata +6 -5
data/CHANGELOG.rdoc
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
== 0.3.0
|
2
|
+
* Improve 1.9 enumerator detection/highlighting
|
3
|
+
* Remove :open_enumerator / :close_enumerator (use nested usual base objects instead)
|
4
|
+
* Support timestamps (:timestamp)
|
5
|
+
* Support instance variables and their contents (:object_variable, :object_variable_prefix)
|
6
|
+
* Add Wirb.stop to not colorize anything, anymore (in irb)
|
7
|
+
* Support RubyVM instruction sequences
|
8
|
+
|
1
9
|
== 0.2.6
|
2
10
|
* Fix Ruby 1.8 "already initialized constant" warnings
|
3
11
|
|
data/Rakefile
CHANGED
data/lib/wirb/schema.rb
CHANGED
@@ -9,8 +9,6 @@ module Wirb
|
|
9
9
|
|
10
10
|
:open_set => :green,
|
11
11
|
:close_set => :green,
|
12
|
-
:open_enumerator => :green,
|
13
|
-
:close_enumerator => :green,
|
14
12
|
|
15
13
|
# delimiter colors
|
16
14
|
:comma => :green,
|
@@ -25,11 +23,13 @@ module Wirb
|
|
25
23
|
:open_object => :green,
|
26
24
|
:object_description_prefix => :green,
|
27
25
|
:object_description => :brown,
|
28
|
-
:
|
29
|
-
:
|
26
|
+
:object_address_prefi => :brown_underline,
|
27
|
+
:object_address => :brown_underline,
|
30
28
|
:object_line_prefix => :brown_underline,
|
31
29
|
:object_line => :brown_underline,
|
32
30
|
:object_line_number => :brown_underline,
|
31
|
+
:object_variable_prefix => :light_purple,
|
32
|
+
:object_variable => :light_purple,
|
33
33
|
:close_object => :green,
|
34
34
|
|
35
35
|
# symbol
|
@@ -58,7 +58,9 @@ module Wirb
|
|
58
58
|
:close_rational => :light_cyan,
|
59
59
|
|
60
60
|
# misc
|
61
|
-
:
|
61
|
+
:default => nil,
|
62
|
+
:keyword => nil, # some lowercased word, merge with default?
|
63
|
+
:time => :purple,
|
62
64
|
:nil => :light_red,
|
63
65
|
:false => :red,
|
64
66
|
:true => :green,
|
data/lib/wirb/tokenizer.rb
CHANGED
@@ -24,7 +24,10 @@ class << Wirb
|
|
24
24
|
|
25
25
|
pass = lambda{ |kind, string| @passed << string; yield kind, string }
|
26
26
|
|
27
|
-
set_state = lambda{ |state|
|
27
|
+
set_state = lambda{ |state, *options|
|
28
|
+
@state[-1] = state
|
29
|
+
@repeat = true if options.include? :repeat
|
30
|
+
}
|
28
31
|
|
29
32
|
get_state = lambda{ |state| @state[-1] == state }
|
30
33
|
|
@@ -49,9 +52,8 @@ class << Wirb
|
|
49
52
|
# warn "char = #{c} state = #{@state*':'}"
|
50
53
|
|
51
54
|
case @state[-1]
|
52
|
-
when nil, :hash, :array, :enumerator, :set # "default" state
|
55
|
+
when nil, :hash, :array, :enumerator, :set, :variable # "default" state
|
53
56
|
case c
|
54
|
-
when ':' then push_state[:symbol]
|
55
57
|
when '"' then push_state[:string]
|
56
58
|
when '/' then push_state[:regexp]
|
57
59
|
when '#' then push_state[:object]
|
@@ -59,15 +61,37 @@ class << Wirb
|
|
59
61
|
when /[a-z]/ then push_state[:keyword, :repeat]
|
60
62
|
when /[0-9-]/ then push_state[:number, :repeat]
|
61
63
|
when '.' then push_state[:range, :repeat]
|
62
|
-
|
63
|
-
when
|
64
|
+
|
65
|
+
when /\s/
|
66
|
+
if get_state[:variable]
|
67
|
+
pop_state[:repeat]
|
68
|
+
else
|
69
|
+
pass[:whitespace, c]
|
70
|
+
end
|
71
|
+
|
72
|
+
when ','
|
73
|
+
if get_state[:variable]
|
74
|
+
pop_state[:repeat]
|
75
|
+
else
|
76
|
+
pass[:comma, ',']
|
77
|
+
end
|
78
|
+
|
79
|
+
when ':'
|
80
|
+
if get_state[:enumerator]
|
81
|
+
set_state[:object_description, :repeat]
|
82
|
+
else
|
83
|
+
push_state[:symbol]
|
84
|
+
end
|
85
|
+
|
64
86
|
when '>'
|
65
87
|
if lc == '='
|
66
88
|
if get_state[:hash]
|
67
89
|
pass[:refers, '=>']
|
68
|
-
else #
|
90
|
+
else # MAYBE remove this <=> cheat
|
69
91
|
pass[:symbol, '=>']
|
70
92
|
end
|
93
|
+
elsif get_state[:variable]
|
94
|
+
pop_state[:repeat]
|
71
95
|
end
|
72
96
|
when '('
|
73
97
|
if nc =~ /[0-9-]/
|
@@ -79,39 +103,42 @@ class << Wirb
|
|
79
103
|
|
80
104
|
when '{'
|
81
105
|
if get_state[:set]
|
82
|
-
pass[:open_set, '{'];
|
106
|
+
pass[:open_set, '{']; push_state[nil] # {{ means set-hash
|
83
107
|
else
|
84
108
|
pass[:open_hash, '{']; push_state[:hash]
|
85
109
|
end
|
86
110
|
|
87
111
|
when '['
|
88
|
-
|
89
|
-
pass[:open_enumerator, '[']; push_state[nil]
|
90
|
-
else
|
91
|
-
pass[:open_array, '[']; push_state[:array]
|
92
|
-
end
|
112
|
+
pass[:open_array, '[']; push_state[:array]
|
93
113
|
|
94
114
|
when ']'
|
95
115
|
if get_state[:array]
|
96
|
-
pass[:close_array, ']']
|
97
|
-
|
98
|
-
|
99
|
-
set_state[:object_description]
|
116
|
+
pass[:close_array, ']']
|
117
|
+
pop_state[]
|
118
|
+
pop_state[] if get_state[:enumerator]
|
100
119
|
end
|
101
120
|
|
102
121
|
when '}'
|
103
122
|
if get_state[:hash]
|
104
|
-
pass[:close_hash, '}']
|
123
|
+
pass[:close_hash, '}']
|
105
124
|
elsif get_previous_state[:set]
|
106
|
-
pass[:close_set, '}']
|
107
|
-
|
125
|
+
pass[:close_set, '}']
|
126
|
+
pop_state[] # remove extra nil state
|
108
127
|
end
|
128
|
+
pop_state[]
|
129
|
+
pop_state[] if get_state[:enumerator]
|
130
|
+
|
131
|
+
when '<'
|
132
|
+
pass[:open_object, '<']
|
133
|
+
push_state[:ruby_vm]
|
134
|
+
push_state[:object_class]
|
109
135
|
|
110
136
|
# else
|
111
|
-
#
|
137
|
+
# warn "ignoring char #{c.inspect}" if @debug
|
112
138
|
end
|
113
139
|
|
114
140
|
when :class
|
141
|
+
next set_state[:time, :repeat] if c == ' ' # Ruby 1.8 default timestamp
|
115
142
|
case c
|
116
143
|
when /[a-z0-9_]/i
|
117
144
|
@token << c
|
@@ -188,7 +215,9 @@ class << Wirb
|
|
188
215
|
end
|
189
216
|
|
190
217
|
when :number
|
191
|
-
if c
|
218
|
+
if c == '-' && @token != '' && @token[-1] != 'e'
|
219
|
+
set_state[:time, :repeat]
|
220
|
+
elsif c =~ /[0-9e+.-]/ && !(c == '.' && nc == '.')
|
192
221
|
@token << c
|
193
222
|
elsif c == '/' # ruby 1.8 mathn
|
194
223
|
pass_state[]
|
@@ -197,6 +226,23 @@ class << Wirb
|
|
197
226
|
pass_state[:remove, :repeat]
|
198
227
|
end
|
199
228
|
|
229
|
+
when :time # via regex, state needs to be triggered somewhere else
|
230
|
+
peek = chars[i..-1].join
|
231
|
+
if [
|
232
|
+
/^\d+-\d{2}-\d{2} \d{2}:\d{2}:\d{2} (?:[+-]\d{4}|[a-z]{3})/i, # 1.9 / UTC
|
233
|
+
/^[a-z]{3} [a-z]{3} \d{2} \d{2}:\d{2}:\d{2} (?:[+-]\d{4}|[a-z]{3}) \d{4}/i, # 1.8
|
234
|
+
#/^\d+-\d{2}-\d{2}/, # simple date
|
235
|
+
].any?{ |regex|
|
236
|
+
( @token + peek ) =~ regex
|
237
|
+
} # found, adjust parsing-pointer:
|
238
|
+
i = i + $&.size - @token.size - 1
|
239
|
+
@token = $&
|
240
|
+
pass_state[:remove]
|
241
|
+
else
|
242
|
+
@token << c
|
243
|
+
pop_state[:remove]
|
244
|
+
end
|
245
|
+
|
200
246
|
when :range
|
201
247
|
if c == '.'
|
202
248
|
@token << c
|
@@ -227,7 +273,8 @@ class << Wirb
|
|
227
273
|
open_brackets = 0
|
228
274
|
when '>'
|
229
275
|
pass[:close_object, '>']
|
230
|
-
pop_state[]
|
276
|
+
pop_state[]
|
277
|
+
pop_state[] if get_state[:enumerator]
|
231
278
|
end
|
232
279
|
|
233
280
|
when :object_class
|
@@ -241,14 +288,24 @@ class << Wirb
|
|
241
288
|
pass_state[]
|
242
289
|
pass[:class_separator, '::']
|
243
290
|
elsif !(c == ':' && lc == ':')
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
set_state[@token.to_sym]
|
291
|
+
if get_previous_state[:ruby_vm]
|
292
|
+
pass_state[]
|
293
|
+
pop_state[:remove]
|
248
294
|
else
|
249
|
-
|
295
|
+
pass_state[:keep_token]
|
296
|
+
pass[:object_description_prefix, c]
|
297
|
+
|
298
|
+
@token = @token.downcase
|
299
|
+
if %w[set].include?(@token)
|
300
|
+
set_state[@token.to_sym]
|
301
|
+
else
|
302
|
+
set_state[:object_description]
|
303
|
+
if %w[enumerator].include?(@token) && RUBY_VERSION >= '1.9'
|
304
|
+
push_state[@token.to_sym]
|
305
|
+
end
|
306
|
+
end
|
307
|
+
@token = ''
|
250
308
|
end
|
251
|
-
@token = ''
|
252
309
|
end
|
253
310
|
end
|
254
311
|
|
@@ -264,16 +321,16 @@ class << Wirb
|
|
264
321
|
when '<'
|
265
322
|
open_brackets += 1
|
266
323
|
@token << c
|
267
|
-
when '
|
268
|
-
pass_state[
|
269
|
-
|
324
|
+
when '@'
|
325
|
+
pass_state[]
|
326
|
+
push_state[:object_variable]
|
270
327
|
when '"'
|
271
328
|
pass_state[]
|
272
329
|
push_state[:string]
|
273
330
|
when /[0-9]/
|
274
331
|
if c == '0' && nc == 'x'
|
275
332
|
pass_state[:repeat]
|
276
|
-
push_state[:
|
333
|
+
push_state[:object_address]
|
277
334
|
else
|
278
335
|
# push_state[:number, :repeat]
|
279
336
|
@token << c
|
@@ -282,7 +339,17 @@ class << Wirb
|
|
282
339
|
@token << c
|
283
340
|
end
|
284
341
|
|
285
|
-
when :
|
342
|
+
when :object_variable
|
343
|
+
if c =~ /[a-z0-9_]/i
|
344
|
+
@token << c
|
345
|
+
else
|
346
|
+
pass[:object_variable_prefix, '@']
|
347
|
+
pass_state[:remove]
|
348
|
+
pass[:object_description, '=']
|
349
|
+
push_state[:variable]
|
350
|
+
end
|
351
|
+
|
352
|
+
when :object_address
|
286
353
|
if c =~ /[x0-9a-f]/
|
287
354
|
@token << c
|
288
355
|
else
|
@@ -295,11 +362,14 @@ class << Wirb
|
|
295
362
|
end
|
296
363
|
end
|
297
364
|
|
298
|
-
|
365
|
+
when :object_line
|
299
366
|
if c == ':' && nc =~ /[0-9]/
|
300
367
|
@token << ':'
|
301
368
|
pass_state[:remove]
|
302
369
|
push_state[:object_line_number]
|
370
|
+
elsif c == '>' # e.g. RubyVM
|
371
|
+
pass_state[:remove, :repeat]
|
372
|
+
pass[:close_object, '>'] # TODO move somewhere else if disturbing
|
303
373
|
else
|
304
374
|
@token << c
|
305
375
|
end
|
@@ -310,6 +380,18 @@ class << Wirb
|
|
310
380
|
else
|
311
381
|
pass_state[:remove, :repeat]
|
312
382
|
end
|
383
|
+
|
384
|
+
# <RubyVM::InstructionSequence:pp@/home/jan/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/irb/output-method.rb>
|
385
|
+
when :ruby_vm # TODO write tests
|
386
|
+
if c =~ /[^@]/i
|
387
|
+
@token << c
|
388
|
+
else
|
389
|
+
pass[:object_description_prefix, ':']
|
390
|
+
pass[:object_line_prefix, @token + '@']
|
391
|
+
@token = ''
|
392
|
+
set_state[:object_line]
|
393
|
+
end
|
394
|
+
|
313
395
|
|
314
396
|
# else
|
315
397
|
# raise "unknown state #{@state[-1]} #{@state.inspect}"
|
@@ -325,7 +407,7 @@ class << Wirb
|
|
325
407
|
snapshot = Marshal.dump([@state, @token, llc, lc, c, nc])
|
326
408
|
end
|
327
409
|
rescue
|
328
|
-
|
410
|
+
p$!, $!.backtrace[0]
|
329
411
|
pass[:default, str.sub(@passed, '')]
|
330
412
|
end
|
331
413
|
end
|
data/lib/wirb/version.rb
CHANGED
data/lib/wirb.rb
CHANGED
@@ -6,6 +6,9 @@ require File.expand_path( File.dirname(__FILE__) + '/wirb/tokenizer' )
|
|
6
6
|
class << Wirb
|
7
7
|
attr_accessor :schema
|
8
8
|
|
9
|
+
@running = false
|
10
|
+
def running?() @running end
|
11
|
+
|
9
12
|
# Return the escape code for a given color
|
10
13
|
def get_color(key)
|
11
14
|
if key.is_a? String
|
@@ -24,24 +27,36 @@ class << Wirb
|
|
24
27
|
|
25
28
|
# Colorize a result string
|
26
29
|
def colorize_result(string, custom_schema = schema)
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
30
|
+
if @running
|
31
|
+
check = ''
|
32
|
+
colorful = tokenize(string).map do |kind, token|
|
33
|
+
check << token
|
34
|
+
colorize_string token, custom_schema[kind]
|
35
|
+
end.join
|
36
|
+
|
37
|
+
# always display the correct inspect string!
|
38
|
+
check == string ? colorful : string
|
39
|
+
else
|
40
|
+
string
|
41
|
+
end
|
35
42
|
end
|
36
43
|
|
37
|
-
# Colorize results
|
44
|
+
# Colorize results
|
45
|
+
# Will hook into irb if IRB is defined
|
38
46
|
def start
|
39
|
-
require File.dirname(__FILE__) + '/wirb/irb'
|
47
|
+
require File.dirname(__FILE__) + '/wirb/irb' if defined?(IRB)
|
48
|
+
@running = true
|
40
49
|
rescue LoadError
|
41
|
-
warn "Couldn't activate Wirb
|
50
|
+
warn "Couldn't activate Wirb"
|
42
51
|
end
|
43
52
|
alias activate start
|
44
53
|
alias enable start
|
54
|
+
|
55
|
+
def stop # don't colorize, anymore
|
56
|
+
@running = false
|
57
|
+
end
|
58
|
+
alias deactivate stop
|
59
|
+
alias disable stop
|
45
60
|
end
|
46
61
|
|
47
62
|
# J-_-L
|
data/spec/spec_helper.rb
CHANGED
@@ -5,6 +5,8 @@ require 'wirb/wp'
|
|
5
5
|
require 'zucker/engine'
|
6
6
|
require 'zucker/version'
|
7
7
|
|
8
|
+
Wirb.start
|
9
|
+
|
8
10
|
def tokenizer(filename)
|
9
11
|
filename =~ /tokenizer_(.*)_spec\.rb/
|
10
12
|
"Wirb.tokenize" + ($1 ? "(#{$1})" : "")
|
@@ -81,8 +83,6 @@ end
|
|
81
83
|
# common regex patterns
|
82
84
|
OBJECT_ID = /0x[0-9a-f]+/
|
83
85
|
|
84
|
-
=begin helper
|
85
|
-
def ws(obj)
|
86
|
-
puts Wirb.tokenize(obj.inspect).map{|*x| x.inspect + ','}*$/
|
87
|
-
end
|
86
|
+
=begin helper method for getting tokens
|
87
|
+
def ws(obj); puts Wirb.tokenize(obj.inspect).map{|*x| x.inspect + ','}*$/; end
|
88
88
|
=end
|
@@ -7,8 +7,8 @@ describe tokenizer(__FILE__) do
|
|
7
7
|
[:open_object, "#<"],
|
8
8
|
[:object_class, "Enumerator"],
|
9
9
|
[:object_description_prefix, ":"],
|
10
|
-
[:
|
11
|
-
[:
|
10
|
+
[:whitespace, " "],
|
11
|
+
[:open_array, "["],
|
12
12
|
[:number, "2"],
|
13
13
|
[:comma, ","],
|
14
14
|
[:whitespace, " "],
|
@@ -16,19 +16,82 @@ describe tokenizer(__FILE__) do
|
|
16
16
|
[:comma, ","],
|
17
17
|
[:whitespace, " "],
|
18
18
|
[:number, "4"],
|
19
|
-
[:
|
19
|
+
[:close_array, "]"],
|
20
20
|
[:object_description, ":each"],
|
21
21
|
[:close_object, ">"],
|
22
22
|
]
|
23
23
|
end
|
24
24
|
|
25
|
+
please do check Set[2,3,4].map
|
26
|
+
tokens.should == [
|
27
|
+
[:open_object, "#<"],
|
28
|
+
[:object_class, "Enumerator"],
|
29
|
+
[:object_description_prefix, ":"],
|
30
|
+
[:whitespace, " "],
|
31
|
+
[:open_object, "#<"],
|
32
|
+
[:object_class, "Set"],
|
33
|
+
[:object_description_prefix, ":"],
|
34
|
+
[:whitespace, " "],
|
35
|
+
[:open_set, "{"],
|
36
|
+
[:number, "2"],
|
37
|
+
[:comma, ","],
|
38
|
+
[:whitespace, " "],
|
39
|
+
[:number, "3"],
|
40
|
+
[:comma, ","],
|
41
|
+
[:whitespace, " "],
|
42
|
+
[:number, "4"],
|
43
|
+
[:close_set, "}"],
|
44
|
+
[:close_object, ">"],
|
45
|
+
[:object_description, ":map"],
|
46
|
+
[:close_object, ">"],
|
47
|
+
]
|
48
|
+
end
|
49
|
+
|
50
|
+
please do check({1=>3}.each)
|
51
|
+
tokens.should == [
|
52
|
+
[:open_object, "#<"],
|
53
|
+
[:object_class, "Enumerator"],
|
54
|
+
[:object_description_prefix, ":"],
|
55
|
+
[:whitespace, " "],
|
56
|
+
[:open_hash, "{"],
|
57
|
+
[:number, "1"],
|
58
|
+
[:refers, "=>"],
|
59
|
+
[:number, "3"],
|
60
|
+
[:close_hash, "}"],
|
61
|
+
[:object_description, ":each"],
|
62
|
+
[:close_object, ">"],
|
63
|
+
]
|
64
|
+
end
|
65
|
+
|
66
|
+
please do check({1=>3}.each.map)
|
67
|
+
tokens.should == [
|
68
|
+
[:open_object, "#<"],
|
69
|
+
[:object_class, "Enumerator"],
|
70
|
+
[:object_description_prefix, ":"],
|
71
|
+
[:whitespace, " "],
|
72
|
+
[:open_object, "#<"],
|
73
|
+
[:object_class, "Enumerator"],
|
74
|
+
[:object_description_prefix, ":"],
|
75
|
+
[:whitespace, " "],
|
76
|
+
[:open_hash, "{"],
|
77
|
+
[:number, "1"],
|
78
|
+
[:refers, "=>"],
|
79
|
+
[:number, "3"],
|
80
|
+
[:close_hash, "}"],
|
81
|
+
[:object_description, ":each"],
|
82
|
+
[:close_object, ">"],
|
83
|
+
[:object_description, ":map"],
|
84
|
+
[:close_object, ">"],
|
85
|
+
]
|
86
|
+
end
|
87
|
+
|
25
88
|
please do check [2,Set[{1=>2}],4].map
|
26
|
-
tokens.should
|
89
|
+
tokens.should == [
|
27
90
|
[:open_object, "#<"],
|
28
91
|
[:object_class, "Enumerator"],
|
29
92
|
[:object_description_prefix, ":"],
|
30
|
-
[:
|
31
|
-
[:
|
93
|
+
[:whitespace, " "],
|
94
|
+
[:open_array, "["],
|
32
95
|
[:number, "2"],
|
33
96
|
[:comma, ","],
|
34
97
|
[:whitespace, " "],
|
@@ -47,7 +110,7 @@ describe tokenizer(__FILE__) do
|
|
47
110
|
[:comma, ","],
|
48
111
|
[:whitespace, " "],
|
49
112
|
[:number, "4"],
|
50
|
-
[:
|
113
|
+
[:close_array, "]"],
|
51
114
|
[:object_description, ":map"],
|
52
115
|
[:close_object, ">"],
|
53
116
|
]
|
@@ -58,7 +121,9 @@ describe tokenizer(__FILE__) do
|
|
58
121
|
[:open_object, "#<"],
|
59
122
|
[:object_class, "Enumerator"],
|
60
123
|
[:object_description_prefix, ":"],
|
61
|
-
[:
|
124
|
+
[:whitespace, " "],
|
125
|
+
[:class, "Wirb"],
|
126
|
+
[:object_description, ":tokenize("],
|
62
127
|
[:open_string, "\""],
|
63
128
|
[:string, "[2,3,4]"],
|
64
129
|
[:close_string, "\""],
|
@@ -75,8 +140,17 @@ describe tokenizer(__FILE__) do
|
|
75
140
|
[:class_separator, "::"],
|
76
141
|
[:object_class, "EratosthenesGenerator"],
|
77
142
|
[:object_description_prefix, ":"],
|
78
|
-
[:
|
79
|
-
[:object_description, '
|
143
|
+
[:object_address, /#{OBJECT_ID}/],
|
144
|
+
[:object_description, ' '],
|
145
|
+
[:object_variable_prefix, "@"],
|
146
|
+
[:object_variable, "last_prime"],
|
147
|
+
[:object_description, "="],
|
148
|
+
[:nil, "nil"],
|
149
|
+
[:object_description, ", "],
|
150
|
+
[:object_variable_prefix, "@"],
|
151
|
+
[:object_variable, "ubound"],
|
152
|
+
[:object_description, "="],
|
153
|
+
[:nil, "nil"],
|
80
154
|
[:close_object, ">"],
|
81
155
|
]
|
82
156
|
end
|
@@ -86,8 +160,8 @@ describe tokenizer(__FILE__) do
|
|
86
160
|
[:open_object, "#<"],
|
87
161
|
[:object_class, "Enumerator"],
|
88
162
|
[:object_description_prefix, ":"],
|
89
|
-
[:
|
90
|
-
[:
|
163
|
+
[:whitespace, " "],
|
164
|
+
[:open_array, "["],
|
91
165
|
[:open_hash, "{"],
|
92
166
|
[:number, "1"],
|
93
167
|
[:refers, "=>"],
|
@@ -98,7 +172,9 @@ describe tokenizer(__FILE__) do
|
|
98
172
|
[:open_object, "#<"],
|
99
173
|
[:object_class, "Enumerator"],
|
100
174
|
[:object_description_prefix, ":"],
|
101
|
-
[:
|
175
|
+
[:whitespace, " "],
|
176
|
+
[:class, "Wirb"],
|
177
|
+
[:object_description, ":tokenize("],
|
102
178
|
[:open_string, "\""],
|
103
179
|
[:string, "2"],
|
104
180
|
[:close_string, "\""],
|
@@ -130,19 +206,35 @@ describe tokenizer(__FILE__) do
|
|
130
206
|
[:open_object, "#<"],
|
131
207
|
[:object_class, "Enumerator"],
|
132
208
|
[:object_description_prefix, ":"],
|
133
|
-
[:
|
134
|
-
[:
|
209
|
+
[:whitespace, " "],
|
210
|
+
[:open_array, "["],
|
135
211
|
[:number, "5"],
|
136
212
|
[:comma, ","],
|
137
213
|
[:whitespace, " "],
|
138
214
|
[:number, "6"],
|
139
|
-
[:
|
215
|
+
[:close_array, "]"],
|
140
216
|
[:object_description, ":each"],
|
141
217
|
[:close_object, ">"],
|
142
|
-
[:
|
218
|
+
[:close_array, "]"],
|
143
219
|
[:object_description, ":map"],
|
144
220
|
[:close_object, ">"],
|
145
221
|
]
|
146
222
|
end
|
147
223
|
end
|
224
|
+
|
225
|
+
only18 do
|
226
|
+
if !defined?(RUBY_ENGINE) || RUBY_ENGINE == 'ruby' # TODO tests for jruby + rbx
|
227
|
+
please do check [3,4,5].each
|
228
|
+
tokens.should be_like [
|
229
|
+
[:open_object, "#<"],
|
230
|
+
[:object_class, "Enumerable"],
|
231
|
+
[:class_separator, "::"],
|
232
|
+
[:object_class, "Enumerator"],
|
233
|
+
[:object_description_prefix, ":"],
|
234
|
+
[:object_address, /#{OBJECT_ID}/],
|
235
|
+
[:close_object, ">"],
|
236
|
+
]
|
237
|
+
end
|
238
|
+
end
|
239
|
+
end
|
148
240
|
end
|
data/spec/tokenizer_misc_spec.rb
CHANGED
@@ -7,24 +7,53 @@ describe tokenizer(__FILE__) do
|
|
7
7
|
|
8
8
|
please do check StringIO.new 'wirb'
|
9
9
|
if RubyEngine.rbx?
|
10
|
+
=begin TODO sort ivars
|
10
11
|
tokens.should be_like [
|
11
12
|
[:open_object, "#<"],
|
12
13
|
[:object_class, "StringIO"],
|
13
14
|
[:object_description_prefix, ":"],
|
14
|
-
[:
|
15
|
-
[:object_description,
|
15
|
+
[:object_address, OBJECT_ID],
|
16
|
+
[:object_description, " "],
|
17
|
+
[:object_variable_prefix, "@"],
|
18
|
+
[:object_variable, "string"],
|
19
|
+
[:object_description, "="],
|
16
20
|
[:open_string, "\""],
|
17
21
|
[:string, "wirb"],
|
18
22
|
[:close_string, "\""],
|
19
|
-
[:object_description,
|
23
|
+
[:object_description, " "],
|
24
|
+
[:object_variable_prefix, "@"],
|
25
|
+
[:object_variable, "append"],
|
26
|
+
[:object_description, "="],
|
27
|
+
[:false, "false"],
|
28
|
+
[:object_description, " "],
|
29
|
+
[:object_variable_prefix, "@"],
|
30
|
+
[:object_variable, "readable"],
|
31
|
+
[:object_description, "="],
|
32
|
+
[:true, "true"],
|
33
|
+
[:object_description, " "],
|
34
|
+
[:object_variable_prefix, "@"],
|
35
|
+
[:object_variable, "writable"],
|
36
|
+
[:object_description, "="],
|
37
|
+
[:true, "true"],
|
38
|
+
[:object_description, " "],
|
39
|
+
[:object_variable_prefix, "@"],
|
40
|
+
[:object_variable, "pos"],
|
41
|
+
[:object_description, "="],
|
42
|
+
[:number, "0"],
|
43
|
+
[:object_description, " "],
|
44
|
+
[:object_variable_prefix, "@"],
|
45
|
+
[:object_variable, "lineno"],
|
46
|
+
[:object_description, "="],
|
47
|
+
[:number, "0"],
|
20
48
|
[:close_object, ">"],
|
21
49
|
]
|
50
|
+
=end
|
22
51
|
else
|
23
52
|
tokens.should be_like [
|
24
53
|
[:open_object, "#<"],
|
25
54
|
[:object_class, "StringIO"],
|
26
55
|
[:object_description_prefix, ":"],
|
27
|
-
[:
|
56
|
+
[:object_address, OBJECT_ID],
|
28
57
|
[:close_object, ">"],
|
29
58
|
]
|
30
59
|
end
|
@@ -8,7 +8,7 @@ describe tokenizer(__FILE__) do
|
|
8
8
|
[:open_object, "#<"],
|
9
9
|
[:object_class, "Object"],
|
10
10
|
[:object_description_prefix, ":"],
|
11
|
-
[:
|
11
|
+
[:object_address, OBJECT_ID],
|
12
12
|
[:close_object, ">"],
|
13
13
|
]
|
14
14
|
end
|
@@ -18,7 +18,7 @@ describe tokenizer(__FILE__) do
|
|
18
18
|
[:open_object, "#<"],
|
19
19
|
[:object_class, "Proc"],
|
20
20
|
[:object_description_prefix, ":"],
|
21
|
-
[:
|
21
|
+
[:object_address, OBJECT_ID],
|
22
22
|
[:object_line_prefix, "@"],
|
23
23
|
[:object_line, /.*tokenizer_object_spec.rb:/],
|
24
24
|
[:object_line_number, /\d+/],
|
@@ -31,7 +31,7 @@ describe tokenizer(__FILE__) do
|
|
31
31
|
[:open_object, "#<"],
|
32
32
|
[:object_class, "Proc"],
|
33
33
|
[:object_description_prefix, ":"],
|
34
|
-
[:
|
34
|
+
[:object_address, OBJECT_ID],
|
35
35
|
[:object_line_prefix, "@"],
|
36
36
|
[:object_line, /.*tokenizer_object_spec.rb:/],
|
37
37
|
[:object_line_number, /\d+/],
|
@@ -46,7 +46,7 @@ describe tokenizer(__FILE__) do
|
|
46
46
|
[:open_object, "#<"],
|
47
47
|
[:object_class, "Binding"],
|
48
48
|
[:object_description_prefix, ":"],
|
49
|
-
[:
|
49
|
+
[:object_address, OBJECT_ID],
|
50
50
|
[:close_object, ">"],
|
51
51
|
]
|
52
52
|
end
|
@@ -79,7 +79,7 @@ describe tokenizer(__FILE__) do
|
|
79
79
|
[:object_class, "Class"],
|
80
80
|
[:object_description_prefix, ":"],
|
81
81
|
[:object_description, '#<Class:#<Module:'],
|
82
|
-
[:
|
82
|
+
[:object_address, OBJECT_ID],
|
83
83
|
[:object_description, '>>'],
|
84
84
|
[:close_object, ">"]
|
85
85
|
]
|
@@ -105,4 +105,30 @@ describe tokenizer(__FILE__) do
|
|
105
105
|
[:close_object, ">"],
|
106
106
|
]
|
107
107
|
end
|
108
|
+
|
109
|
+
please do
|
110
|
+
class Hey
|
111
|
+
def initialize
|
112
|
+
@hallo = [1,42]
|
113
|
+
end
|
114
|
+
end
|
115
|
+
check Hey.new
|
116
|
+
tokens.should be_like [
|
117
|
+
[:open_object, "#<"],
|
118
|
+
[:object_class, "Hey"],
|
119
|
+
[:object_description_prefix, ":"],
|
120
|
+
[:object_address, /#{OBJECT_ID}/],
|
121
|
+
[:object_description, " "],
|
122
|
+
[:object_variable_prefix, "@"],
|
123
|
+
[:object_variable, "hallo"],
|
124
|
+
[:object_description, "="],
|
125
|
+
[:open_array, "["],
|
126
|
+
[:number, "1"],
|
127
|
+
[:comma, ","],
|
128
|
+
[:whitespace, " "],
|
129
|
+
[:number, "42"],
|
130
|
+
[:close_array, "]"],
|
131
|
+
[:close_object, ">"]
|
132
|
+
]
|
133
|
+
end
|
108
134
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
describe tokenizer(__FILE__) do
|
2
|
+
after :each do check_value end
|
3
|
+
|
4
|
+
please do now = Time.now
|
5
|
+
check [Time.now, Time.now]
|
6
|
+
tokens.should == [
|
7
|
+
[:open_array, "["],
|
8
|
+
[:time, now.to_s],
|
9
|
+
[:comma, ","],
|
10
|
+
[:whitespace, " "],
|
11
|
+
[:time, now.to_s],
|
12
|
+
[:close_array, "]"],
|
13
|
+
]
|
14
|
+
end
|
15
|
+
end
|
data/wirb.gemspec
CHANGED
@@ -7,7 +7,7 @@ Gem::Specification.new do |s|
|
|
7
7
|
s.version = Wirb::VERSION
|
8
8
|
s.authors = ["Jan Lelis"]
|
9
9
|
s.email = "mail@janlelis.de"
|
10
|
-
s.homepage = "
|
10
|
+
s.homepage = "https://github.com/janlelis/wirb"
|
11
11
|
s.summary = "Colorizes your irb results."
|
12
12
|
s.description = "Colorizes your irb results. It's based on Wirble but only provides result highlighting. Just call Wirb.start and enjoy the colors ;)."
|
13
13
|
s.required_rubygems_version = '>= 1.3.6'
|
@@ -17,5 +17,14 @@ Gem::Specification.new do |s|
|
|
17
17
|
s.license = 'MIT'
|
18
18
|
s.add_development_dependency 'rspec'
|
19
19
|
s.add_development_dependency 'rspec-core'
|
20
|
-
s.add_development_dependency 'zucker', '>=
|
20
|
+
s.add_development_dependency 'zucker', '>= 11'
|
21
|
+
|
22
|
+
len = s.homepage.size
|
23
|
+
s.post_install_message = \
|
24
|
+
(" ┌── " + "info ".ljust(len-2,'%') + "─┐\n" +
|
25
|
+
" J-_-L │ " + s.homepage + " │\n" +
|
26
|
+
" ├── " + "usage ".ljust(len-2,'%') + "─┤\n" +
|
27
|
+
" │ " + "require 'wirb'".ljust(len,' ') + " │\n" +
|
28
|
+
" │ " + "Wirb.start".ljust(len,' ') + " │\n" +
|
29
|
+
" └─" + '─'*len + "─┘").gsub('%', '─') # 1.8 workaround
|
21
30
|
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: wirb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.
|
5
|
+
version: 0.3.0
|
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-05-
|
13
|
+
date: 2011-05-26 00:00:00 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rspec
|
@@ -42,7 +42,7 @@ dependencies:
|
|
42
42
|
requirements:
|
43
43
|
- - ">="
|
44
44
|
- !ruby/object:Gem::Version
|
45
|
-
version: "
|
45
|
+
version: "11"
|
46
46
|
type: :development
|
47
47
|
version_requirements: *id003
|
48
48
|
description: Colorizes your irb results. It's based on Wirble but only provides result highlighting. Just call Wirb.start and enjoy the colors ;).
|
@@ -75,6 +75,7 @@ files:
|
|
75
75
|
- spec/tokenizer_set_spec.rb
|
76
76
|
- spec/tokenizer_object_spec.rb
|
77
77
|
- spec/tokenizer_nested_spec.rb
|
78
|
+
- spec/tokenizer_time_spec.rb
|
78
79
|
- spec/tokenizer_string_spec.rb
|
79
80
|
- COPYING.txt
|
80
81
|
- README.rdoc
|
@@ -82,10 +83,10 @@ files:
|
|
82
83
|
- Rakefile
|
83
84
|
- wirb.gemspec
|
84
85
|
- .gemtest
|
85
|
-
homepage:
|
86
|
+
homepage: https://github.com/janlelis/wirb
|
86
87
|
licenses:
|
87
88
|
- MIT
|
88
|
-
post_install_message:
|
89
|
+
post_install_message: " \xE2\x94\x8C\xE2\x94\x80\xE2\x94\x80 info \xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x90\n J-_-L \xE2\x94\x82 https://github.com/janlelis/wirb \xE2\x94\x82\n \xE2\x94\x9C\xE2\x94\x80\xE2\x94\x80 usage \xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\xA4\n \xE2\x94\x82 require 'wirb' \xE2\x94\x82\n \xE2\x94\x82 Wirb.start \xE2\x94\x82\n \xE2\x94\x94\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x80\xE2\x94\x98"
|
89
90
|
rdoc_options: []
|
90
91
|
|
91
92
|
require_paths:
|