rib 1.5.4 → 1.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.travis.yml +8 -14
- data/CHANGES.md +18 -0
- data/Gemfile +0 -5
- data/README.md +30 -13
- data/lib/rib/api.rb +4 -0
- data/lib/rib/core/multiline.rb +6 -4
- data/lib/rib/extra/autoindent.rb +8 -2
- data/lib/rib/extra/byebug.rb +100 -0
- data/lib/rib/more/beep.rb +4 -5
- data/lib/rib/more/bottomup_backtrace.rb +1 -1
- data/lib/rib/more/caller.rb +5 -1
- data/lib/rib/more/color.rb +3 -2
- data/lib/rib/test.rb +35 -12
- data/lib/rib/test/multiline.rb +10 -6
- data/lib/rib/version.rb +1 -1
- data/rib.gemspec +5 -4
- data/test/core/test_history.rb +1 -2
- data/test/core/test_squeeze_history.rb +1 -2
- data/test/extra/test_autoindent.rb +69 -8
- data/test/more/test_beep.rb +13 -10
- data/test/more/test_multiline_history.rb +1 -3
- data/test/test_shell.rb +18 -12
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 7f537a283fed2eef2c6e07ede1e4cc027dc28f4a4f3d4c59cee58338b02cad9c
|
4
|
+
data.tar.gz: c25ade3869c7319ce557c1ab50d7029126af6d171fc892d0032a259c848efa97
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: eba78ab629e758e66963db826cd39a2b9ec7b392c4b451f26ab680ab9924a7d3748f9d1ddd9966f2296f5e5aef0ac30cd389d2449505f55f1662b43a1fb3605e
|
7
|
+
data.tar.gz: f35eac4d8ed09a0e6ab1dc21a63ed1aea6fde118f110adf280044cbf3fb39a1ce748a77f558fe4d7115ec7b519428cefb28c11ad31b655794529ad3b89758d56
|
data/.travis.yml
CHANGED
@@ -1,23 +1,17 @@
|
|
1
1
|
sudo: false
|
2
2
|
language: ruby
|
3
3
|
|
4
|
-
before_install:
|
5
|
-
- rvm get head
|
6
|
-
- rvm reload
|
7
|
-
- rvm use --install $TRAVIS_RUBY_VERSION --binary --latest
|
8
4
|
install: 'gem install bundler; bundle install --retry=3'
|
9
|
-
|
5
|
+
before_script: unset CI
|
6
|
+
script: 'ruby -vr bundler/setup -S rake test'
|
10
7
|
|
11
8
|
matrix:
|
12
9
|
include:
|
13
|
-
- rvm: 2.
|
14
|
-
|
15
|
-
- rvm: 2.
|
10
|
+
- rvm: 2.4
|
11
|
+
env: RUBYOPT=--enable-frozen-string-literal
|
12
|
+
- rvm: 2.5
|
13
|
+
env: RUBYOPT=--enable-frozen-string-literal
|
16
14
|
- rvm: ruby-head
|
17
|
-
|
15
|
+
env: RUBYOPT=--enable-frozen-string-literal
|
16
|
+
- rvm: jruby
|
18
17
|
env: JRUBY_OPTS=--debug
|
19
|
-
- rvm: rbx
|
20
|
-
|
21
|
-
allow_failures:
|
22
|
-
- rvm: 2.4.1
|
23
|
-
- rvm: rbx
|
data/CHANGES.md
CHANGED
@@ -1,5 +1,23 @@
|
|
1
1
|
# CHANGES
|
2
2
|
|
3
|
+
## Rib 1.6.0 -- 2018-06-20
|
4
|
+
|
5
|
+
* [core/multiline] Support for JRuby 9.2.0.0 is fixed
|
6
|
+
* [more/beep] It would now beep every single time when any evaluation took
|
7
|
+
longer than the threshold.
|
8
|
+
* [more/color] Fix whenever the input is just `next` or `break`
|
9
|
+
* [more/bottomup_backtrace] This would no longer format backtrace twice
|
10
|
+
* [more/caller] It would now properly use the enabled plugins
|
11
|
+
* [extra/autoindent] It would now indent with `ensure` for `begin` and `def`.
|
12
|
+
Thanks @MITSUBOSHI https://github.com/godfat/rib/pull/21 and
|
13
|
+
@alpaca-tc https://github.com/godfat/rib/pull/17
|
14
|
+
* [extra/autoindent] It would now indent with `for`.
|
15
|
+
Thanks @MITSUBOSHI https://github.com/godfat/rib/pull/18
|
16
|
+
* [extra/autoindent] It would now indent with `()` and `[]`.
|
17
|
+
Thanks @MITSUBOSHI https://github.com/godfat/rib/pull/20 and
|
18
|
+
https://github.com/godfat/rib/pull/19
|
19
|
+
* [extra/byebug] This is now work-in-progress.
|
20
|
+
|
3
21
|
## Rib 1.5.4 -- 2017-10-23
|
4
22
|
|
5
23
|
* Removed unnecessary method definition for `puts`
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Rib [![Build Status](https://secure.travis-ci.org/godfat/rib.
|
1
|
+
# Rib [![Build Status](https://secure.travis-ci.org/godfat/rib.svg?branch=master)](http://travis-ci.org/godfat/rib) [![Coverage Status](https://coveralls.io/repos/github/godfat/rib/badge.svg)](https://coveralls.io/github/godfat/rib) [![Join the chat at https://gitter.im/godfat/rib](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/godfat/rib)
|
2
2
|
|
3
3
|
by Lin Jen-Shin ([godfat](http://godfat.org))
|
4
4
|
|
@@ -24,7 +24,7 @@ be simple, lightweight and modular so that everyone could customize Rib.
|
|
24
24
|
|
25
25
|
## REQUIREMENTS:
|
26
26
|
|
27
|
-
* Tested with MRI (official CRuby)
|
27
|
+
* Tested with MRI (official CRuby) and JRuby.
|
28
28
|
* All gem dependencies are optional, but it's highly recommended to use
|
29
29
|
Rib with [bond][] for tab completion.
|
30
30
|
|
@@ -132,6 +132,31 @@ file. To see a list of overridable API, please read [api.rb][]
|
|
132
132
|
|
133
133
|
[api.rb]: https://github.com/godfat/rib/blob/master/lib/rib/api.rb
|
134
134
|
|
135
|
+
#### Disable enabled plugins
|
136
|
+
|
137
|
+
While it's convenient to just `require 'rib/all'`, you might not want to use
|
138
|
+
all the plugins. No worries, you don't have to list everything in order to
|
139
|
+
not use something. For example, you might not get used to `bottomup_backtrace`
|
140
|
+
and don't want to use it. You could put this in your config:
|
141
|
+
|
142
|
+
``` ruby
|
143
|
+
require 'rib/all'
|
144
|
+
|
145
|
+
Rib::BottomupBacktrace.disable
|
146
|
+
```
|
147
|
+
|
148
|
+
This could disable `bottomup_backtrace` so you get regular top-down backtrace
|
149
|
+
with all other plugins. This is particularly useful whenever there's a bug
|
150
|
+
in one of the plugins, and you might need to disable some plugins in order to
|
151
|
+
debug. You could always enable it again with:
|
152
|
+
|
153
|
+
``` ruby
|
154
|
+
Rib::BottomupBacktrace.enable
|
155
|
+
```
|
156
|
+
|
157
|
+
You could do this any time, in the config, or in the shell session. No need to
|
158
|
+
restart anything, because it takes effect immediately.
|
159
|
+
|
135
160
|
#### Rib home and history file
|
136
161
|
|
137
162
|
Rib home is used to store a config file and a history file, which is
|
@@ -313,15 +338,6 @@ or having conflicted semantics.
|
|
313
338
|
|
314
339
|
Which would print the result with hirb.
|
315
340
|
|
316
|
-
* `require 'rib/extra/debugger'` This plugin is depending on:
|
317
|
-
|
318
|
-
1. [debugger][]
|
319
|
-
|
320
|
-
Which introduces `Rib.debug`, which would do similar things as
|
321
|
-
`Rib.anchor` but only more powerful. However, this is not well
|
322
|
-
tested and might not work well. Please let me know if you have
|
323
|
-
any issue using it, thanks!
|
324
|
-
|
325
341
|
* `require 'rib/extra/paging'` This plugin is depending on `less` and `tput`.
|
326
342
|
|
327
343
|
Which would pass the result to `less` (or `$PAGER` if set) if
|
@@ -332,7 +348,6 @@ or having conflicted semantics.
|
|
332
348
|
|
333
349
|
[readline_buffer]: https://github.com/godfat/readline_buffer
|
334
350
|
[hirb]: https://github.com/cldwalker/hirb
|
335
|
-
[debugger]: https://github.com/cldwalker/debugger
|
336
351
|
|
337
352
|
### As a debugging/interacting tool
|
338
353
|
|
@@ -454,15 +469,17 @@ simple, simpler than rib-rails.
|
|
454
469
|
* ayaya (@ayamomiji)
|
455
470
|
* Lin Jen-Shin (@godfat)
|
456
471
|
* Mr. Big Cat (@miaout17)
|
472
|
+
* @alpaca-tc
|
457
473
|
* @bootleq
|
458
474
|
* @lulalala
|
475
|
+
* @MITSUBOSH
|
459
476
|
* @tka
|
460
477
|
|
461
478
|
## LICENSE:
|
462
479
|
|
463
480
|
Apache License 2.0 (Apache-2.0)
|
464
481
|
|
465
|
-
Copyright (c) 2011-
|
482
|
+
Copyright (c) 2011-2018, Lin Jen-Shin (godfat)
|
466
483
|
|
467
484
|
Licensed under the Apache License, Version 2.0 (the "License");
|
468
485
|
you may not use this file except in compliance with the License.
|
data/lib/rib/api.rb
CHANGED
data/lib/rib/core/multiline.rb
CHANGED
@@ -59,11 +59,13 @@ module Rib; module Multiline
|
|
59
59
|
[ # string or regexp
|
60
60
|
"unterminated \\w+ meets end of file",
|
61
61
|
# jruby
|
62
|
-
"syntax error, unexpected"
|
63
|
-
" t(UPLUS|UMINUS|STAR|REGEXP_BEG|AMPER)",
|
64
|
-
"syntax error, unexpected end-of-file",
|
62
|
+
"syntax error, unexpected end\\-of\\-file",
|
65
63
|
# jruby 9.0.4.0
|
66
|
-
"formal argument must be local variable"
|
64
|
+
"formal argument must be local variable",
|
65
|
+
# jruby 9.2.0.0
|
66
|
+
"syntax error, unexpected (#{RUBY20_IO.join('|')})",
|
67
|
+
"syntax error, unexpected '\\W'"
|
68
|
+
].join('|'))
|
67
69
|
end
|
68
70
|
|
69
71
|
# --------------- Rib API ---------------
|
data/lib/rib/extra/autoindent.rb
CHANGED
@@ -24,7 +24,11 @@ module Rib; module Autoindent
|
|
24
24
|
# rescue E => e
|
25
25
|
# rescue E=> e
|
26
26
|
# rescue E =>e
|
27
|
-
|
27
|
+
# ensure
|
28
|
+
/^begin$/ =>
|
29
|
+
/^(end)\b|^else$|^rescue *((\w+)? *(=> *\w+)?)?$|^ensure$/,
|
30
|
+
/^def\b/ =>
|
31
|
+
/^(end)\b|^else$|^rescue *((\w+)? *(=> *\w+)?)?$|^ensure$/,
|
28
32
|
# elsif Expression
|
29
33
|
# consider cases:
|
30
34
|
# elsif(true)
|
@@ -34,10 +38,10 @@ module Rib; module Autoindent
|
|
34
38
|
/^if\b/ => /^(end)\b|^else$|^elsif\b/,
|
35
39
|
/^unless\b/ => /^(end)\b|^else$|^elsif\b/,
|
36
40
|
/^case\b/ => /^(end)\b|^else$|when\b/ ,
|
37
|
-
/^def\b/ => /^(end)\b/ ,
|
38
41
|
/^class\b/ => /^(end)\b/ ,
|
39
42
|
/^module\b/ => /^(end)\b/ ,
|
40
43
|
/^while\b/ => /^(end)\b/ ,
|
44
|
+
/^for\b/ => /^(end)\b/ ,
|
41
45
|
/^until\b/ => /^(end)\b/ ,
|
42
46
|
# consider cases:
|
43
47
|
# 'do
|
@@ -52,6 +56,8 @@ module Rib; module Autoindent
|
|
52
56
|
# begin
|
53
57
|
/do( *\|.*\|)?$/ => /^(end)\b/ ,
|
54
58
|
/\{( *\|.*\|)?$/ => /^(\})\B/ ,
|
59
|
+
/\($/ => /^(\))\B/ ,
|
60
|
+
/\[$/ => /^(\])\B/ ,
|
55
61
|
# those are too hard to deal with, so we use syntax error to double check
|
56
62
|
# what about this then?
|
57
63
|
# v = if true
|
@@ -0,0 +1,100 @@
|
|
1
|
+
|
2
|
+
require 'rib/more/anchor'
|
3
|
+
require 'byebug/core'
|
4
|
+
|
5
|
+
# This is based on lib/byebug/processors/pry_processor.rb
|
6
|
+
|
7
|
+
module Rib; module Byebug
|
8
|
+
extend Plugin
|
9
|
+
Shell.use(self)
|
10
|
+
|
11
|
+
module Imp
|
12
|
+
def byebug
|
13
|
+
return if Rib::Byebug.disabled?
|
14
|
+
|
15
|
+
::Byebug::RibProcessor.start
|
16
|
+
end
|
17
|
+
|
18
|
+
def location
|
19
|
+
Rib.shell.config[:byebug].location
|
20
|
+
end
|
21
|
+
|
22
|
+
def step times=1
|
23
|
+
throw :rib_byebug, [:step, times]
|
24
|
+
end
|
25
|
+
|
26
|
+
def next lines=1
|
27
|
+
throw :rib_byebug, [:next, lines]
|
28
|
+
end
|
29
|
+
|
30
|
+
def finish
|
31
|
+
throw :rib_byebug, [:finish]
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
Rib.extend(Imp)
|
36
|
+
end; end
|
37
|
+
|
38
|
+
module Byebug
|
39
|
+
class RibProcessor < CommandProcessor
|
40
|
+
def self.start
|
41
|
+
Byebug.start
|
42
|
+
Setting[:autolist] = false
|
43
|
+
Context.processor = self
|
44
|
+
steps = caller.index{ |path| !path.start_with?(__FILE__) }
|
45
|
+
Byebug.current_context.step_out(steps + 2, true)
|
46
|
+
end
|
47
|
+
|
48
|
+
def at_line
|
49
|
+
resume_rib
|
50
|
+
end
|
51
|
+
|
52
|
+
def at_return(_return_value)
|
53
|
+
resume_rib
|
54
|
+
end
|
55
|
+
|
56
|
+
def at_end
|
57
|
+
resume_rib
|
58
|
+
end
|
59
|
+
|
60
|
+
def at_breakpoint(breakpoint)
|
61
|
+
raise NotImplementedError
|
62
|
+
end
|
63
|
+
|
64
|
+
def location
|
65
|
+
context.location
|
66
|
+
end
|
67
|
+
|
68
|
+
private
|
69
|
+
|
70
|
+
def print_location
|
71
|
+
shell = Rib.shell
|
72
|
+
shell.puts(shell.format_backtrace([location]).first)
|
73
|
+
end
|
74
|
+
|
75
|
+
def resume_rib
|
76
|
+
byebug_binding = frame._binding
|
77
|
+
|
78
|
+
print_location
|
79
|
+
|
80
|
+
action, *args = catch(:rib_byebug) do
|
81
|
+
allowing_other_threads do
|
82
|
+
Rib.anchor byebug_binding, :byebug => self
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
perform(action, args)
|
87
|
+
end
|
88
|
+
|
89
|
+
def perform action, args
|
90
|
+
case action
|
91
|
+
when :step
|
92
|
+
context.step_into(*args, frame.pos)
|
93
|
+
when :next
|
94
|
+
context.step_over(*args, frame.pos)
|
95
|
+
when :finish
|
96
|
+
context.step_out(1)
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
data/lib/rib/more/beep.rb
CHANGED
@@ -7,12 +7,11 @@ module Rib; module Beep
|
|
7
7
|
|
8
8
|
# --------------- Rib API ---------------
|
9
9
|
|
10
|
-
def
|
11
|
-
super
|
12
|
-
return self if Beep.disabled?
|
10
|
+
def loop_once
|
11
|
+
return super if Beep.disabled?
|
13
12
|
beep if started_at && (Time.now - started_at) > beep_threshold
|
14
|
-
|
15
|
-
|
13
|
+
config[:started_at] = Time.now
|
14
|
+
super
|
16
15
|
end
|
17
16
|
|
18
17
|
private
|
@@ -10,7 +10,7 @@ module Rib; module BottomupBacktrace
|
|
10
10
|
def format_error err
|
11
11
|
return super if BottomupBacktrace.disabled?
|
12
12
|
message, backtrace = get_error(err)
|
13
|
-
" #{
|
13
|
+
" #{backtrace.join("\n ")}\n#{message}"
|
14
14
|
end
|
15
15
|
|
16
16
|
def format_backtrace backtrace
|
data/lib/rib/more/caller.rb
CHANGED
@@ -9,7 +9,11 @@ module Rib; module Caller
|
|
9
9
|
def caller *filters
|
10
10
|
return if Rib::Caller.disabled?
|
11
11
|
|
12
|
-
|
12
|
+
display_backtrace(super().drop(1), *filters)
|
13
|
+
end
|
14
|
+
|
15
|
+
def display_backtrace raw_backtrace, *filters
|
16
|
+
backtrace = Rib.shell.format_backtrace(raw_backtrace)
|
13
17
|
|
14
18
|
lib = %r{\brib-#{Rib::VERSION}/lib/rib/}
|
15
19
|
if backtrace.first =~ lib
|
data/lib/rib/more/color.rb
CHANGED
@@ -20,7 +20,7 @@ module Rib; module Color
|
|
20
20
|
def get_error err
|
21
21
|
return super if Color.disabled?
|
22
22
|
message, backtrace = super
|
23
|
-
[format_color(err, message),
|
23
|
+
[format_color(err, message), backtrace]
|
24
24
|
end
|
25
25
|
|
26
26
|
def warn message
|
@@ -87,7 +87,8 @@ module Rib; module Color
|
|
87
87
|
backtrace.map{ |b|
|
88
88
|
path, msgs = b.split(':', 2)
|
89
89
|
dir, sep, file = path.rpartition('/')
|
90
|
-
|
90
|
+
msgs ||= (line - 1).to_s # msgs would be nil when input is next/break
|
91
|
+
msg = msgs.sub(/(\d+)(:?)/){red{$1}+$2}.sub(/`.+?'/){green{$&}}
|
91
92
|
|
92
93
|
"#{dir+sep}#{yellow{file}}:#{msg}"
|
93
94
|
}
|
data/lib/rib/test.rb
CHANGED
@@ -20,14 +20,17 @@ copy :rib do
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def new_shell opts={}
|
23
|
-
|
24
|
-
|
25
|
-
|
23
|
+
result = Rib::Shell.new(
|
24
|
+
{:binding => Object.new.instance_eval{binding}}.
|
25
|
+
merge(opts))
|
26
|
+
yield(result) if block_given?
|
27
|
+
result.before_loop
|
26
28
|
end
|
27
29
|
|
28
30
|
def stub_output
|
29
31
|
stub(shell).print(is_a(String)){}
|
30
32
|
stub(shell).puts(is_a(String)){}
|
33
|
+
stub(shell).puts{}
|
31
34
|
end
|
32
35
|
|
33
36
|
def readline?
|
@@ -51,9 +54,10 @@ copy :rib do
|
|
51
54
|
Rib.disable_plugins(rest)
|
52
55
|
end
|
53
56
|
|
54
|
-
|
57
|
+
describe "enabling #{plugins}" do
|
58
|
+
block.call
|
55
59
|
|
56
|
-
|
60
|
+
case ENV['TEST_LEVEL']
|
57
61
|
when '0'
|
58
62
|
when '1'
|
59
63
|
test_level1(rest, block)
|
@@ -63,13 +67,18 @@ copy :rib do
|
|
63
67
|
test_level3(rest, block)
|
64
68
|
else # test_level3 is too slow because of rr (i guess)
|
65
69
|
test_level2(rest, block)
|
70
|
+
end
|
66
71
|
end
|
67
72
|
end
|
68
73
|
|
69
74
|
def test_level1 rest, block
|
70
75
|
rest.each{ |target|
|
71
76
|
target.enable
|
72
|
-
|
77
|
+
|
78
|
+
describe "also enabling #{target}" do
|
79
|
+
block.call
|
80
|
+
end
|
81
|
+
|
73
82
|
target.disable
|
74
83
|
}
|
75
84
|
end
|
@@ -77,17 +86,31 @@ copy :rib do
|
|
77
86
|
def test_level2 rest, block
|
78
87
|
rest.combination(2).each{ |targets|
|
79
88
|
Rib.enable_plugins(targets)
|
80
|
-
|
89
|
+
|
90
|
+
describe "also enabling #{targets.join(', ')}" do
|
91
|
+
block.call
|
92
|
+
end
|
93
|
+
|
81
94
|
Rib.disable_plugins(targets)
|
82
95
|
}
|
83
96
|
end
|
84
97
|
|
85
98
|
def test_level3 rest, block
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
99
|
+
if rest.empty?
|
100
|
+
block.call
|
101
|
+
else
|
102
|
+
rest[0].enable
|
103
|
+
|
104
|
+
describe "also enabling #{rest[0]}" do
|
105
|
+
test_level3(rest[1..-1], block)
|
106
|
+
end
|
107
|
+
|
108
|
+
rest[0].disable
|
109
|
+
|
110
|
+
describe "disabling #{rest[0]}" do
|
111
|
+
test_level3(rest[1..-1], block)
|
112
|
+
end
|
113
|
+
end
|
91
114
|
end
|
92
115
|
end
|
93
116
|
end
|
data/lib/rib/test/multiline.rb
CHANGED
@@ -18,7 +18,7 @@ copy :setup_multiline do
|
|
18
18
|
if err
|
19
19
|
mock(shell).print_eval_error(is_a(err)){}
|
20
20
|
else
|
21
|
-
mock(shell).print_result(
|
21
|
+
mock(shell).print_result(is_a(Object)){}
|
22
22
|
end
|
23
23
|
shell.loop_once
|
24
24
|
ok
|
@@ -30,17 +30,15 @@ copy :setup_multiline do
|
|
30
30
|
input(line)
|
31
31
|
shell.loop_once
|
32
32
|
}
|
33
|
-
input_done(lines.last, err)
|
34
|
-
shell.eval_binding.eval(str)
|
35
|
-
end
|
33
|
+
input_done(lines.last, err)
|
36
34
|
end
|
37
|
-
end
|
38
35
|
|
39
|
-
copy :multiline do
|
40
36
|
before do
|
41
37
|
stub_output
|
42
38
|
end
|
39
|
+
end
|
43
40
|
|
41
|
+
copy :multiline do
|
44
42
|
would 'work with no prompt' do
|
45
43
|
shell.config[:prompt] = ''
|
46
44
|
check <<~RUBY
|
@@ -142,6 +140,12 @@ copy :multiline do
|
|
142
140
|
RUBY
|
143
141
|
end
|
144
142
|
|
143
|
+
would 'SyntaxError' do
|
144
|
+
check <<~RUBY, SyntaxError
|
145
|
+
s-y n
|
146
|
+
RUBY
|
147
|
+
end
|
148
|
+
|
145
149
|
would 'begin with SyntaxError' do
|
146
150
|
check <<~RUBY, SyntaxError
|
147
151
|
begin
|
data/lib/rib/version.rb
CHANGED
data/rib.gemspec
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
# stub: rib 1.
|
2
|
+
# stub: rib 1.6.0 ruby lib
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = "rib".freeze
|
6
|
-
s.version = "1.
|
6
|
+
s.version = "1.6.0"
|
7
7
|
|
8
8
|
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
|
9
9
|
s.require_paths = ["lib".freeze]
|
10
10
|
s.authors = ["Lin Jen-Shin (godfat)".freeze]
|
11
|
-
s.date = "
|
11
|
+
s.date = "2018-06-20"
|
12
12
|
s.description = "Ruby-Interactive-ruBy -- Yet another interactive Ruby shell\n\nRib is based on the design of [ripl][] and the work of [ripl-rc][], some of\nthe features are also inspired by [pry][]. The aim of Rib is to be fully\nfeatured and yet very easy to opt-out or opt-in other features. It shall\nbe simple, lightweight and modular so that everyone could customize Rib.\n\n[ripl]: https://github.com/cldwalker/ripl\n[ripl-rc]: https://github.com/godfat/ripl-rc\n[pry]: https://github.com/pry/pry".freeze
|
13
13
|
s.email = ["godfat (XD) godfat.org".freeze]
|
14
14
|
s.executables = [
|
@@ -51,6 +51,7 @@ Gem::Specification.new do |s|
|
|
51
51
|
"lib/rib/core/strip_backtrace.rb".freeze,
|
52
52
|
"lib/rib/debug.rb".freeze,
|
53
53
|
"lib/rib/extra/autoindent.rb".freeze,
|
54
|
+
"lib/rib/extra/byebug.rb".freeze,
|
54
55
|
"lib/rib/extra/hirb.rb".freeze,
|
55
56
|
"lib/rib/extra/paging.rb".freeze,
|
56
57
|
"lib/rib/extra/spring.rb".freeze,
|
@@ -92,7 +93,7 @@ Gem::Specification.new do |s|
|
|
92
93
|
"test/test_shell.rb".freeze]
|
93
94
|
s.homepage = "https://github.com/godfat/rib".freeze
|
94
95
|
s.licenses = ["Apache-2.0".freeze]
|
95
|
-
s.rubygems_version = "2.
|
96
|
+
s.rubygems_version = "2.7.7".freeze
|
96
97
|
s.summary = "Ruby-Interactive-ruBy -- Yet another interactive Ruby shell".freeze
|
97
98
|
s.test_files = [
|
98
99
|
"test/core/test_completion.rb".freeze,
|
data/test/core/test_history.rb
CHANGED
@@ -39,7 +39,7 @@ describe Rib::Autoindent do
|
|
39
39
|
expect(@indent.stack_size).eq size
|
40
40
|
end
|
41
41
|
|
42
|
-
would 'begin rescue else end' do
|
42
|
+
would 'begin rescue else ensure end' do
|
43
43
|
ri('begin' , 1)
|
44
44
|
ri( '1' , 1)
|
45
45
|
le('rescue' , 1)
|
@@ -53,6 +53,30 @@ describe Rib::Autoindent do
|
|
53
53
|
le('rescue E=> e' , 1)
|
54
54
|
le('rescue E =>e ' , 1)
|
55
55
|
le('else' , 1)
|
56
|
+
ri( '1' , 1)
|
57
|
+
le('ensure' , 1)
|
58
|
+
ri( '1' , 1)
|
59
|
+
le('end while nil' , 0)
|
60
|
+
end
|
61
|
+
|
62
|
+
would 'def rescue else ensure end' do
|
63
|
+
ri('def f a' , 1)
|
64
|
+
ri( 'if a' , 2)
|
65
|
+
le( 'end' , 1)
|
66
|
+
le('rescue' , 1)
|
67
|
+
ri( '1' , 1)
|
68
|
+
le('rescue=>e' , 1)
|
69
|
+
le('rescue => e' , 1)
|
70
|
+
le('rescue =>e' , 1)
|
71
|
+
le('rescue E=>e ' , 1)
|
72
|
+
le('rescue E' , 1)
|
73
|
+
le('rescue E => e ', 1)
|
74
|
+
le('rescue E=> e' , 1)
|
75
|
+
le('rescue E =>e ' , 1)
|
76
|
+
le('else' , 1)
|
77
|
+
ri( '1' , 1)
|
78
|
+
le('ensure' , 1)
|
79
|
+
ri( '1' , 1)
|
56
80
|
le('end while nil' , 0)
|
57
81
|
end
|
58
82
|
|
@@ -96,13 +120,6 @@ describe Rib::Autoindent do
|
|
96
120
|
le('end' , 0)
|
97
121
|
end
|
98
122
|
|
99
|
-
would 'def end' do
|
100
|
-
ri('def f a' , 1)
|
101
|
-
ri( 'if a' , 2)
|
102
|
-
le( 'end' , 1)
|
103
|
-
le('end' , 0)
|
104
|
-
end
|
105
|
-
|
106
123
|
would 'class Object end' do
|
107
124
|
ri('class Object' , 1)
|
108
125
|
ri( 'if true' , 2)
|
@@ -125,6 +142,13 @@ describe Rib::Autoindent do
|
|
125
142
|
le('end' , 0)
|
126
143
|
end
|
127
144
|
|
145
|
+
would 'for end' do
|
146
|
+
ri('for x in 1..2' , 1)
|
147
|
+
ri( 'if true' , 2)
|
148
|
+
le( 'end' , 1)
|
149
|
+
le('end' , 0)
|
150
|
+
end
|
151
|
+
|
128
152
|
would 'until end' do
|
129
153
|
ri('until true' , 1)
|
130
154
|
ri( 'if true' , 2)
|
@@ -142,4 +166,41 @@ describe Rib::Autoindent do
|
|
142
166
|
le( 'end' , 1)
|
143
167
|
le('end' , 0)
|
144
168
|
end
|
169
|
+
|
170
|
+
would '{}' do
|
171
|
+
ri('{' , 1)
|
172
|
+
ri( ':a => :b' , 1)
|
173
|
+
le('}' , 0)
|
174
|
+
end
|
175
|
+
|
176
|
+
would '[].each{}' do
|
177
|
+
ri('[].each{' , 1)
|
178
|
+
ri( '0' , 1)
|
179
|
+
ri( '[].each {' , 2)
|
180
|
+
le( '}' , 1)
|
181
|
+
le('}' , 0)
|
182
|
+
end
|
183
|
+
|
184
|
+
would '()' do
|
185
|
+
ri('(' , 1)
|
186
|
+
ri( '0' , 1)
|
187
|
+
le(')' , 0)
|
188
|
+
end
|
189
|
+
|
190
|
+
would '{}.dig()' do
|
191
|
+
ri('{}.dig(' , 1)
|
192
|
+
ri( '0,' , 1)
|
193
|
+
ri( '1' , 1)
|
194
|
+
le(')' , 0)
|
195
|
+
end
|
196
|
+
|
197
|
+
would '[]' do
|
198
|
+
ri('[' , 1)
|
199
|
+
ri( '0,' , 1)
|
200
|
+
ri( '1,' , 1)
|
201
|
+
ri( '[' , 2)
|
202
|
+
ri( '2' , 2)
|
203
|
+
le( ']' , 1)
|
204
|
+
le(']' , 0)
|
205
|
+
end
|
145
206
|
end
|
data/test/more/test_beep.rb
CHANGED
@@ -9,21 +9,24 @@ describe Rib::Beep do
|
|
9
9
|
Rib::Beep.enable
|
10
10
|
end
|
11
11
|
|
12
|
-
after do
|
13
|
-
expect(Rib::Beep).disabled?
|
14
|
-
end
|
15
|
-
|
16
12
|
def verify delay, threshold=nil, &block
|
17
|
-
|
18
|
-
|
13
|
+
shell(:started_at => Time.now - delay,
|
14
|
+
:beep_threshold => threshold, &block)
|
15
|
+
|
16
|
+
stub_output
|
17
|
+
mock(shell).get_input{}
|
18
|
+
|
19
|
+
shell.loop
|
20
|
+
|
21
|
+
ok
|
19
22
|
end
|
20
23
|
|
21
|
-
def expect_beep
|
22
|
-
mock(
|
24
|
+
def expect_beep sh
|
25
|
+
mock(sh).print("\a"){}
|
23
26
|
end
|
24
27
|
|
25
|
-
def unexpect_beep
|
26
|
-
stub(
|
28
|
+
def unexpect_beep sh
|
29
|
+
stub(sh).print.with_any_args{ flunk }
|
27
30
|
end
|
28
31
|
|
29
32
|
describe 'beep' do
|
data/test/test_shell.rb
CHANGED
@@ -75,6 +75,14 @@ describe Rib::Shell do
|
|
75
75
|
input('"m" * 2')
|
76
76
|
end
|
77
77
|
|
78
|
+
%w[next break].each do |keyword|
|
79
|
+
would "handle #{keyword}" do
|
80
|
+
mock(shell).puts(matching(/^SyntaxError:/)){}
|
81
|
+
|
82
|
+
input(keyword)
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
78
86
|
would 'error in print_result' do
|
79
87
|
mock(Rib).warn(matching(/Error while printing result.*BOOM/m)){}
|
80
88
|
|
@@ -167,26 +175,24 @@ describe Rib::Shell do
|
|
167
175
|
end
|
168
176
|
|
169
177
|
would 'have empty binding' do
|
170
|
-
expect(shell.eval_input('local_variables').first).empty?
|
178
|
+
expect(shell(:binding => nil).eval_input('local_variables').first).empty?
|
171
179
|
end
|
172
180
|
|
173
181
|
would 'not pollute main' do
|
174
|
-
expect(shell.eval_input('main').first).eq 'rib'
|
182
|
+
expect(shell(:binding => nil).eval_input('main').first).eq 'rib'
|
183
|
+
end
|
184
|
+
|
185
|
+
would 'be main' do
|
186
|
+
expect(shell(:binding => nil).eval_input('self.inspect').first).eq 'main'
|
175
187
|
end
|
176
188
|
|
177
189
|
would 'warn on removing main' do
|
178
|
-
TOPLEVEL_BINDING.eval
|
179
|
-
|
180
|
-
|
181
|
-
end
|
182
|
-
RUBY
|
190
|
+
mock(TOPLEVEL_BINDING.eval('singleton_class')).method_defined?(:main) do
|
191
|
+
true
|
192
|
+
end
|
183
193
|
|
184
194
|
mock(Rib).warn(is_a(String)){}
|
185
195
|
|
186
|
-
expect(shell.eval_input('main').first).eq 'rib'
|
187
|
-
end
|
188
|
-
|
189
|
-
would 'be main' do
|
190
|
-
expect(shell.eval_input('self.inspect').first).eq 'main'
|
196
|
+
expect(shell(:binding => nil).eval_input('main').first).eq 'rib'
|
191
197
|
end
|
192
198
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rib
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lin Jen-Shin (godfat)
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-06-20 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: |-
|
14
14
|
Ruby-Interactive-ruBy -- Yet another interactive Ruby shell
|
@@ -65,6 +65,7 @@ files:
|
|
65
65
|
- lib/rib/core/strip_backtrace.rb
|
66
66
|
- lib/rib/debug.rb
|
67
67
|
- lib/rib/extra/autoindent.rb
|
68
|
+
- lib/rib/extra/byebug.rb
|
68
69
|
- lib/rib/extra/hirb.rb
|
69
70
|
- lib/rib/extra/paging.rb
|
70
71
|
- lib/rib/extra/spring.rb
|
@@ -124,7 +125,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
124
125
|
version: '0'
|
125
126
|
requirements: []
|
126
127
|
rubyforge_project:
|
127
|
-
rubygems_version: 2.
|
128
|
+
rubygems_version: 2.7.7
|
128
129
|
signing_key:
|
129
130
|
specification_version: 4
|
130
131
|
summary: Ruby-Interactive-ruBy -- Yet another interactive Ruby shell
|