lib/capy.rb in capy-1.1.2 vs lib/capy.rb in capy-1.2.0
- old
+ new
@@ -10,22 +10,20 @@
def run(args)
@opts = Slop.parse!(args, :help => true) do
banner "capy [script.capy]\n"
on :b, :browser=, 'chrome, firefox', :default => 'chrome'
- on :h, :host=, 'app host'
- on :n, :nonstop
end
exit if opts.help?
+ trap('INT') { exit }
+
Capybara.register_driver :selenium do |app|
Capybara::Selenium::Driver.new(app, :browser => opts[:browser].to_sym)
end
Capybara.current_driver = :selenium
- Capybara.app_host = opts[:host] if opts[:host]
-
if args.empty?
start_shell
else
args.each do |script_file|
abort "No such file: #{script_file}".red unless File.exists?(script_file)
@@ -33,59 +31,58 @@
eval_script script_file
end
end
end
+ EXIT_COMMANDS = %w(exit quit)
+
def start_shell(evaluater = Evaluater.new)
- exit_commands = %w(exit quit)
+ return if @_start_shell
+ @_start_shell = true
Readline.completion_proc = lambda do |text|
- (Evaluater.instance_methods - Object.methods + exit_commands).grep(/^#{Regexp.quote(text.strip)}/)
+ (Evaluater.instance_methods - Object.methods + EXIT_COMMANDS).grep(/^#{Regexp.quote(text.strip)}/)
end
history_file = File.expand_path('~/.capy_history')
if File.exists?(history_file)
File.read(history_file, :encoding => "BINARY").
encode!(:invalid => :replace, :undef => :replace).
split(/\n/).
each { |line| Readline::HISTORY << line }
end
- puts 'Type `exit` to exit'
-
while buf = Readline.readline('> ', true)
unless Readline::HISTORY.count == 1
Readline::HISTORY.pop if buf.empty? || Readline::HISTORY[-1] == Readline::HISTORY[-2]
end
case buf.strip
- when *exit_commands
+ when *EXIT_COMMANDS
File.open(history_file, 'w') do |file|
lines = Readline::HISTORY.to_a[([Readline::HISTORY.size - 1000, 0].max)..-1]
file.print(lines.join("\n"))
end
- exit
+ return
else
begin
result = evaluater.instance_eval(buf)
puts "=> #{result.inspect}".cyan
rescue => e
error e
end
end
end
+
+ @_start_shell = false
end
def eval_script(script_file)
evaluater = Evaluater.new
evaluater.instance_eval(File.read(script_file), script_file, 1)
rescue => e
error e
- ensure
- unless opts.nonstop?
- start_shell(evaluater)
- end
end
private
def error(e)
@@ -97,8 +94,12 @@
class Evaluater
include Capybara::DSL
def host(app_host)
Capybara.app_host = app_host
+ end
+
+ def stop
+ Capy.start_shell(self)
end
end
end