rib 1.5.1 → 1.5.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.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -1
  3. data/CHANGES.md +32 -0
  4. data/README.md +5 -4
  5. data/TODO.md +2 -0
  6. data/lib/rib.rb +1 -1
  7. data/lib/rib/api.rb +29 -8
  8. data/lib/rib/app/auto.rb +2 -3
  9. data/lib/rib/app/rack.rb +2 -3
  10. data/lib/rib/app/rails.rb +2 -3
  11. data/lib/rib/core/completion.rb +6 -13
  12. data/lib/rib/core/history.rb +3 -3
  13. data/lib/rib/core/last_value.rb +3 -3
  14. data/lib/rib/core/multiline.rb +3 -3
  15. data/lib/rib/core/readline.rb +3 -3
  16. data/lib/rib/core/squeeze_history.rb +3 -3
  17. data/lib/rib/core/strip_backtrace.rb +3 -3
  18. data/lib/rib/extra/autoindent.rb +3 -3
  19. data/lib/rib/extra/hirb.rb +3 -3
  20. data/lib/rib/extra/paging.rb +3 -3
  21. data/lib/rib/more/anchor.rb +13 -4
  22. data/lib/rib/more/beep.rb +4 -4
  23. data/lib/rib/more/bottomup_backtrace.rb +3 -3
  24. data/lib/rib/more/caller.rb +3 -3
  25. data/lib/rib/more/color.rb +11 -6
  26. data/lib/rib/more/edit.rb +3 -3
  27. data/lib/rib/more/multiline_history.rb +3 -3
  28. data/lib/rib/more/multiline_history_file.rb +3 -3
  29. data/lib/rib/plugin.rb +15 -4
  30. data/lib/rib/runner.rb +4 -3
  31. data/lib/rib/shell.rb +19 -6
  32. data/lib/rib/test.rb +25 -14
  33. data/lib/rib/test/history.rb +25 -0
  34. data/lib/rib/test/multiline.rb +8 -16
  35. data/lib/rib/version.rb +1 -1
  36. data/rib.gemspec +7 -6
  37. data/task/README.md +5 -5
  38. data/task/gemgem.rb +6 -1
  39. data/test/core/test_completion.rb +13 -6
  40. data/test/core/test_history.rb +42 -52
  41. data/test/core/test_last_value.rb +22 -23
  42. data/test/core/test_readline.rb +7 -14
  43. data/test/core/test_squeeze_history.rb +29 -36
  44. data/test/extra/test_autoindent.rb +8 -3
  45. data/test/more/test_anchor.rb +85 -0
  46. data/test/more/test_beep.rb +1 -1
  47. data/test/more/test_color.rb +16 -0
  48. data/test/more/test_multiline_history.rb +12 -7
  49. data/test/test_api.rb +39 -3
  50. data/test/test_plugin.rb +25 -13
  51. data/test/test_runner.rb +12 -10
  52. data/test/test_shell.rb +72 -23
  53. metadata +6 -5
  54. data/test/extra/test_anchor.rb +0 -18
@@ -19,7 +19,7 @@ describe Rib::Beep do
19
19
  end
20
20
 
21
21
  def expect_beep shell
22
- mock(shell).print("\a")
22
+ mock(shell).print("\a"){}
23
23
  end
24
24
 
25
25
  def unexpect_beep shell
@@ -5,11 +5,19 @@ require 'rib/more/color'
5
5
  describe Rib::Color do
6
6
  paste :rib
7
7
 
8
+ before do
9
+ Rib::Color.enable
10
+ end
11
+
8
12
  color = Class.new do
9
13
  include Rib::Color
10
14
  def colors
11
15
  @colors ||= Rib::Shell.new.before_loop.config[:color]
12
16
  end
17
+
18
+ def inspect_result result
19
+ result.inspect
20
+ end
13
21
  end.new
14
22
 
15
23
  would 'give correct color' do
