rib 0.1.0 → 0.9.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.
Files changed (60) hide show
  1. data/.gitignore +0 -4
  2. data/CHANGES.md +6 -0
  3. data/README +107 -113
  4. data/README.md +107 -113
  5. data/Rakefile +5 -3
  6. data/TODO.md +6 -0
  7. data/bin/rib-all +5 -0
  8. data/bin/rib-auto +9 -0
  9. data/bin/rib-min +5 -0
  10. data/bin/rib-rails +9 -0
  11. data/bin/rib-ramaze +9 -0
  12. data/lib/rib.rb +70 -6
  13. data/lib/rib/all.rb +0 -1
  14. data/lib/rib/api.rb +60 -64
  15. data/lib/rib/app/auto.rb +25 -0
  16. data/lib/rib/app/rails.rb +41 -0
  17. data/lib/rib/app/ramaze.rb +25 -0
  18. data/lib/rib/config.rb +3 -0
  19. data/lib/rib/core.rb +13 -1
  20. data/lib/rib/core/completion.rb +15 -3
  21. data/lib/rib/core/history.rb +56 -0
  22. data/lib/rib/core/multiline.rb +104 -0
  23. data/lib/rib/core/readline.rb +3 -1
  24. data/lib/rib/core/squeeze_history.rb +45 -0
  25. data/lib/rib/core/strip_backtrace.rb +45 -0
  26. data/lib/rib/core/underscore.rb +17 -8
  27. data/lib/rib/debug.rb +2 -1
  28. data/lib/rib/dep/hirb.rb +24 -0
  29. data/lib/rib/more.rb +4 -3
  30. data/lib/rib/more/anchor.rb +85 -0
  31. data/lib/rib/more/color.rb +44 -43
  32. data/lib/rib/{zore → more}/edit.rb +3 -3
  33. data/lib/rib/more/multiline_history.rb +24 -12
  34. data/lib/rib/more/multiline_history_file.rb +7 -3
  35. data/lib/rib/plugin.rb +2 -4
  36. data/lib/rib/runner.rb +84 -49
  37. data/lib/rib/shell.rb +4 -2
  38. data/lib/rib/test.rb +55 -2
  39. data/lib/rib/test/multiline.rb +140 -0
  40. data/lib/rib/version.rb +1 -1
  41. data/rib.gemspec +54 -22
  42. data/screenshot.png +0 -0
  43. data/task/gemgem.rb +3 -1
  44. data/test/core/{test_history_file.rb → test_history.rb} +29 -19
  45. data/test/core/test_multiline.rb +22 -0
  46. data/test/core/test_readline.rb +13 -8
  47. data/test/{more → core}/test_squeeze_history.rb +24 -18
  48. data/test/core/test_underscore.rb +32 -21
  49. data/test/more/test_multiline_history.rb +42 -0
  50. data/test/test_shell.rb +13 -8
  51. metadata +72 -27
  52. data/2011-02-28.md +0 -203
  53. data/CHANGES +0 -86
  54. data/TODO +0 -6
  55. data/lib/rib/core/history_file.rb +0 -38
  56. data/lib/rib/more/multiline.rb +0 -77
  57. data/lib/rib/more/squeeze_history.rb +0 -37
  58. data/lib/rib/more/strip_backtrace.rb +0 -43
  59. data/lib/rib/zore.rb +0 -3
  60. data/lib/rib/zore/anchor.rb +0 -69
data/lib/rib/test.rb CHANGED
@@ -9,12 +9,65 @@ require 'rib'
9
9
 
10
10
  shared :rib do
11
11
  before do
12
- Rib.disable_plugins
13
12
  end
14
13
 
15
14
  after do
16
15
  RR.verify
