lib/capy.rb in capy-1.4.4 vs lib/capy.rb in capy-1.5.0

- old
+ new

@@ -1,10 +1,11 @@ require 'readline' require "capy/version" require "slop" require "colored" require 'capybara/dsl' +require 'capy/evaluator' module Capy class << self attr_reader :opts, :mode @@ -23,26 +24,26 @@ setup_capybara @mode = opts.js? ? :javascript : :capybara - evaluater = Evaluater.new + evaluator = Evaluator.new - evaluater.visit Capybara.app_host if Capybara.app_host + evaluator.visit Capybara.app_host if Capybara.app_host if args.empty? - start_shell evaluater + start_shell evaluator else args.each do |script_file| unless File.exists?(script_file) puts "No such file: #{script_file}".red return 1 end puts "Running: #{script_file} ..." - result = evaluater.eval_script File.read(script_file), mode + result = evaluator.eval_script File.read(script_file), mode, script_file puts "=> #{result.inspect}".cyan - start_shell evaluater if opts.stop? + start_shell evaluator if opts.stop? end end 0 rescue Slop::InvalidOptionError => e @@ -69,16 +70,16 @@ Capybara.app_host = opts[:'app-host'] end EXIT_COMMANDS = %w(exit quit) - def start_shell(evaluater) + def start_shell(evaluator) 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)}/) + (Evaluator.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"). @@ -99,11 +100,11 @@ file.print(lines.join("\n")) end return else begin - result = evaluater.eval_script(buf, mode) + result = evaluator.eval_script(buf, mode) puts "=> #{result.inspect}".cyan rescue Exception => e error e end end @@ -115,82 +116,8 @@ private def error(e) puts "#{e.backtrace[0]} #{e} (#{e.class})".red puts "\t#{e.backtrace[1..-1].join("\n\t")}".red - end - end - - class Evaluater - include Capybara::DSL - - def initialize - if page.driver.respond_to?(:header) - page.driver.header( - 'user-agent', - 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.5 Safari/534.55.3' - ) - end - end - - def eval_script(script, mode) - case mode - when :javascript - javascript script - else - capybara script - end - end - - def javascript(script) - page.evaluate_script script.sub(/\A#!.*\n/, '') - end - alias_method :js, :javascript - - def capybara(script) - instance_eval script - end - - def take_screenshot(png_path = nil) - png_path = gen_uniq_file_name('Screen Shot', 'png') unless png_path - case Capybara.current_driver - when :webkit - driver.render(png_path) - else - browser.save_screenshot(png_path) - end - png_path - end - - def driver - page.driver - end - - def browser - driver.browser - end - - def host(app_host) - Capybara.app_host = app_host - end - - def stop - Capy.start_shell(self) - end - - private - - def gen_uniq_file_name(prefix, extension) - file_name = "#{prefix} #{Time.now}" - i = 2 - while File.exists?("#{file_name}.#{extension}") - file_name = if file_name =~ /\(\d+\)$/ - file_name.sub(/\(\d+\)$/, i.to_s) - else - file_name + " (#{i})" - end - i += 1 - end - "#{file_name}.#{extension}" end end end