@@ -49,4 +57,12 @@ describe Rib::Color do
49
57
  "#{Regexp.escape(msg)}`.+'#{Regexp.escape(Rib::Color.reset)}")
50
58
  end
51
59
  end
60
+
61
+ would 'colorize warnings' do
62
+ shell = new_shell
63
+
64
+ shell.warn('test')
65
+
66
+ expect(shell.warnings).eq ["\e[31mtest\e[0m"]
67
+ end
52
68
  end
@@ -8,13 +8,14 @@ describe Rib::MultilineHistory do
8
8
  paste :setup_multiline
9
9
 
10
10
  def check str, err=nil
11
- @shell.history.clear
11
+ shell.history.clear
12
12
  with_history(str, err)
13
13
 
14
- setup_shell
14
+ @shell = nil
15
+ stub_output
15
16
 
16
- @shell.history.clear
17
- @shell.history << 'old history'
17
+ shell.history.clear
18
+ shell.history << 'old history'
18
19
  with_history(str, err, 'old history')
19
20
  end
20
21
 
@@ -22,18 +23,22 @@ describe Rib::MultilineHistory do
22
23
  lines = str.split("\n")
23
24
  lines[0...-1].inject([]){ |result, line|
24
25
  input(line)
25
- @shell.loop_once
26
+ shell.loop_once
26
27
  result << line
27
- @shell.history.to_a.should.eq prefix + result
28
+
29
+ expect(shell.history.to_a).eq prefix + result
30
+
28
31
  result
29
32
  }
30
33
  input_done(lines.last, err)
34
+
31
35
  history = if lines.size == 1
32
36
  lines.first
33
37
  else
34
38
  "\n#{lines.join("\n")}"
35
39
  end
36
- @shell.history.to_a.should.eq prefix + [history]
40
+
41
+ expect(shell.history.to_a).eq prefix + [history]
37
42
  end
38
43
 
39
44
  test_for Rib::History, Rib::Multiline, Rib::MultilineHistory do
@@ -12,9 +12,45 @@ describe Rib::API do
12
12
  "pong_#{meth}"
13
13
  end
14
14
  end
15
- shell = Rib::Shell.dup
16
- shell.use(mod)
17
- shell.new.send(meth).should == "pong_#{meth}"
15
+ klass = Rib::Shell.dup
16
+ klass.use(mod)
17
+
18
+ expect(klass.new.send(meth)).eq "pong_#{meth}"
19
+ end
20
+ end
21
+
22
+ would 'emit a warning whenever result is not a string' do
23
+ object = Class.new{ alias_method :inspect, :object_id }.new
24
+
25
+ mock(shell).get_input{'object'}
26
+ mock(shell).loop_eval('object'){object}
27
+ mock(shell).puts("=> #{object.object_id}"){}
28
+ mock($stderr).puts(including("#{object.class}#inspect")){}
29
+
30
+ shell.loop_once
31
+
32
+ ok
33
+ end
34
+
35
+ describe '#warn' do
36
+ would 'append a warning message to warnings' do
37
+ shell.warn('test')
38
+
39
+ expect(shell.warnings).eq ['test']
40
+ end
41
+ end
42
+
43
+ describe '#flush_warnings' do
44
+ before do
45
+ shell.warn('test')
46
+
47
+ mock($stderr).puts('rib: test'){}
48
+ end
49
+
50
+ would 'warn to $stderr from #warnings' do
51
+ shell.send(:flush_warnings)
52
+
53
+ ok
18
54
  end
19
55
  end
20
56
  end
@@ -13,26 +13,38 @@ describe Rib::Plugin do
13
13
  end
14
14
 
15
15
  would 'have shortcut methods' do
