rib 1.0.0 → 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES.md +20 -0
- data/README.md +11 -2
- data/lib/rib/api.rb +2 -0
- data/lib/rib/core/history.rb +12 -4
- data/lib/rib/extra/autoindent.rb +7 -2
- data/lib/rib/more/color.rb +13 -12
- data/lib/rib/more/multiline_history_file.rb +9 -2
- data/lib/rib/runner.rb +1 -1
- data/lib/rib/shell.rb +5 -6
- data/lib/rib/version.rb +1 -1
- data/rib.gemspec +3 -4
- data/test/more/test_color.rb +11 -3
- data/test/test_shell.rb +5 -3
- metadata +3 -4
- data/CONTRIBUTORS +0 -2
data/CHANGES.md
CHANGED
@@ -1,5 +1,25 @@
|
|
1
1
|
# CHANGES
|
2
2
|
|
3
|
+
## Rib 1.0.1 -- 2011-12-15
|
4
|
+
|
5
|
+
### Incompatible changes
|
6
|
+
|
7
|
+
* [rib] Keyword `quit` to exit rib is removed, preferring `exit`.
|
8
|
+
|
9
|
+
### Bugs fixes
|
10
|
+
|
11
|
+
* [rib] Now you exit rib with ` exit`. Thanks @ayamomiji
|
12
|
+
* [rib] Fixed -e, --eval binding. It should be TOPLEVEL_BINDING
|
13
|
+
|
14
|
+
### Enhancement
|
15
|
+
|
16
|
+
* [core/history, more/color, more/multiline_history_file, extra/autoindent]
|
17
|
+
Make sure values are initialized even if before_loop is called later.
|
18
|
+
This helps us enable plugins on the fly.
|
19
|
+
|
20
|
+
* [extra/autoindent] Now it depends on history plugin as well. This is not
|
21
|
+
really needed, but would help to reduce plugins ordering issue.
|
22
|
+
|
3
23
|
## Rib 1.0.0 -- 2011-11-05
|
4
24
|
|
5
25
|
### Bugs fixes
|
data/README.md
CHANGED
@@ -5,7 +5,7 @@ by Lin Jen-Shin ([godfat](http://godfat.org))
|
|
5
5
|
## LINKS:
|
6
6
|
|
7
7
|
* [github](https://github.com/godfat/rib)
|
8
|
-
* [rubygems](
|
8
|
+
* [rubygems](https://rubygems.org/gems/rib)
|
9
9
|
* [rdoc](http://rdoc.info/github/godfat/rib)
|
10
10
|
|
11
11
|
## DESCRIPTION:
|
@@ -143,7 +143,7 @@ Rib.config[:name] | The name of this shell
|
|
143
143
|
Rib.config[:result_prompt] | Default is "=>"
|
144
144
|
Rib.config[:prompt] | Default is ">>"
|
145
145
|
Rib.config[:binding] | Context, default: TOPLEVEL_BINDING
|
146
|
-
Rib.config[:exit] | Commands to exit, default [nil
|
146
|
+
Rib.config[:exit] | Commands to exit, default [nil] # control+d
|
147
147
|
|
148
148
|
#### Plugin specific configuration
|
149
149
|
|
@@ -203,6 +203,15 @@ more plugins are lying in `rib/more/*.rb`. You can read `rib/app/ramaze.rb`
|
|
203
203
|
and `bin/rib-ramaze` as a Rib App reference implementation, because it's very
|
204
204
|
simple, simpler than rib-rails.
|
205
205
|
|
206
|
+
## CONTRIBUTORS:
|
207
|
+
|
208
|
+
* Andrew Liu (@eggegg)
|
209
|
+
* ayaya (@ayamomiji)
|
210
|
+
* Lin Jen-Shin (@godfat)
|
211
|
+
* Mr. Big Cat (@miaout17)
|
212
|
+
* @bootleq
|
213
|
+
* @tka
|
214
|
+
|
206
215
|
## LICENSE:
|
207
216
|
|
208
217
|
Apache License 2.0
|
data/lib/rib/api.rb
CHANGED
data/lib/rib/core/history.rb
CHANGED
@@ -10,8 +10,8 @@ module Rib::History
|
|
10
10
|
|
11
11
|
def before_loop
|
12
12
|
return super if History.disabled?
|
13
|
-
|
14
|
-
|
13
|
+
history_file
|
14
|
+
history_size
|
15
15
|
FileUtils.mkdir_p(File.dirname(history_file_path))
|
16
16
|
read_history
|
17
17
|
Rib.say("History read from: #{history_file_path}") if $VERBOSE
|
@@ -46,13 +46,21 @@ module Rib::History
|
|
46
46
|
def write_history
|
47
47
|
return super if History.disabled?
|
48
48
|
File.open(history_file_path, 'w'){ |f|
|
49
|
-
f.puts(history.to_a.last(
|
49
|
+
f.puts(history.to_a.last(history_size).join("\n")) }
|
50
50
|
end
|
51
51
|
|
52
52
|
|
53
53
|
|
54
54
|
private
|
55
|
+
def history_file
|
56
|
+
config[:history_file] ||= File.join(Rib.home, 'history.rb')
|
57
|
+
end
|
58
|
+
|
55
59
|
def history_file_path
|
56
|
-
config[:history_file_path] ||= File.expand_path(
|
60
|
+
config[:history_file_path] ||= File.expand_path(history_file)
|
61
|
+
end
|
62
|
+
|
63
|
+
def history_size
|
64
|
+
config[:history_size] ||= 500
|
57
65
|
end
|
58
66
|
end
|
data/lib/rib/extra/autoindent.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
|
2
|
+
require 'rib/core/history' # otherwise the order might be wrong
|
2
3
|
require 'rib/core/readline' # dependency
|
3
4
|
require 'rib/core/multiline' # dependency
|
4
5
|
|
@@ -62,7 +63,7 @@ module Rib::Autoindent
|
|
62
63
|
|
63
64
|
def before_loop
|
64
65
|
return super if Autoindent.disabled?
|
65
|
-
|
66
|
+
autoindent_spaces
|
66
67
|
super
|
67
68
|
end
|
68
69
|
|
@@ -145,7 +146,11 @@ module Rib::Autoindent
|
|
145
146
|
|
146
147
|
private
|
147
148
|
def current_autoindent size=autoindent_stack.size
|
148
|
-
|
149
|
+
autoindent_spaces * size
|
150
|
+
end
|
151
|
+
|
152
|
+
def autoindent_spaces
|
153
|
+
config[:autoindent_spaces] ||= ' '
|
149
154
|
end
|
150
155
|
|
151
156
|
def autoindent_stack
|
data/lib/rib/more/color.rb
CHANGED
@@ -8,6 +8,18 @@ module Rib::Color
|
|
8
8
|
# --------------- Rib API ---------------
|
9
9
|
|
10
10
|
def before_loop
|
11
|
+
colors
|
12
|
+
super
|
13
|
+
end
|
14
|
+
|
15
|
+
def format_result result
|
16
|
+
return super if Color.disabled?
|
17
|
+
config[:result_prompt] + format_color(result)
|
18
|
+
end
|
19
|
+
|
20
|
+
# --------------- Plugin API ---------------
|
21
|
+
|
22
|
+
def colors
|
11
23
|
config[:color] ||= {
|
12
24
|
Numeric => :red ,
|
13
25
|
String => :green ,
|
@@ -18,20 +30,9 @@ module Rib::Color
|
|
18
30
|
TrueClass => :magenta,
|
19
31
|
FalseClass => :magenta,
|
20
32
|
Exception => :magenta,
|
21
|
-
Object => :yellow
|
22
|
-
}
|
23
|
-
super
|
24
|
-
end
|
25
|
-
|
26
|
-
def format_result result
|
27
|
-
return super if Color.disabled?
|
28
|
-
config[:result_prompt] + format_color(result)
|
33
|
+
Object => :yellow }
|
29
34
|
end
|
30
35
|
|
31
|
-
# --------------- Plugin API ---------------
|
32
|
-
|
33
|
-
def colors; config[:color]; end
|
34
|
-
|
35
36
|
def format_color result, display=result.inspect
|
36
37
|
case result
|
37
38
|
when String ; send(colors[String ]){ display }
|
@@ -9,7 +9,7 @@ module Rib::MultilineHistoryFile
|
|
9
9
|
|
10
10
|
def before_loop
|
11
11
|
return super if MultilineHistoryFile.disabled?
|
12
|
-
|
12
|
+
multiline_history_file_token
|
13
13
|
super
|
14
14
|
end
|
15
15
|
|
@@ -23,7 +23,7 @@ module Rib::MultilineHistoryFile
|
|
23
23
|
if line.end_with?(
|
24
24
|
"#{config[:multiline_history_file_token]}\n")
|
25
25
|
buffer << line[0...
|
26
|
-
|
26
|
+
-multiline_history_file_token.size-1] + "\n"
|
27
27
|
else
|
28
28
|
history << (buffer.join + line).chomp
|
29
29
|
buffer = []
|
@@ -39,4 +39,11 @@ module Rib::MultilineHistoryFile
|
|
39
39
|
}
|
40
40
|
super
|
41
41
|
end
|
42
|
+
|
43
|
+
|
44
|
+
|
45
|
+
private
|
46
|
+
def multiline_history_file_token
|
47
|
+
config[:multiline_history_file_token] ||= ' '
|
48
|
+
end
|
42
49
|
end
|
data/lib/rib/runner.rb
CHANGED
@@ -81,7 +81,7 @@ module Rib::Runner
|
|
81
81
|
until argv.empty?
|
82
82
|
case arg = argv.shift
|
83
83
|
when /^-e=?(.+)?/, /^--eval=?(.+)?/
|
84
|
-
eval($1 || argv.shift,
|
84
|
+
eval($1 || argv.shift, TOPLEVEL_BINDING, __FILE__, __LINE__)
|
85
85
|
|
86
86
|
when /^-d/, '--debug'
|
87
87
|
$DEBUG = true
|
data/lib/rib/shell.rb
CHANGED
@@ -13,12 +13,11 @@ class Rib::Shell
|
|
13
13
|
attr_reader :config
|
14
14
|
def initialize(config={})
|
15
15
|
self.config = {
|
16
|
-
:result_prompt => '=> '
|
17
|
-
:prompt => '>> '
|
18
|
-
:binding => TOPLEVEL_BINDING
|
19
|
-
:exit => [nil
|
20
|
-
:line => 1
|
21
|
-
}.merge(config)
|
16
|
+
:result_prompt => '=> ' ,
|
17
|
+
:prompt => '>> ' ,
|
18
|
+
:binding => TOPLEVEL_BINDING,
|
19
|
+
:exit => [nil] ,
|
20
|
+
:line => 1 }.merge(config)
|
22
21
|
@running = false
|
23
22
|
end
|
24
23
|
|
data/lib/rib/version.rb
CHANGED
data/rib.gemspec
CHANGED
@@ -2,11 +2,11 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = "rib"
|
5
|
-
s.version = "1.0.
|
5
|
+
s.version = "1.0.1"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Lin Jen-Shin (godfat)"]
|
9
|
-
s.date = "2011-
|
9
|
+
s.date = "2011-12-15"
|
10
10
|
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"
|
11
11
|
s.email = ["godfat (XD) godfat.org"]
|
12
12
|
s.executables = [
|
@@ -21,7 +21,6 @@ Gem::Specification.new do |s|
|
|
21
21
|
".gitmodules",
|
22
22
|
".travis.yml",
|
23
23
|
"CHANGES.md",
|
24
|
-
"CONTRIBUTORS",
|
25
24
|
"Gemfile",
|
26
25
|
"LICENSE",
|
27
26
|
"README.md",
|
@@ -81,7 +80,7 @@ Gem::Specification.new do |s|
|
|
81
80
|
"test/test_shell.rb"]
|
82
81
|
s.homepage = "https://github.com/godfat/rib"
|
83
82
|
s.require_paths = ["lib"]
|
84
|
-
s.rubygems_version = "1.8.
|
83
|
+
s.rubygems_version = "1.8.12"
|
85
84
|
s.summary = "Ruby-Interactive-ruBy -- Yet another interactive Ruby shell"
|
86
85
|
s.test_files = [
|
87
86
|
"test/core/test_completion.rb",
|
data/test/more/test_color.rb
CHANGED
@@ -26,12 +26,20 @@ describe Rib::Color do
|
|
26
26
|
|
27
27
|
# regression test
|
28
28
|
should "colorize errors with `/' inside" do
|
29
|
+
i = if defined?(RUBY_ENGINE) && RUBY_ENGINE == 'jruby'
|
30
|
+
1
|
31
|
+
else
|
32
|
+
0
|
33
|
+
end
|
34
|
+
|
29
35
|
begin
|
30
36
|
line = __LINE__; 1/0
|
31
37
|
rescue ZeroDivisionError => e
|
32
|
-
Rib::Color.
|
33
|
-
|
34
|
-
|
38
|
+
msg = "test/more/#{Rib::Color.yellow{'test_color.rb'}}:" \
|
39
|
+
"#{Rib::Color.red{line}}:in #{Rib::Color.green}"
|
40
|
+
Rib::Color.colorize_backtrace(e.backtrace)[i].should =~ \
|
41
|
+
Regexp.new(
|
42
|
+
"#{Regexp.escape(msg)}`.+'#{Regexp.escape(Rib::Color.reset)}")
|
35
43
|
end
|
36
44
|
end
|
37
45
|
end
|
data/test/test_shell.rb
CHANGED
@@ -16,9 +16,11 @@ describe Rib::Shell do
|
|
16
16
|
@shell.loop
|
17
17
|
true.should.eq true
|
18
18
|
end
|
19
|
-
should 'exit'
|
20
|
-
should '
|
21
|
-
should 'ctrl+d'
|
19
|
+
should 'exit' do input('exit' ) end
|
20
|
+
should 'also exit' do input(' exit') end
|
21
|
+
should 'ctrl+d' do mock(@shell).puts ; input(nil) end
|
22
|
+
should ':q' do @shell.config[:exit] << ':q'; input(':q') end
|
23
|
+
should '\q' do @shell.config[:exit] << '\q'; input('\q') end
|
22
24
|
end
|
23
25
|
|
24
26
|
describe '#loop_once' do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rib
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-
|
12
|
+
date: 2011-12-15 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: ! 'Ruby-Interactive-ruBy -- Yet another interactive Ruby shell
|
15
15
|
|
@@ -44,7 +44,6 @@ files:
|
|
44
44
|
- .gitmodules
|
45
45
|
- .travis.yml
|
46
46
|
- CHANGES.md
|
47
|
-
- CONTRIBUTORS
|
48
47
|
- Gemfile
|
49
48
|
- LICENSE
|
50
49
|
- README.md
|
@@ -122,7 +121,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
122
121
|
version: '0'
|
123
122
|
requirements: []
|
124
123
|
rubyforge_project:
|
125
|
-
rubygems_version: 1.8.
|
124
|
+
rubygems_version: 1.8.12
|
126
125
|
signing_key:
|
127
126
|
specification_version: 3
|
128
127
|
summary: Ruby-Interactive-ruBy -- Yet another interactive Ruby shell
|
data/CONTRIBUTORS
DELETED