17
- Rib.enable_plugins
16
+ end
17
+
18
+ def test_for *plugins, &block
19
+ require 'rib/all' # exhaustive tests
20
+ rest = Rib.plugins - plugins
21
+ Rib.enable_plugins(plugins)
22
+ Rib.disable_plugins(rest)
23
+ yield
24
+
25
+ case ENV['TEST_LEVEL']
26
+ when '0'
27
+ when '1'
28
+ test_level1(rest, block)
29
+ when '2'
30
+ test_level2(rest, block)
31
+ when '3'
32
+ test_level3(rest, block)
33
+ else # test_level3 is too slow because of rr (i guess)
34
+ test_level2(rest, block)
35
+ end
36
+ end
37
+
38
+ def test_level1 rest, block
39
+ rest.each{ |target|
40
+ target.enable
41
+ block.call
42
+ target.disable
43
+ }
44
+ end
45
+
46
+ def test_level2 rest, block
47
+ rest.combination(2).each{ |targets|
48
+ Rib.enable_plugins(targets)
49
+ block.call
50
+ Rib.disable_plugins(targets)
51
+ }
52
+ end
53
+
54
+ def test_level3 rest, block
55
+ return block.call if rest.empty?
56
+ rest[0].enable
57
+ test_level3(rest[1..-1], block)
58
+ rest[0].disable
59
+ test_level3(rest[1..-1], block)
60
+ end
61
+
62
+ def readline?
63
+ Rib.constants.map(&:to_s).include?('Readline') &&
64
+ Rib::Readline.enabled?
65
+ end
66
+
67
+ def stub_readline
68
+ stub(::Readline).readline(is_a(String), true){
69
+ (::Readline::HISTORY << str.chomp)[-1]
70
+ }
18
71
  end
19
72
  end
20
73
 
@@ -0,0 +1,140 @@
1
+
2
+ shared :setup_multiline do
3
+ def setup_shell
4
+ @shell = Rib::Shell.new(
5
+ :binding => Object.new.instance_eval{binding}).before_loop
6
+ stub(@shell).print
7
+ stub(@shell).puts
8
+ end
9
+
10
+ def setup_input str
11
+ if readline?
12
+ mock(::Readline).readline(is_a(String), true){
13
+ (::Readline::HISTORY << str.chomp)[-1]
14
+ }
15
+ else
16
+ mock($stdin).gets{ str.chomp }
17
+ end
18
+ end
19
+
20
+ def input str
21
+ setup_input(str)
22
+ mock.proxy(@shell).throw(:rib_multiline)
23
+ end
24
+
25
+ def input_done str, err=nil
26
+ setup_input(str)
27
+ if err
28
+ mock(@shell).print_eval_error(is_a(err))
29
+ else
30
+ mock(@shell).print_result(is_a(Object))
31
+ end
32
+ @shell.loop_once
33
+ true.should.eq true
34
+ end
35
+ end
36
+
37
+ shared :multiline do
38
+ before do
39
+ setup_shell
40
+ end
41
+
42
+ should 'def f' do
43
+ check <<-RUBY
44
+ def f
45
+ 1
46
+ end
47
+ RUBY
48
+ end
49
+
50
+ should 'class C' do
51
+ check <<-RUBY
52
+ class C
53
+ end
54
+ RUBY
55
+ end
56
+
57
+ should 'begin' do
58
+ check <<-RUBY
59
+ begin
60
+ end
61
+ RUBY
62
+ end
63
+
64
+ should 'begin with RuntimeError' do
65
+ check <<-RUBY, RuntimeError
66
+ begin
67
+ raise 'multiline raised an error'
68
+ end
69
+ RUBY
70
+ end
71
+
72
+ should 'do end' do
73
+ check <<-RUBY
74
+ [].each do
75
+ end
76
+ RUBY
77
+ end
78
+
79
+ should 'block brace' do
80
+ check <<-RUBY
81
+ [].each{
82
+ }
83
+ RUBY
84
+ end
85
+
86
+ should 'hash' do
87
+ check <<-RUBY
88
+ {
89
+ }
90
+ RUBY
91
+ end
92
+
93
+ should 'hash value' do
94
+ check <<-RUBY
95
+ {1 =>
96
+ 2}
97
+ RUBY
98
+ end
99
+
100
+ should 'array' do
101
+ check <<-RUBY
102
+ [
103
+ ]
104
+ RUBY
105
+ end
106
+
107
+ should 'group' do
108
+ check <<-RUBY
109
+ (
110
+ )
111
+ RUBY
112
+ end
113
+
114
+ should 'string double quote' do
115
+ check <<-RUBY
116
+ "
117
+ "
118
+ RUBY
119
+ end
120
+
121
+ should 'string single quote' do
122
+ check <<-RUBY
123
+ '
124
+ '
125
+ RUBY
126
+ end
127
+
128
+ should 'be hash treated as a block SyntaxError' do
129
+ check <<-RUBY, SyntaxError
130
+ puts { :x => 10 }.class
131
+ RUBY
132
+ end
133
+
134
+ should 'begin with SyntaxError' do
135
+ check <<-RUBY, SyntaxError
136
+ begin
137
+ s-y n
138
+ RUBY
139
+ end
140
+ end
data/lib/rib/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
 