16
- @names.each{ |name|
17
- %w[enable disable].each{ |meth|
18
- Rib.respond_to?("#{meth}_#{name}").should == true
19
- }
20
- %w[enabled? disabled?].each{ |meth|
21
- Rib.respond_to?("#{name}_#{meth}").should == true
22
- }
23
- }
16
+ @names.each do |name|
17
+ %w[enable disable].each do |meth|
18
+ expect(Rib).respond_to?("#{meth}_#{name}")
19
+ end
20
+
21
+ %w[enabled? disabled?].each do |meth|
22
+ expect(Rib).respond_to?("#{name}_#{meth}")
23
+ end
24
+ end
24
25
  end
25
26
 
26
27
  would 'be the same as mod methods' do
27
28
  @mods.shuffle.take(@mods.size/2).each(&:disable)
28
- @names.each{ |name|
29
- %w[enabled? disabled?].each{ |meth|
30
- Rib.send("#{name}_#{meth}").should ==
29
+
30
+ @names.each do |name|
31
+ %w[enabled? disabled?].each do |meth|
32
+ expect(Rib.send("#{name}_#{meth}")).eq \
31
33
  @mods.find{ |mod|
32
34
  mod.name[/::\w+$/].tr(':', '') ==
33
35
  name.gsub(/([^_]+)/){$1.capitalize}.tr('_', '') }.
34
36
  send(meth)
35
- }
36
- }
37
+ end
38
+ end
39
+ end
40
+
41
+ would 'have backward compatibility for accessing Shell' do
42
+ mock(Rib).warn(
43
+ is_a(String), is_a(String), including("#{__FILE__}:47")){ok}
44
+
45
+ Module.new.module_eval <<-RUBY, __FILE__, __LINE__ + 1
46
+ extend Rib::Plugin
47
+ Shell
48
+ RUBY
37
49
  end
38
50
  end
@@ -6,31 +6,31 @@ describe Rib::Runner do
6
6
  paste :rib
7
7
 
8
8
  before do
9
- Rib.disable_plugins
10
- @shell = Rib::Shell.new
11
- mock(Rib).shell{ @shell }.times(2)
9
+ mock(Rib).shell{ shell }.times(2)
12
10
  end
13
11
 
14
12
  def input *args
15
- args.each{ |item| mock(@shell).get_input{ item } }
16
- mock(@shell).get_input{}
13
+ args.each{ |item| mock(shell).get_input{ item } }
14
+ mock(shell).get_input{}
17
15
  end
18
16
 
19
17
  def output *args
20
- args.each{ |item| mock(@shell).puts("=> #{item}"){} }
21
- mock(@shell).puts{}
18
+ args.each{ |item| mock(shell).puts("=> #{item}"){} }
19
+ mock(shell).puts{}
22
20
  end
23
21
 
24
22
  would '-e' do
25
23
  input('a')
26
24
  output('1')
27
- Rib::Runner.run(%w[-ea=1]).should.eq @shell
25
+
26
+ expect(Rib::Runner.run(%w[-ea=1])).eq shell
28
27
  end
29
28
 
30
29
  would '-e nothing' do
31
30
  input
32
31
  output
33
- Rib::Runner.run(%w[-e]).should.eq @shell
32
+
33
+ expect(Rib::Runner.run(%w[-e])).eq shell
34
34
  end
35
35
 
36
36
  def verify_app_e argv
@@ -38,10 +38,12 @@ describe Rib::Runner do
38
38
  output('1')
39
39
  conf = {:name => 'rib'}
40
40
  min = 'rib-min'
41
+
41
42
  mock(Rib::Runner).which_bin(min){ min }
42
43
  mock(Rib::Runner).load(min){ Rib::Runner.run(argv) }
43
44
  stub(Rib).config{ conf }
44
- Rib::Runner.run(argv).should.eq @shell
45
+
46
+ expect(Rib::Runner.run(argv)).eq shell
45
47
  end
46
48
 
47
49
  would 'min -e' do
@@ -5,26 +5,26 @@ require 'rib/shell'
5
5
  describe Rib::Shell do
6
6
  paste :rib
7
7
 
