class Teaspoon::Console

Public Class Methods

new(options = {}) click to toggle source
# File lib/teaspoon/console.rb, line 6
def initialize(options = {})
  @default_options = options
  @suites = {}
  Teaspoon::Environment.check_env!(options[:environment])
  Teaspoon::Environment.load(options)

  @server = start_server
rescue Teaspoon::ServerError => e
  Teaspoon.abort(e.message)
end

Public Instance Methods

execute(options = {}) click to toggle source
# File lib/teaspoon/console.rb, line 27
def execute(options = {})
  execute_without_handling(options)
rescue Teaspoon::Failure
  false
rescue Teaspoon::RunnerError => e
  log(e.message)
  false
rescue Teaspoon::Error => e
  Teaspoon.abort(e.message)
end
execute_without_handling(execute_options = {}) click to toggle source
# File lib/teaspoon/console.rb, line 38
def execute_without_handling(execute_options = {})
  @execute_options = execute_options
  @suites = {}
  resolve(options[:files])

  0 == suites.inject(0) do |failures, suite|
    export(suite) if options.include?(:export)
    failures += run_specs(suite)
    log("") # empty line for space
    failures
  end
end
export(suite) click to toggle source
# File lib/teaspoon/console.rb, line 61
def export(suite)
  raise Teaspoon::UnknownSuite.new(name: suite) unless Teaspoon.configuration.suite_configs[suite.to_s]

  log("Teaspoon exporting #{suite} suite at #{base_url_for(suite)}")
  Teaspoon::Exporter.new(suite, url_for(suite, false), options[:export]).export
end
failures?() click to toggle source
# File lib/teaspoon/console.rb, line 23
def failures?
  !execute
end
options() click to toggle source
# File lib/teaspoon/console.rb, line 17
def options
  @execute_options ||= {}
  @default_options ||= {}
  @default_options.merge(@execute_options)
end
run_specs(suite) click to toggle source
# File lib/teaspoon/console.rb, line 51
def run_specs(suite)
  raise Teaspoon::UnknownSuite.new(name: suite) unless Teaspoon.configuration.suite_configs[suite.to_s]

  log("Teaspoon running #{suite} suite at #{base_url_for(suite)}")
  runner = Teaspoon::Runner.new(suite)
  driver.run_specs(runner, url_for(suite))
  raise Teaspoon::Failure if Teaspoon.configuration.fail_fast && runner.failure_count > 0
  runner.failure_count
end

Protected Instance Methods

base_url_for(suite) click to toggle source
# File lib/teaspoon/console.rb, line 99
def base_url_for(suite)
  ["#{@server.url}#{Teaspoon.configuration.mount_at}", suite].join("/")
end
driver() click to toggle source
# File lib/teaspoon/console.rb, line 93
def driver
  return @driver if @driver
  driver = Teaspoon::Driver.fetch(Teaspoon.configuration.driver)
  @driver = driver.new(Teaspoon.configuration.driver_options)
end
filter(suite) click to toggle source
# File lib/teaspoon/console.rb, line 109
def filter(suite)
  parts = []
  parts << "grep=#{CGI.escape(options[:filter])}" if options[:filter].present?
  (@suites[suite] || options[:files] || []).flatten.each { |file| parts << "file[]=#{CGI.escape(file)}" }
  "#{parts.join('&')}" if parts.present?
end
log(str) click to toggle source
# File lib/teaspoon/console.rb, line 116
def log(str)
  STDOUT.print("#{str}\n") unless Teaspoon.configuration.suppress_log
end
resolve(files = []) click to toggle source
# File lib/teaspoon/console.rb, line 70
def resolve(files = [])
  return if files.blank?
  files.uniq.each do |path|
    if result = Teaspoon::Suite.resolve_spec_for(path)
      suite = @suites[result[:suite]] ||= []
      suite << result[:path]
    end
  end
end
start_server() click to toggle source
# File lib/teaspoon/console.rb, line 80
def start_server
  server = Teaspoon::Server.new
  log("Starting the Teaspoon server...") unless server.responsive?
  server.start
  server
end
suites() click to toggle source
# File lib/teaspoon/console.rb, line 87
def suites
  return [options[:suite]] if options[:suite].present?
  return @suites.keys if @suites.present?
  Teaspoon.configuration.suite_configs.keys
end
url_for(suite, console = true) click to toggle source
# File lib/teaspoon/console.rb, line 103
def url_for(suite, console = true)
  url = [base_url_for(suite), filter(suite)].compact.join("?")
  url += "#{(url.include?('?') ? '&' : '?')}reporter=Console" if console
  url
end