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)