2
2
  module Rib
3
- VERSION = '0.1.0'
3
+ VERSION = '0.9.0'
4
4
  end
data/rib.gemspec CHANGED
@@ -2,67 +2,94 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{rib}
5
- s.version = "0.1.0"
5
+ s.version = "0.9.0"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = [%q{Lin Jen-Shin (godfat)}]
9
- s.date = %q{2011-08-06}
10
- s.description = %q{ripl plugins collection, take you want, leave you don't.}
9
+ s.date = %q{2011-08-14}
10
+ s.description = %q{Ruby-Interactive-ruBy -- Yet another interactive Ruby shell
11
+
12
+ Rib is based on the design of [ripl][] and the work of [ripl-rc][], some of
13
+ the features are also inspired by [pry][]. The aim of Rib is to be fully
14
+ featured and yet very easy to opt-out or opt-in other features. It shall
15
+ be simple, lightweight and modular so that everyone could customize Rib.
16
+
17
+ [ripl]: https://github.com/cldwalker/ripl
18
+ [ripl-rc]: https://github.com/godfat/ripl-rc
19
+ [pry]: https://github.com/pry/pry}
11
20
  s.email = [%q{godfat (XD) godfat.org}]
12
- s.executables = [%q{rib}]
21
+ s.executables = [
22
+ %q{rib},
23
+ %q{rib-all},
24
+ %q{rib-auto},
25
+ %q{rib-min},
26
+ %q{rib-rails},
27
+ %q{rib-ramaze}]
13
28
  s.extra_rdoc_files = [
14
- %q{CHANGES},
15
29
  %q{CONTRIBUTORS},
16
30
  %q{LICENSE},
17
- %q{TODO}]
31
+ %q{CHANGES.md},
32
+ %q{TODO.md},
33
+ %q{CONTRIBUTORS}]
18
34
  s.files = [
19
35
  %q{.gitignore},
20
36
  %q{.gitmodules},
21
37
  %q{.travis.yml},
22
- %q{2011-02-28.md},
23
- %q{CHANGES},
38
+ %q{CHANGES.md},
24
39
  %q{CONTRIBUTORS},
25
40
  %q{Gemfile},
26
41
  %q{LICENSE},
27
42
  %q{README},
28
43
  %q{README.md},
29
44
  %q{Rakefile},
30
- %q{TODO},
45
+ %q{TODO.md},
31
46
  %q{bin/rib},
47
+ %q{bin/rib-all},
48
+ %q{bin/rib-auto},
49
+ %q{bin/rib-min},
50
+ %q{bin/rib-rails},
51
+ %q{bin/rib-ramaze},
32
52
  %q{lib/rib.rb},
33
53
  %q{lib/rib/all.rb},
34
54
  %q{lib/rib/api.rb},
55
+ %q{lib/rib/app/auto.rb},
56
+ %q{lib/rib/app/rails.rb},
57
+ %q{lib/rib/app/ramaze.rb},
58
+ %q{lib/rib/config.rb},
35
59
  %q{lib/rib/core.rb},
36
60
  %q{lib/rib/core/completion.rb},
37
- %q{lib/rib/core/history_file.rb},
61
+ %q{lib/rib/core/history.rb},
62
+ %q{lib/rib/core/multiline.rb},
38
63
  %q{lib/rib/core/readline.rb},
64
+ %q{lib/rib/core/squeeze_history.rb},
65
+ %q{lib/rib/core/strip_backtrace.rb},
39
66
  %q{lib/rib/core/underscore.rb},
40
67
  %q{lib/rib/debug.rb},
68
+ %q{lib/rib/dep/hirb.rb},
41
69
  %q{lib/rib/more.rb},
70
+ %q{lib/rib/more/anchor.rb},
42
71
  %q{lib/rib/more/color.rb},
43
- %q{lib/rib/more/multiline.rb},
72
+ %q{lib/rib/more/edit.rb},
44
73
  %q{lib/rib/more/multiline_history.rb},
45
74
  %q{lib/rib/more/multiline_history_file.rb},
46
- %q{lib/rib/more/squeeze_history.rb},
47
- %q{lib/rib/more/strip_backtrace.rb},
48
75
  %q{lib/rib/plugin.rb},
49
76
  %q{lib/rib/runner.rb},
50
77
  %q{lib/rib/shell.rb},
51
78
  %q{lib/rib/test.rb},
79
+ %q{lib/rib/test/multiline.rb},
52
80
  %q{lib/rib/version.rb},
53
- %q{lib/rib/zore.rb},
54
- %q{lib/rib/zore/anchor.rb},
55
- %q{lib/rib/zore/edit.rb},
56
81
  %q{rib.gemspec},
57
82
  %q{screenshot.png},
58
83
  %q{task/.gitignore},
59
84
  %q{task/gemgem.rb},
60
85
  %q{test/core/test_completion.rb},
61
- %q{test/core/test_history_file.rb},
86
+ %q{test/core/test_history.rb},
87
+ %q{test/core/test_multiline.rb},
62
88
  %q{test/core/test_readline.rb},
89
+ %q{test/core/test_squeeze_history.rb},
63
90
  %q{test/core/test_underscore.rb},
64
91
  %q{test/more/test_color.rb},
65
- %q{test/more/test_squeeze_history.rb},
92
+ %q{test/more/test_multiline_history.rb},
66
93
  %q{test/test_api.rb},
67
94
  %q{test/test_plugin.rb},
68
95
  %q{test/test_shell.rb}]
@@ -72,14 +99,16 @@ Gem::Specification.new do |s|
72
99
  %q{README}]
