lib/bbq/test_client.rb in bbq-0.2.1 vs lib/bbq/test_client.rb in bbq-0.3.0

- old
+ new

@@ -1,95 +1,5 @@ -require 'bbq/roles' +require 'bbq/core/test_client' module Bbq - class TestClient - class UnsupportedMethodError < StandardError; end - - include Bbq::Roles - - def initialize(options = {}) - @options = options - end - - HTTP_METHODS = %w(get post put delete head options patch) - - HTTP_METHODS.each do |method| - class_eval <<-RUBY - def #{method}(path, params = {}, headers = {}) - unless driver.respond_to? :#{method} - raise UnsupportedMethodError, "Your driver does not support #{method.upcase} method" - end - - response = driver.#{method}(path, params, default_headers.merge(headers)) - parsed_response = parse_response(response) - yield parsed_response if block_given? - parsed_response - end - RUBY - end - - protected - def app - @options[:app] || Bbq.app - end - - def default_headers - @options[:headers] || {} - end - - def driver - @driver ||= RackTest.new(app) - end - - def parse_response(response) - case response.headers["Content-Type"] - when /^application\/(.*\+)?json/ - response.extend(JsonBody) - when /^application\/(.*\+)?x-yaml/ - response.extend(YamlBody) - else - response - end - end - - class RackTest - attr_accessor :app - - def initialize(app) - self.app = app - end - - module ConvertHeaders - HTTP_METHODS.each do |method| - class_eval <<-RUBY - def #{method}(path, params = {}, headers = {}) - super(path, params, to_env_headers(headers)) - end - RUBY - end - - def to_env_headers(http_headers) - http_headers.map do |k, v| - k = k.upcase.gsub("-", "_") - k = "HTTP_#{k}" unless ["CONTENT_TYPE", "CONTENT_LENGTH"].include?(k) - { k => v } - end.inject({}, :merge) - end - end - - include Rack::Test::Methods - include ConvertHeaders - end - - module JsonBody - def body - @parsed_body ||= super.empty?? super : JSON.parse(super) - end - end - - module YamlBody - def body - @parsed_body ||= YAML.load(super) - end - end - end + TestClient = ::Bbq::Core::TestClient end