8
- before do
9
- Rib.disable_plugins
10
- @shell = nil
11
- end
12
-
13
- def shell
14
- @shell ||= Rib::Shell.new
15
- end
16
-
17
8
  describe '#loop' do
18
9
  def input str
19
10
  mock(shell).get_input{str}
20
11
  shell.loop
21
- true.should.eq true
12
+ ok
22
13
  end
23
- would 'exit' do input('exit' ) end
24
- would 'also exit' do input(' exit') end
14
+
15
+ would 'exit' do input('exit' ) end
16
+ would 'also exit' do input(' exit') end
25
17
  would 'ctrl+d' do mock(shell).puts{} ; input(nil) end
26
18
  would ':q' do shell.config[:exit] << ':q'; input(':q') end
27
19
  would '\q' do shell.config[:exit] << '\q'; input('\q') end
20
+
21
+ would 'not puts anything if it is not running' do
22
+ mock(shell).puts.times(0)
23
+
24
+ shell.eval_binding.eval('self').instance_variable_set(:@shell, shell)
25
+
26
+ input('@shell.stop; throw :rib_exit')
27
+ end
28
28
  end
29
29
 
30
30
  describe '#loop_once' do
@@ -34,32 +34,39 @@ describe Rib::Shell do
34
34
  else
35
35
  mock(shell).get_input{ str }
36
36
  end
37
+
37
38
  shell.loop_once
38
- true.should.eq true
39
+
40
+ ok
39
41
  end
40
42
 
41
43
  would 'handles ctrl+c' do
42
44
  mock(shell).handle_interrupt{}
45
+
43
46
  input{ raise Interrupt }
44
47
  end
45
48
 
46
49
  would 'prints result' do
47
50
  mock(shell).puts('=> "mm"'){}
51
+
48
52
  input('"m" * 2')
49
53
  end
50
54
 
51
55
  would 'error in print_result' do
52
56
  mock(Rib).warn(matching(/Error while printing result.*BOOM/m)){}
57
+
53
58
  input('obj = Object.new; def obj.inspect; raise "BOOM"; end; obj')
54
59
  end
55
60
 
56
61
  would 'not crash if user input is a blackhole' do
57
62
  mock(Rib).warn(matching(/Error while printing result/)){}
63
+
58
64
  input('Rib::Blackhole')
59
65
  end
60
66
 
61
67
  would 'print error from eval' do
62
68
  mock(shell).puts(matching(/RuntimeError/)){}
69
+
63
70
  input('raise "blah"')
64
71
  end
65
72
  end
@@ -67,7 +74,8 @@ describe Rib::Shell do
67
74
  describe '#prompt' do
68
75
  would 'be changeable' do
69
76
  shell.config[:prompt] = '> '
70
- shell.prompt.should.eq '> '
77
+
78
+ expect(shell.prompt).eq '> '
71
79
  end
72
80
  end
73
81
 
@@ -78,14 +86,50 @@ describe Rib::Shell do
78
86
 
79
87
  would 'line' do
80
88
  shell.eval_input('10 ** 2')
81
- shell.config[:line].should.eq @line + 1
89
+
90
+ expect(shell.config[:line]).eq @line + 1
82
91
  end
83
92
 
84
93
  would 'print error and increments line' do
85
94
  result, err = shell.eval_input('{')
86
- result.should.eq nil
87
- err.should.kind_of?(SyntaxError)
88
- shell.config[:line].should.eq @line + 1
95
+
96
+ expect(result).eq nil
97
+ expect(err).kind_of?(SyntaxError)
98
+ expect(shell.config[:line]).eq @line + 1
99
+ end
100
+ end
101
+
102
+ describe '#running?' do
103
+ would 'have complete flow' do
104
+ expect(shell).not.running?
105
+
106
+ mock(shell).get_input do
107
+ expect(shell).running?
108
+
109
+ mock(shell).puts{}
110
+
111
+ nil
112
+ end
113
+
114
+ shell.loop
115
+
116
+ expect(shell).not.running?
117
+ end
118
+ end
119
+
120
+ describe '#stop' do
121
+ would 'stop the loop if it is stopped' do
122
+ mock(shell).get_input do
123
+ expect(shell).running?
124
+
125
+ shell.stop
126
+
127
+ expect(shell).not.running?
128
+
129
+ 'Rib::Skip'
130
+ end
131
+
132
+ shell.loop
89
133
  end