73
100
  s.require_paths = [%q{lib}]
74
101
  s.rubygems_version = %q{1.8.7}
75
- s.summary = %q{ripl plugins collection, take you want, leave you don't.}
102
+ s.summary = %q{Ruby-Interactive-ruBy -- Yet another interactive Ruby shell}
76
103
  s.test_files = [
77
104
  %q{test/core/test_completion.rb},
78
- %q{test/core/test_history_file.rb},
105
+ %q{test/core/test_history.rb},
106
+ %q{test/core/test_multiline.rb},
79
107
  %q{test/core/test_readline.rb},
108
+ %q{test/core/test_squeeze_history.rb},
80
109
  %q{test/core/test_underscore.rb},
81
110
  %q{test/more/test_color.rb},
82
- %q{test/more/test_squeeze_history.rb},
111
+ %q{test/more/test_multiline_history.rb},
83
112
  %q{test/test_api.rb},
84
113
  %q{test/test_plugin.rb},
85
114
  %q{test/test_shell.rb}]
@@ -88,16 +117,19 @@ Gem::Specification.new do |s|
88
117
  s.specification_version = 3
89
118
 
90
119
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
91
- s.add_runtime_dependency(%q<bond>, [">= 0"])
120
+ s.add_development_dependency(%q<bond>, [">= 0"])
121
+ s.add_development_dependency(%q<hirb>, [">= 0"])
92
122
  s.add_development_dependency(%q<bacon>, [">= 0"])
93
123
  s.add_development_dependency(%q<rr>, [">= 0"])
94
124
  else
95
125
  s.add_dependency(%q<bond>, [">= 0"])
126
+ s.add_dependency(%q<hirb>, [">= 0"])
96
127
  s.add_dependency(%q<bacon>, [">= 0"])
97
128
  s.add_dependency(%q<rr>, [">= 0"])
98
129
  end
99
130
  else
100
131
  s.add_dependency(%q<bond>, [">= 0"])
132
+ s.add_dependency(%q<hirb>, [">= 0"])
101
133
  s.add_dependency(%q<bacon>, [">= 0"])
102
134
  s.add_dependency(%q<rr>, [">= 0"])
103
135
  end
data/screenshot.png CHANGED
Binary file
data/task/gemgem.rb CHANGED
@@ -19,13 +19,15 @@ module Gemgem
19
19
  s.description = description.join
20
20
  s.summary = description.first
21
21
 
22
- s.extra_rdoc_files = %w[CHANGES CONTRIBUTORS LICENSE TODO].select{ |f|
22
+ s.extra_rdoc_files = %w[CHANGES TODO CONTRIBUTORS LICENSE
23
+ CHANGES.md TODO.md CONTRIBUTORS].select{ |f|
23
24
  File.exist?(f) }
24
25
  s.rdoc_options = %w[--main README]
25
26
  s.rubygems_version = Gem::VERSION
26
27
  s.date = Time.now.strftime('%Y-%m-%d')
27
28
  s.files = gem_files
28
29
  s.test_files = gem_files.grep(%r{^test/(.+?/)*test_.+?\.rb$})
30
+ s.executables = Dir['bin/*'].map{ |f| File.basename(f) }
29
31
  s.require_paths = %w[lib]
30
32
  })
