ripl 0.2.6 → 0.2.7

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.rdoc CHANGED
@@ -1,3 +1,7 @@
1
+ == 0.2.7
2
+ * Fix and (change order of) option parsing for ripl commands
3
+ * Add default help for a ripl command
4
+
1
5
  == 0.2.6
2
6
  * Add ctrl-c handling
3
7
  * Clean up api to extend options
data/README.rdoc CHANGED
@@ -77,7 +77,7 @@ modifying ~/.irbrc, wrap your irb-specific configuration in a block as follow:
77
77
  {ripl-multi_line}[http://github.com/janlelis/ripl-multi_line]).
78
78
  * No irb subsessions or workspaces (though ripl has jumps via
79
79
  {ripl-commands}[http://github.com/cldwalker/ripl-commands])
80
- * Some IRB.conf features aren't supported (see {ripl-irb}[http://github.com/cldwalker/ripl-irb]
80
+ * Some IRB.conf features aren't supported yet (see {ripl-irb}[http://github.com/cldwalker/ripl-irb]
81
81
  for details)
82
82
 
83
83
  Note: Irb features not in ripl can be implemented as plugins.
@@ -128,7 +128,7 @@ Creating and starting a custom shell is as simple as:
128
128
  Ripl.start takes options to customize your shell. For example if you wanted to
129
129
  start on a specific binding:
130
130
 
131
- Ripl.start :binding => my_desired_binding
131
+ Ripl.start :binding => MyClass.instance_eval{ binding }
132
132
 
133
133
  == Create Commands
134
134
 
data/lib/ripl/runner.rb CHANGED
@@ -16,11 +16,7 @@ module Ripl::Runner
16
16
 
17
17
  module API
18
18
  def run(argv=ARGV)
19
- ENV['RIPLRC'] = 'false' if argv.delete('-F')
20
- load_rc(Ripl.config[:riplrc]) unless ENV['RIPLRC'] == 'false'
21
- @run = true
22
- parse_options(argv)
23
- argv[0] ? run_command(argv) : start
19
+ argv[0].to_s[/^[^-]/] ? run_command(argv) : start(:argv=>argv)
24
20
  end
25
21
 
26
22
  def parse_options(argv)
@@ -28,26 +24,24 @@ module Ripl::Runner
28
24
  case argv.shift
29
25
  when /-I=?(.*)/
30
26
  $LOAD_PATH.unshift(*($1.empty? ? argv.shift.to_s : $1).split(":"))
31
- when /-r=?(.*)/
32
- require $1.empty? ? argv.shift.to_s : $1
33
- when '-d'
34
- $DEBUG = true
35
- when '-v', '--version'
36
- puts Ripl::VERSION; exit
37
- when '-f'
38
- ENV['RIPL_IRBRC'] = 'false'
39
- when '-h', '--help'
40
- name_max = OPTIONS.map {|e| e[0].length }.max
41
- desc_max = OPTIONS.map {|e| e[1].length }.max
42
- puts "Usage: ripl [OPTIONS] [COMMAND] [ARGS]", "\nOptions:",
43
- OPTIONS.map {|k,v| " %-*s %-*s" % [name_max, k, desc_max, v] }
44
- exit
45
- when /^(--?[^-]+)/
46
- parse_option($1, argv)
27
+ when /-r=?(.*)/ then require($1.empty? ? argv.shift.to_s : $1)
28
+ when '-d' then $DEBUG = true
29
+ when '-v', '--version' then puts(Ripl::VERSION); exit
30
+ when '-f' then Ripl.config[:irbrc] = false
31
+ when '-h', '--help' then puts(help); exit
32
+ when /^(--?[^-]+)/ then parse_option($1, argv)
47
33
  end
48
34
  end
49
35
  end
50
36
 
37
+ def help
38
+ return("ripl #{$1} [OPTIONS] [ARGS]") if $0[/ripl-(\w+)/]
39
+ name_max = OPTIONS.map {|e| e[0].length }.max
40
+ desc_max = OPTIONS.map {|e| e[1].length }.max
41
+ ["Usage: ripl [COMMAND] [OPTIONS] [ARGS]", "\nOptions:",
42
+ OPTIONS.map {|k,v| " %-*s %-*s" % [name_max, k, desc_max, v] }]
43
+ end
44
+
51
45
  def parse_option(option, argv)
52
46
  warn "ripl: invalid option `#{option.sub(/^-+/, '')}'"
53
47
  end
@@ -60,8 +54,9 @@ module Ripl::Runner
60
54
  end
61
55
 
62
56
  def start(options={})
63
- load_rc(Ripl.config[:riplrc]) if !@run && ENV['RIPLRC'] != 'false'
64
- Ripl.config[:irbrc] = ENV['RIPL_IRBRC'] != 'false' if ENV['RIPL_IRBRC']
57
+ argv = options.delete(:argv) || ARGV
58
+ load_rc(Ripl.config[:riplrc]) unless argv.delete('-F')
59
+ parse_options(argv) if $0[/ripl$|ripl-\w+$/]
65
60
  Ripl.shell(options).loop
66
61
  end
67
62
 
data/lib/ripl/shell.rb CHANGED
@@ -34,7 +34,7 @@ class Ripl::Shell
34
34
  # initialize plugins and their instance variables.
35
35
  def before_loop
36
36
  Ripl::Runner.load_rc(@irbrc) if @irbrc
37
- add_commands(loop_eval("self"))
37
+ add_commands(eval("self", @binding))
38
38
  end
39
39
 
40
40
  def add_commands(obj)
data/lib/ripl/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Ripl
2
- VERSION = '0.2.6'
2
+ VERSION = '0.2.7'
3
3
  end
data/man/ripl.1 CHANGED
@@ -10,7 +10,7 @@
10
10
  .
11
11
  .nf
12
12
 
13
- ripl [\-r|\-\-require] [\-I] [\-f] [\-d] [\-h|\-\-help] [\-v|\-\-version] COMMAND [ARGS]
13
+ ripl [COMMAND] [\-r|\-\-require] [\-I] [\-f] [\-d] [\-h|\-\-help] [\-v|\-\-version] [ARGS]
14
14
  .
15
15
  .fi
16
16
  .
@@ -228,7 +228,7 @@ Ripl\.start takes the same config keys mentioned in the \fBCONFIGURATION\fR sect
228
228
  .
229
229
  .nf
230
230
 
231
- Ripl\.start :binding => MyClass\.send(:binding)
231
+ Ripl\.start :binding => MyClass\.instance_eval{ binding }
232
232
  .
233
233
  .fi
234
234
  .
@@ -245,10 +245,10 @@ A ripl command is a command passed to ripl that loads a custom shell\. It\'s a c
245
245
  .nf
246
246
 
247
247
  # Load rails console without ~/\.irbrc
248
- $ ripl \-f rails
248
+ $ ripl rails \-f
249
249
 
250
250
  # Load rails console with debugger
251
- $ ripl \-rrdebug rails
251
+ $ ripl rails \-rrdebug
252
252
  .
253
253
  .fi
254
254
  .
data/man/ripl.1.html CHANGED
@@ -80,7 +80,7 @@
80
80
 
81
81
  <h2 id="SYNOPSIS">SYNOPSIS</h2>
82
82
 
83
- <pre><code>ripl [-r|--require] [-I] [-f] [-d] [-h|--help] [-v|--version] COMMAND [ARGS]
83
+ <pre><code>ripl [COMMAND] [-r|--require] [-I] [-f] [-d] [-h|--help] [-v|--version] [ARGS]
84
84
  </code></pre>
85
85
 
86
86
  <h2 id="DESCRIPTION">DESCRIPTION</h2>
@@ -230,7 +230,7 @@ Ripl.start
230
230
  <p>Ripl.start takes the same config keys mentioned in the <code>CONFIGURATION</code> section. For example if you wanted to
231
231
  start on a specific binding:</p>
232
232
 
233
- <pre><code>Ripl.start :binding =&gt; MyClass.send(:binding)
233
+ <pre><code>Ripl.start :binding =&gt; MyClass.instance_eval{ binding }
234
234
  </code></pre>
235
235
 
236
236
  <p>Also, since all shells load ~/.riplrc, Ripl.start can be used to override undesirable global
@@ -243,10 +243,10 @@ package and invoke custom shells. A ripl command can take standard ripl options
243
243
  before the command:</p>
244
244
 
245
245
  <pre><code># Load rails console without ~/.irbrc
246
- $ ripl -f rails
246
+ $ ripl rails -f
247
247
 
248
248
  # Load rails console with debugger
249
- $ ripl -rrdebug rails
249
+ $ ripl rails -rrdebug
250
250
  </code></pre>
251
251
 
252
252
  <p>To create a ripl command, create an executable in the format ripl-command and make sure it's in your
data/man/ripl.1.ronn CHANGED
@@ -3,7 +3,7 @@ ripl(1) -- Ruby Interactive Print Loop - A light, modular alternative to irb
3
3
 
4
4
  ## SYNOPSIS
5
5
 
6
- ripl [-r|--require] [-I] [-f] [-d] [-h|--help] [-v|--version] COMMAND [ARGS]
6
+ ripl [COMMAND] [-r|--require] [-I] [-f] [-d] [-h|--help] [-v|--version] [ARGS]
7
7
 
8
8
  ## DESCRIPTION
9
9
 
@@ -155,7 +155,7 @@ Creating and starting a custom shell is as simple as:
155
155
  Ripl.start takes the same config keys mentioned in the `CONFIGURATION` section. For example if you wanted to
156
156
  start on a specific binding:
157
157
 
158
- Ripl.start :binding => MyClass.send(:binding)
158
+ Ripl.start :binding => MyClass.instance_eval{ binding }
159
159
 
160
160
  Also, since all shells load ~/.riplrc, Ripl.start can be used to override undesirable global
161
161
  configuration for a custom shell.
@@ -167,10 +167,10 @@ package and invoke custom shells. A ripl command can take standard ripl options
167
167
  before the command:
168
168
 
169
169
  # Load rails console without ~/.irbrc
170
- $ ripl -f rails
170
+ $ ripl rails -f
171
171
 
172
172
  # Load rails console with debugger
173
- $ ripl -rrdebug rails
173
+ $ ripl rails -rrdebug
174
174
 
175
175
  To create a ripl command, create an executable in the format ripl-command and make sure it's in your
176
176
  shell's $PATH. For example, the file 'ripl-my_gem' would be invoked with 'ripl my_gem'. Any
data/test/runner_test.rb CHANGED
@@ -44,22 +44,48 @@ describe "Runner" do
44
44
  end
45
45
 
46
46
  describe "with subcommand" do
47
- it "that is valid gets invoked with arguments" do
48
- mock(Runner).exec('ripl-rails', '--blah')
49
- ripl("rails", '--blah')
47
+ def set_dollar_zero(val)
48
+ $progname = $0
49
+ alias $0 $progname
50
+ $0 = val
50
51
  end
51
52
 
52
- it "has global option before it parsed" do
53
- mock(Runner).exec('ripl-rails')
53
+ def mock_exec(*args)
54
+ mock(Runner).exec('ripl-rails', *args) do
55
+ set_dollar_zero 'ripl-rails'
56
+ ARGV.replace(args)
57
+ Ripl.start
58
+ end
59
+ end
60
+
61
+ it "gets invoked with arguments" do
62
+ mock_exec 'blah'
63
+ ripl("rails", 'blah')
64
+ end
65
+
66
+ it "has -F global option parsed" do
67
+ mock_exec '-F'
54
68
  dont_allow(Runner).load_rc(anything)
55
- ripl("-F", "rails", :riplrc=>false)
56
- ENV.delete('RIPLRC')
69
+ ripl("rails", "-F", :riplrc=>false)
70
+ end
71
+
72
+ it "has other global option parsed" do
73
+ mock_exec '-r=blah'
74
+ mock(Runner).require('blah')
75
+ ripl("rails", "-r=blah")
76
+ end
77
+
78
+ it "has automatic --help" do
79
+ mock_exec '--help'
80
+ mock(Runner).exit
81
+ ripl("rails", "--help").chomp.should == "ripl rails [OPTIONS] [ARGS]"
57
82
  end
58
83
 
59
84
  it "that is invalid aborts" do
60
85
  mock(Runner).abort("`zzz' is not a ripl command.")
61
- ripl 'zzz'
86
+ ripl 'zzz', :riplrc => false, :loop => false
62
87
  end
88
+ after_all { set_dollar_zero 'ripl' }
63
89
  end
64
90
 
65
91
  describe "with -I option" do
@@ -67,33 +93,33 @@ describe "Runner" do
67
93
  after { $:.replace @old_load_path }
68
94
 
69
95
  it "and equal sign adds to $LOAD_PATH" do
70
- ripl("-I=blah", :start=>true)
96
+ ripl("-I=blah")
71
97
  $:[0].should == 'blah'
72
98
  end
73
99
 
74
100
  it "and no equal sign adds to $LOAD_PATH" do
75
- ripl("-Ispec", :start=>true)
101
+ ripl("-Ispec")
76
102
  $:[0].should == 'spec'
77
103
  end
78
104
 
79
105
  it "and whitespace delimited argument adds to $LOAD_PATH" do
80
- ripl("-I", "spec", :start=>true)
106
+ ripl("-I", "spec")
81
107
  $:[0].should == 'spec'
82
108
  end
83
109
 
84
110
  it "containing multiple paths adds to $LOAD_PATH" do
85
- ripl("-I=app:lib", :start=>true)
111
+ ripl("-I=app:lib")
86
112
  $:[0,2].should == ['app', 'lib']
87
113
  end
88
114
 
89
115
  it "called more than once adds to $LOAD_PATH" do
90
- ripl("-Ilib", "-Ispec", :start=>true)
116
+ ripl("-Ilib", "-Ispec")
91
117
  $:[0,2].should == ['spec', 'lib']
92
118
  end
93
119
 
94
120
  it "with invalid argument doesn't add to $LOAD_PATH" do
95
121
  previous_size = $:.size
96
- ripl("-I", :start=>true)
122
+ ripl("-I")
97
123
  $:.size.should == previous_size
98
124
  end
99
125
  end
@@ -101,40 +127,40 @@ describe "Runner" do
101
127
  describe "with -r option" do
102
128
  it "and equal sign requires path" do
103
129
  mock(Runner).require('rip')
104
- ripl("-r=rip", :start=>true)
130
+ ripl("-r=rip")
105
131
  end
106
132
 
107
133
  it "and no equal sign requires path" do
108
134
  mock(Runner).require('rip')
109
- ripl("-rrip", :start=>true)
135
+ ripl("-rrip")
110
136
  end
111
137
 
112
138
  it "and whitespace delimited argument requires path" do
113
139
  mock(Runner).require('rip')
114
- ripl("-r", "rip", :start=>true)
140
+ ripl("-r", "rip")
115
141
  end
116
142
 
117
143
  it "called more than once requires paths" do
118
144
  mock(Runner).require('rip')
119
145
  mock(Runner).require('dude')
120
- ripl("-rrip", "-rdude", :start=>true)
146
+ ripl("-rrip", "-rdude")
121
147
  end
122
148
 
123
149
  it "with invalid argument requires blank" do
124
150
  mock(Runner).require('')
125
- ripl('-r', :start=>true)
151
+ ripl('-r')
126
152
  end
127
153
  end
128
154
 
129
155
  it "with -f option doesn't load irbrc" do
130
156
  reset_ripl
157
+ reset_config
131
158
  stub(Kernel).at_exit()
132
159
  mock_shell { |shell|
133
160
  mock(shell).loop_once { throw :ripl_exit }
134
161
  dont_allow(Runner).load_rc(anything)
135
162
  }
136
- ripl("-f")
137
- ENV.delete('RIPL_IRBRC')
163
+ ripl("-f", :loop => false)
138
164
  Ripl.config[:irbrc] = '~/.irbrc'
139
165
  end
140
166
 
@@ -146,31 +172,30 @@ describe "Runner" do
146
172
  mock(shell).before_loop
147
173
  mock(shell).loop_once { throw :ripl_exit }
148
174
  }
149
- ripl("-F", :riplrc => false)
150
- ENV.delete('RIPLRC')
175
+ ripl("-F", :riplrc => false, :loop => false)
151
176
  end
152
177
 
153
178
  it "with -d option sets $DEBUG" do
154
- ripl("-d", :start=>true)
179
+ ripl("-d")
155
180
  $DEBUG.should == true
156
181
  $DEBUG = nil
157
182
  end
158
183
 
159
184
  it "with -v option prints version" do
160
185
  mock(Runner).exit
161
- ripl("-v", :start=>true).chomp.should == Ripl::VERSION
186
+ ripl("-v").chomp.should == Ripl::VERSION
162
187
  end
163
188
 
164
189
  it "with -h option prints help" do
165
190
  mock(Runner).exit
166
- actual = ripl("-h", :start=>true)
191
+ actual = ripl("-h")
167
192
  actual.should =~ /^Usage: ripl/
168
193
  actual.should =~ /Options:\n -f/
169
194
  end
170
195
 
171
196
  it "with invalid options prints errors" do
172
197
  capture_stderr {
173
- ripl('--blah', '-z', :start=>true)
198
+ ripl('--blah', '-z')
174
199
  }.chomp.should == "ripl: invalid option `blah'\nripl: invalid option `z'"
175
200
  end
176
201
 
@@ -186,17 +211,17 @@ describe "Runner" do
186
211
  end
187
212
 
188
213
  it "parses plugin option" do
189
- ripl("--moo", :start=>true).chomp.should == 'MOOOO'
214
+ ripl("--moo").chomp.should == 'MOOOO'
190
215
  end
191
216
 
192
217
  it "displays plugin option in --help" do
193
218
  mock(Runner).exit
194
- ripl("--help", :start=>true).should =~ /--moo\s*just moos/
219
+ ripl("--help").should =~ /--moo\s*just moos/
195
220
  end
196
221
 
197
222
  it "handles invalid option" do
198
223
  capture_stderr {
199
- ripl('--blah', :start=>true)
224
+ ripl('--blah')
200
225
  }.chomp.should == "ripl: invalid option `blah'"
201
226
  end
202
227
  end
data/test/shell_test.rb CHANGED
@@ -52,6 +52,7 @@ describe "Shell" do
52
52
 
53
53
  describe "#before_loop" do
54
54
  before_all { Ripl::Commands.send(:define_method, :ping) { 'pong' } }
55
+ before { reset_config }
55
56
  it "adds commands to main from Commands" do
56
57
  stub(Ripl::Runner).load_rc
57
58
  stub(Kernel).at_exit
data/test/test_helper.rb CHANGED
@@ -10,7 +10,7 @@ module Helpers
10
10
  def ripl(*args)
11
11
  options = args[-1].is_a?(Hash) ? args.pop : {}
12
12
  mock_riplrc unless options[:riplrc] == false
13
- mock(Runner).start if options[:start]
13
+ mock(Ripl.shell).loop unless options[:loop] == false
14
14
  capture_stdout { Ripl::Runner.run(args) }
15
15
  end
16
16
 
@@ -27,7 +27,11 @@ module Helpers
27
27
  end
28
28
 
29
29
  def reset_ripl
30
- Ripl.instance_eval "@shell = @riplrc = nil"
30
+ Ripl.instance_eval "@config = @shell = @riplrc = nil"
31
+ end
32
+
33
+ def reset_config
34
+ Ripl.config.merge! :history => '~/.irb_history', :completion => {}
31
35
  end
32
36
 
33
37
  def capture_stdout(&block)
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ripl
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 25
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 2
9
- - 6
10
- version: 0.2.6
9
+ - 7
10
+ version: 0.2.7
11
11
  platform: ruby
12
12
  authors:
13
13
  - Gabriel Horner
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-12-03 00:00:00 -05:00
18
+ date: 2010-12-04 00:00:00 -05:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency