features/support/rails.rb in airbrake-3.1.6 vs features/support/rails.rb in airbrake-3.1.7

- old
+ new

@@ -1,5 +1,22 @@ +BUNDLE_ENV_VARS = %w(RUBYOPT BUNDLE_PATH BUNDLE_BIN_PATH BUNDLE_GEMFILE) +ORIGINAL_BUNDLE_VARS = Hash[ENV.select{ |key,value| BUNDLE_ENV_VARS.include?(key) }] + +ENV['RAILS_ENV'] = 'test' + +Before do + ENV['BUNDLE_GEMFILE'] = File.join(Dir.pwd, ENV['BUNDLE_GEMFILE']) unless ENV['BUNDLE_GEMFILE'].start_with?(Dir.pwd) + @framework_version = nil +end + +After do |s| + ORIGINAL_BUNDLE_VARS.each_pair do |key, value| + ENV[key] = value + end + Cucumber.wants_to_quit = true if s.failed? +end + module RailsHelpers def rails_root_exists? File.exists?(environment_path) end @@ -62,18 +79,10 @@ def rakefile_path File.join(rails_root, 'Rakefile') end - def bundle_gem(gem_name, version = nil) - File.open(gemfile_path, 'a') do |file| - gem = "gem '#{gem_name}'" - gem += ", '#{version}'" if version - file.puts(gem) - end - end - def config_gem(gem_name, version = nil) run = "Rails::Initializer.run do |config|" insert = " config.gem '#{gem_name}'" insert += ", :version => '#{version}'" if version content = File.read(environment_path) @@ -111,12 +120,11 @@ content = File.read(rakefile_path) content = "require 'thread'\n#{content}" File.open(rakefile_path, 'wb') { |file| file.write(content) } end - def perform_request(uri, environment = 'production') - if rails3? +def perform_request(uri, environment = 'production') request_script = <<-SCRIPT require File.expand_path('../config/environment', __FILE__) env = Rack::MockRequest.env_for(#{uri.inspect}) @@ -124,78 +132,27 @@ response = response.last if response.last.is_a?(ActionDispatch::Response) if response.is_a?(Array) - puts response.join + puts "Status: " + response.first.to_s + puts "Headers: " + response.second.to_s + if response.last.respond_to?(:each) + # making it work even with Rack::BodyProxy + body = "" + response.last.each do |chunk| + body << chunk + end + response.pop + response << body + end + puts "Body: " + response.last.to_s else puts response.body end SCRIPT File.open(File.join(rails_root, 'request.rb'), 'w') { |file| file.write(request_script) } - @terminal.cd(rails_root) - @terminal.run("ruby -rthread ./script/rails runner -e #{environment} request.rb") - elsif rails_uses_rack? - request_script = <<-SCRIPT - require File.expand_path('../config/environment', __FILE__) - - env = Rack::MockRequest.env_for(#{uri.inspect}) - app = Rack::Lint.new(ActionController::Dispatcher.new) - - status, headers, body = app.call(env) - - response = "" - if body.respond_to?(:to_str) - response << body - else - body.each { |part| response << part } - end - - puts response - SCRIPT - File.open(File.join(rails_root, 'request.rb'), 'w') { |file| file.write(request_script) } - @terminal.cd(rails_root) - @terminal.run("ruby -rthread ./script/runner -e #{environment} request.rb") - else - uri = URI.parse(uri) - request_script = <<-SCRIPT - require 'cgi' - class CGIWrapper < CGI - def initialize(*args) - @env_table = {} - @stdinput = $stdin - super(*args) - end - attr_reader :env_table - end - $stdin = StringIO.new("") - cgi = CGIWrapper.new - cgi.env_table.update({ - 'HTTPS' => 'off', - 'REQUEST_METHOD' => "GET", - 'HTTP_HOST' => #{[uri.host, uri.port].join(':').inspect}, - 'SERVER_PORT' => #{uri.port.inspect}, - 'REQUEST_URI' => #{uri.request_uri.inspect}, - 'PATH_INFO' => #{uri.path.inspect}, - 'QUERY_STRING' => #{uri.query.inspect} - }) - require 'dispatcher' unless defined?(ActionController::Dispatcher) - Dispatcher.dispatch(cgi) - SCRIPT - File.open(File.join(rails_root, 'request.rb'), 'w') { |file| file.write(request_script) } - @terminal.cd(rails_root) - @terminal.run("ruby -rthread ./script/runner -e #{environment} request.rb") - end end - def monkeypatch_old_version - monkeypatchin= <<-MONKEYPATCHIN - - MissingSourceFile::REGEXPS << [/^cannot load such file -- (.+)$/i, 1] - - MONKEYPATCHIN - - File.open(File.join(rails_root,"config","initializers", 'monkeypatchin.rb'), 'w') { |file| file.write(monkeypatchin) } - end end World(RailsHelpers)