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