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