rib 1.5.2 → 1.5.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +3 -1
- data/CHANGES.md +8 -0
- data/lib/rib/core/multiline.rb +5 -1
- data/lib/rib/shell.rb +10 -2
- data/lib/rib/test/multiline.rb +33 -24
- data/lib/rib/version.rb +1 -1
- data/rib.gemspec +4 -4
- data/test/more/test_multiline_history.rb +3 -1
- data/test/test_shell.rb +25 -2
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8941437990b160e6b6a8c135d7ab7034511bb488
|
4
|
+
data.tar.gz: 269903601d0ea5f052153e4dc0ad921d15c7b111
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 101ab01ecca0dfc75ab09412b58d199e64a2641c92f2c1bc1b6a42f260d364ef81e409e2f34738d9fd10ac53999d241100e23282f7ee01776d7191b0d22165a4
|
7
|
+
data.tar.gz: e3298bcdcec51701c6fb2e4c15cdbc924830679f9e71744c2c9b1c23bac71817f9ba14c50962ffc190188657a0983ce65d349bad6187dbec0d9d6c1aa0156922
|
data/.travis.yml
CHANGED
data/CHANGES.md
CHANGED
@@ -1,5 +1,13 @@
|
|
1
1
|
# CHANGES
|
2
2
|
|
3
|
+
## Rib 1.5.3 -- 2017-08-05
|
4
|
+
|
5
|
+
* Now we set trap only when the shell starts, and restore the old trap
|
6
|
+
after the shell stops. This should fix some problems using anchor inside
|
7
|
+
RSpec or Unicorn. They would no longer interfere with them.
|
8
|
+
* [core/multiline] Now we support backslash. See:
|
9
|
+
[Using backslash line continuation character results in syntax error](https://github.com/godfat/rib/issues/15)
|
10
|
+
|
3
11
|
## Rib 1.5.2 -- 2017-05-01
|
4
12
|
|
5
13
|
* We now `require 'rib/version'` from the beginning, avoid loading error
|
data/lib/rib/core/multiline.rb
CHANGED
@@ -81,7 +81,11 @@ module Rib; module Multiline
|
|
81
81
|
def loop_eval input
|
82
82
|
return super if Multiline.disabled?
|
83
83
|
multiline_buffer << input
|
84
|
-
|
84
|
+
if input =~ /\\\z/
|
85
|
+
throw :rib_multiline
|
86
|
+
else
|
87
|
+
super(multiline_buffer.join("\n"))
|
88
|
+
end
|
85
89
|
end
|
86
90
|
|
87
91
|
def print_eval_error err
|
data/lib/rib/shell.rb
CHANGED
@@ -4,7 +4,6 @@ require 'rib/api'
|
|
4
4
|
|
5
5
|
module Rib; class Shell
|
6
6
|
include API
|
7
|
-
trap('INT'){ raise Interrupt }
|
8
7
|
|
9
8
|
def self.use mod
|
10
9
|
include mod
|
@@ -47,6 +46,7 @@ module Rib; class Shell
|
|
47
46
|
# Loops shell until user exits
|
48
47
|
def loop
|
49
48
|
before_loop
|
49
|
+
set_trap
|
50
50
|
start
|
51
51
|
in_loop
|
52
52
|
stop
|
@@ -55,7 +55,7 @@ module Rib; class Shell
|
|
55
55
|
Rib.warn("Error while running loop:\n #{format_error(e)}")
|
56
56
|
raise
|
57
57
|
ensure
|
58
|
-
|
58
|
+
release_trap
|
59
59
|
after_loop
|
60
60
|
end
|
61
61
|
|
@@ -78,6 +78,14 @@ module Rib; class Shell
|
|
78
78
|
protected
|
79
79
|
attr_writer :config
|
80
80
|
|
81
|
+
def set_trap
|
82
|
+
@trap_proc = trap('INT'){ raise Interrupt }
|
83
|
+
end
|
84
|
+
|
85
|
+
def release_trap
|
86
|
+
trap('INT', &@trap_proc) if @trap_proc.kind_of?(Proc)
|
87
|
+
end
|
88
|
+
|
81
89
|
private
|
82
90
|
# Avoid namespace pollution from rubygems bin stub.
|
83
91
|
# To be specific, version and str.
|
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(yield){}
|
22
22
|
end
|
23
23
|
shell.loop_once
|
24
24
|
ok
|
@@ -30,7 +30,9 @@ copy :setup_multiline do
|
|
30
30
|
input(line)
|
31
31
|
shell.loop_once
|
32
32
|
}
|
33
|
-
input_done(lines.last, err)
|
33
|
+
input_done(lines.last, err) do
|
34
|
+
shell.eval_binding.eval(str)
|
35
|
+
end
|
34
36
|
end
|
35
37
|
end
|
36
38
|
|
@@ -41,7 +43,7 @@ copy :multiline do
|
|
41
43
|
|
42
44
|
would 'work with no prompt' do
|
43
45
|
shell.config[:prompt] = ''
|
44
|
-
check
|
46
|
+
check <<~RUBY
|
45
47
|
def f
|
46
48
|
0
|
47
49
|
end
|
@@ -49,7 +51,7 @@ copy :multiline do
|
|
49
51
|
end
|
50
52
|
|
51
53
|
would 'def f' do
|
52
|
-
check
|
54
|
+
check <<~RUBY
|
53
55
|
def f
|
54
56
|
1
|
55
57
|
end
|
@@ -57,21 +59,21 @@ copy :multiline do
|
|
57
59
|
end
|
58
60
|
|
59
61
|
would 'class C' do
|
60
|
-
check
|
62
|
+
check <<~RUBY
|
61
63
|
class C
|
62
64
|
end
|
63
65
|
RUBY
|
64
66
|
end
|
65
67
|
|
66
68
|
would 'begin' do
|
67
|
-
check
|
69
|
+
check <<~RUBY
|
68
70
|
begin
|
69
71
|
end
|
70
72
|
RUBY
|
71
73
|
end
|
72
74
|
|
73
75
|
would 'begin with RuntimeError' do
|
74
|
-
check
|
76
|
+
check <<~RUBY, RuntimeError
|
75
77
|
begin
|
76
78
|
raise 'multiline raised an error'
|
77
79
|
end
|
@@ -79,120 +81,127 @@ copy :multiline do
|
|
79
81
|
end
|
80
82
|
|
81
83
|
would 'do end' do
|
82
|
-
check
|
84
|
+
check <<~RUBY
|
83
85
|
[].each do
|
84
86
|
end
|
85
87
|
RUBY
|
86
88
|
end
|
87
89
|
|
88
90
|
would 'block brace' do
|
89
|
-
check
|
91
|
+
check <<~RUBY
|
90
92
|
[].each{
|
91
93
|
}
|
92
94
|
RUBY
|
93
95
|
end
|
94
96
|
|
95
97
|
would 'hash' do
|
96
|
-
check
|
98
|
+
check <<~RUBY
|
97
99
|
{
|
98
100
|
}
|
99
101
|
RUBY
|
100
102
|
end
|
101
103
|
|
102
104
|
would 'hash value' do
|
103
|
-
check
|
105
|
+
check <<~RUBY
|
104
106
|
{1 =>
|
105
107
|
2}
|
106
108
|
RUBY
|
107
109
|
end
|
108
110
|
|
109
111
|
would 'array' do
|
110
|
-
check
|
112
|
+
check <<~RUBY
|
111
113
|
[
|
112
114
|
]
|
113
115
|
RUBY
|
114
116
|
end
|
115
117
|
|
116
118
|
would 'group' do
|
117
|
-
check
|
119
|
+
check <<~RUBY
|
118
120
|
(
|
119
121
|
)
|
120
122
|
RUBY
|
121
123
|
end
|
122
124
|
|
123
125
|
would 'string double quote' do
|
124
|
-
check
|
126
|
+
check <<~RUBY
|
125
127
|
"
|
126
128
|
"
|
127
129
|
RUBY
|
128
130
|
end
|
129
131
|
|
130
132
|
would 'string single quote' do
|
131
|
-
check
|
133
|
+
check <<~RUBY
|
132
134
|
'
|
133
135
|
'
|
134
136
|
RUBY
|
135
137
|
end
|
136
138
|
|
137
139
|
would 'be hash treated as a block SyntaxError' do
|
138
|
-
check
|
140
|
+
check <<~RUBY, SyntaxError
|
139
141
|
puts { :x => 10 }.class
|
140
142
|
RUBY
|
141
143
|
end
|
142
144
|
|
143
145
|
would 'begin with SyntaxError' do
|
144
|
-
check
|
146
|
+
check <<~RUBY, SyntaxError
|
145
147
|
begin
|
146
148
|
s-y n
|
147
149
|
RUBY
|
148
150
|
end
|
149
151
|
|
150
152
|
would 'binary operator +' do
|
151
|
-
check
|
153
|
+
check <<~RUBY
|
152
154
|
1/1.to_i +
|
153
155
|
1
|
154
156
|
RUBY
|
155
157
|
end
|
156
158
|
|
157
159
|
would 'binary operator -' do
|
158
|
-
check
|
160
|
+
check <<~RUBY
|
159
161
|
1*1.to_i -
|
160
162
|
1
|
161
163
|
RUBY
|
162
164
|
end
|
163
165
|
|
164
166
|
would 'binary operator *' do
|
165
|
-
check
|
167
|
+
check <<~RUBY
|
166
168
|
1-1.to_i *
|
167
169
|
1
|
168
170
|
RUBY
|
169
171
|
end
|
170
172
|
|
171
173
|
would 'binary operator /' do
|
172
|
-
check
|
174
|
+
check <<~RUBY
|
173
175
|
1+1.to_i /
|
174
176
|
1
|
175
177
|
RUBY
|
176
178
|
end
|
177
179
|
|
178
180
|
would 'binary operator |' do
|
179
|
-
check
|
181
|
+
check <<~RUBY
|
180
182
|
1+1.to_i |
|
181
183
|
1
|
182
184
|
RUBY
|
183
185
|
end
|
184
186
|
|
185
187
|
would 'binary operator &' do
|
186
|
-
check
|
188
|
+
check <<~RUBY
|
187
189
|
1+1.to_i &
|
188
190
|
1
|
189
191
|
RUBY
|
190
192
|
end
|
191
193
|
|
192
194
|
would 'binary operator ^' do
|
193
|
-
check
|
195
|
+
check <<~RUBY
|
194
196
|
1+1.to_i ^
|
195
197
|
1
|
196
198
|
RUBY
|
197
199
|
end
|
200
|
+
|
201
|
+
would 'backslash at the end' do
|
202
|
+
check <<~RUBY
|
203
|
+
'nice ' \\
|
204
|
+
'shell'
|
205
|
+
RUBY
|
206
|
+
end
|
198
207
|
end
|
data/lib/rib/version.rb
CHANGED
data/rib.gemspec
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
# stub: rib 1.5.
|
2
|
+
# stub: rib 1.5.3 ruby lib
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = "rib".freeze
|
6
|
-
s.version = "1.5.
|
6
|
+
s.version = "1.5.3"
|
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 = "2017-05
|
11
|
+
s.date = "2017-08-05"
|
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 = [
|
@@ -92,7 +92,7 @@ Gem::Specification.new do |s|
|
|
92
92
|
"test/test_shell.rb".freeze]
|
93
93
|
s.homepage = "https://github.com/godfat/rib".freeze
|
94
94
|
s.licenses = ["Apache-2.0".freeze]
|
95
|
-
s.rubygems_version = "2.6.
|
95
|
+
s.rubygems_version = "2.6.12".freeze
|
96
96
|
s.summary = "Ruby-Interactive-ruBy -- Yet another interactive Ruby shell".freeze
|
97
97
|
s.test_files = [
|
98
98
|
"test/core/test_completion.rb".freeze,
|
data/test/test_shell.rb
CHANGED
@@ -6,8 +6,8 @@ describe Rib::Shell do
|
|
6
6
|
paste :rib
|
7
7
|
|
8
8
|
describe '#loop' do
|
9
|
-
def input str
|
10
|
-
mock(shell).get_input{str}
|
9
|
+
def input str=Rib::Skip
|
10
|
+
mock(shell).get_input{if block_given? then yield else str end}
|
11
11
|
shell.loop
|
12
12
|
ok
|
13
13
|
end
|
@@ -25,6 +25,29 @@ describe Rib::Shell do
|
|
25
25
|
|
26
26
|
input('@shell.stop; throw :rib_exit')
|
27
27
|
end
|
28
|
+
|
29
|
+
describe 'trap' do
|
30
|
+
before do
|
31
|
+
@token = Class.new(Exception)
|
32
|
+
@old_trap = trap('INT'){ raise @token }
|
33
|
+
mock(shell).handle_interrupt{ mock(shell).get_input{'exit'} }
|
34
|
+
end
|
35
|
+
|
36
|
+
after do
|
37
|
+
trap('INT', &@old_trap)
|
38
|
+
end
|
39
|
+
|
40
|
+
def interrupt
|
41
|
+
Process.kill('SIGINT', Process.pid)
|
42
|
+
sleep
|
43
|
+
end
|
44
|
+
|
45
|
+
would 'fence and restore ctrl+c interruption' do
|
46
|
+
input{ interrupt }
|
47
|
+
|
48
|
+
expect.raise(@token){ interrupt }
|
49
|
+
end
|
50
|
+
end
|
28
51
|
end
|
29
52
|
|
30
53
|
describe '#loop_once' do
|
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.5.
|
4
|
+
version: 1.5.3
|
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: 2017-05
|
11
|
+
date: 2017-08-05 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: |-
|
14
14
|
Ruby-Interactive-ruBy -- Yet another interactive Ruby shell
|
@@ -124,7 +124,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
124
124
|
version: '0'
|
125
125
|
requirements: []
|
126
126
|
rubyforge_project:
|
127
|
-
rubygems_version: 2.6.
|
127
|
+
rubygems_version: 2.6.12
|
128
128
|
signing_key:
|
129
129
|
specification_version: 4
|
130
130
|
summary: Ruby-Interactive-ruBy -- Yet another interactive Ruby shell
|