90
134
  end
91
135
 
@@ -93,15 +137,18 @@ describe Rib::Shell do
93
137
  mock(shell).loop_once{ raise 'boom' }
94
138
  mock(Rib).warn(is_a(String)){}
95
139
  mock(shell).after_loop{}
96
- lambda{shell.loop}.should.raise(RuntimeError)
140
+
141
+ expect.raise(RuntimeError) do
142
+ shell.loop
143
+ end
97
144
  end
98
145
 
99
146
  would 'have empty binding' do
100
- shell.eval_input('local_variables').first.should.empty?
147
+ expect(shell.eval_input('local_variables').first).empty?
101
148
  end
102
149
 
103
150
  would 'not pollute main' do
104
- shell.eval_input('main').first.should.eq 'rib'
151
+ expect(shell.eval_input('main').first).eq 'rib'
105
152
  end
106
153
 
107
154
  would 'warn on removing main' do
@@ -110,11 +157,13 @@ describe Rib::Shell do
110
157
  def main; end
111
158
  end
112
159
  RUBY
160
+
113
161
  mock(Rib).warn(is_a(String)){}
114
- shell.eval_input('main').first.should.eq 'rib'
162
+
163
+ expect(shell.eval_input('main').first).eq 'rib'
115
164
  end
116
165
 
117
166
  would 'be main' do
118
- shell.eval_input('self.inspect').first.should.eq 'main'
167
+ expect(shell.eval_input('self.inspect').first).eq 'main'
119
168
  end
120
169
  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.5.1
4
+ version: 1.5.2
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-03-09 00:00:00.000000000 Z
11
+ date: 2017-05-01 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: |-
14
14
  Ruby-Interactive-ruBy -- Yet another interactive Ruby shell
@@ -81,6 +81,7 @@ files:
81
81
  - lib/rib/runner.rb
82
82
  - lib/rib/shell.rb
83
83
  - lib/rib/test.rb
84
+ - lib/rib/test/history.rb
84
85
  - lib/rib/test/multiline.rb
85
86
  - lib/rib/version.rb
86
87
  - rib.gemspec
@@ -93,8 +94,8 @@ files:
93
94
  - test/core/test_readline.rb
94
95
  - test/core/test_squeeze_history.rb
95
96
  - test/core/test_strip_backtrace.rb
96
- - test/extra/test_anchor.rb
97
97
  - test/extra/test_autoindent.rb
98
+ - test/more/test_anchor.rb
98
99
  - test/more/test_beep.rb
99
100
  - test/more/test_caller.rb
100
101
  - test/more/test_color.rb
@@ -105,7 +106,7 @@ files:
105
106
  - test/test_shell.rb
106
107
  homepage: https://github.com/godfat/rib
107
108
  licenses:
108
- - Apache License 2.0
109
+ - Apache-2.0
109
110
  metadata: {}
110
111
  post_install_message:
111
112
  rdoc_options: []
@@ -135,8 +136,8 @@ test_files:
135
136
  - test/core/test_readline.rb
136
137
  - test/core/test_squeeze_history.rb
137
138
  - test/core/test_strip_backtrace.rb
138
- - test/extra/test_anchor.rb
139
139
  - test/extra/test_autoindent.rb
140
+ - test/more/test_anchor.rb
140
141
  - test/more/test_beep.rb
141
142
  - test/more/test_caller.rb
142
143
  - test/more/test_color.rb