31
33
  spec.homepage ||= "https://github.com/godfat/#{spec.name}"
@@ -1,29 +1,18 @@
1
1
 
2
2
  require 'rib/test'
3
- require 'rib/core/history_file'
4
-
5
- describe Rib::HistoryFile do
6
- behaves_like :rib
7
-
8
- before do
9
- Rib::HistoryFile.enable
10
- @history = "/tmp/test_rib_#{rand}"
11
- @shell = Rib::Shell.new(:history_file => @history).before_loop
12
- end
13
-
14
- after do
15
- FileUtils.rm_f(@history)
16
- end
3
+ require 'rib/core/history'
17
4
 
5
+ shared :history do
18
6
  should '#after_loop save history' do
19
7
  inputs = %w[blih blah]
20
- @shell.history.replace(inputs)
8
+ @shell.history.clear
9
+ @shell.history.push(*inputs)
21
10
  @shell.after_loop
22
- File.read(@history).should.eq "#{inputs.join("\n")}\n"
11
+ File.read(@history_file).should.eq "#{inputs.join("\n")}\n"
23
12
  end
24
13
 
25
14
  should '#before_loop load previous history' do
26
- File.open(@history, 'w'){ |f| f.write "check\nthe\nmike" }
15
+ File.open(@history_file, 'w'){ |f| f.write "check\nthe\nmike" }
27
16
  @shell.before_loop
28
17
  @shell.history.to_a.should.eq %w[check the mike]
29
18
  end
@@ -36,7 +25,7 @@ describe Rib::HistoryFile do
36
25
  should '#read_history be accessible to plugins in #before_loop' do
37
26
  mod = Module.new do
38
27
  def read_history
39
- @history = ['pong_read_history']
28
+ config[:history] = ['pong_read_history']
40
29
  end
41
30
  end
42
31
  shell = Rib::Shell.dup
@@ -47,7 +36,7 @@ describe Rib::HistoryFile do
47
36
  should '#write_history be accessible to plugins in #after_loop' do
48
37
  mod = Module.new do
49
38
  def write_history
50
- @history = ['pong_write_history']
39
+ config[:history] = ['pong_write_history']
51
40
  end
52
41
  end
53
42
  shell = Rib::Shell.dup
@@ -55,3 +44,24 @@ describe Rib::HistoryFile do
55
44
  shell.new.before_loop.after_loop.history.should.eq ['pong_write_history']
56
45
  end
57
46
  end
47
+
48
+ describe Rib::History do
49
+ behaves_like :rib
50
+
51
+ before do
52
+ if readline?
53
+ ::Readline::HISTORY.clear
54
+ stub_readline
55
+ end
56
+ @history_file = "/tmp/test_rib_#{rand}"
57
+ @shell = Rib::Shell.new(:history_file => @history_file).before_loop
58
+ end
59
+
60
+ after do
61
+ FileUtils.rm_f(@history_file)
62
+ end
63
+
64
+ test_for Rib::History do
65
+ behaves_like :history
66
+ end
67
+ end