提交 116df09c 编写于 作者: J José Valim

Add notifications to ActiveResource.

上级 7c3573f3
......@@ -103,14 +103,13 @@ def head(path, headers = {})
with_auth { request(:head, path, build_request_headers(headers, :head, self.site.merge(path))) }
end
private
# Makes a request to the remote service.
def request(method, path, *arguments)
logger.info "#{method.to_s.upcase} #{site.scheme}://#{site.host}:#{site.port}#{path}" if logger
result = nil
ms = Benchmark.ms { result = http.send(method, path, *arguments) }
logger.info "--> %d %s (%d %.0fms)" % [result.code, result.message, result.body ? result.body.length : 0, ms] if logger
result = ActiveSupport::Notifications.instrument!("active_resource.request",
:method => method, :path => path, :site => site) do
http.send(method, path, *arguments)
end
handle_response(result)
rescue Timeout::Error => e
raise TimeoutError.new(e.message)
......@@ -274,10 +273,6 @@ def http_format_header(http_method)
{HTTP_FORMAT_HEADER_NAMES[http_method] => format.mime_type}
end
def logger #:nodoc:
Base.logger
end
def legitimize_auth_type(auth_type)
return :basic if auth_type.nil?
auth_type = auth_type.to_sym
......
require "active_resource"
require "rails"
\ No newline at end of file
require "rails"
module ActiveResource
class Railtie < Rails::Railtie
plugin_name :active_resource
require "active_resource/railties/subscriber"
subscriber ActiveResource::Railties::Subscriber.new
end
end
\ No newline at end of file
module ActiveResource
module Railties
class Subscriber < Rails::Subscriber
def request(event)
result, site = event.payload[:result], event.payload[:site]
info "#{event.payload[:method].to_s.upcase} #{site.scheme}://#{site.host}:#{site.port}#{event.payload[:path]}"
info "--> %d %s %d (%.1fms)" % [result.code, result.message, result.body.to_s.length, event.duration]
end
def logger
ActiveResource::Base.logger
end
end
end
end
\ No newline at end of file
require "abstract_unit"
require "fixtures/person"
require "rails/subscriber/test_helper"
require "active_resource/railties/subscriber"
module SubscriberTest
Rails::Subscriber.add(:active_resource, ActiveResource::Railties::Subscriber.new)
def setup
@matz = { :id => 1, :name => 'Matz' }.to_xml(:root => 'person')
ActiveResource::HttpMock.respond_to do |mock|
mock.get "/people/1.xml", {}, @matz
end
super
end
def set_logger(logger)
ActiveResource::Base.logger = logger
end
def test_request_notification
matz = Person.find(1)
wait
assert_equal 2, @logger.logged(:info).size
assert_equal "GET http://somewhere.else:80/people/1.xml", @logger.logged(:info)[0]
assert_match /\-\-\> 200 200 106/, @logger.logged(:info)[1]
end
class SyncSubscriberTest < ActiveSupport::TestCase
include Rails::Subscriber::SyncTestHelper
include SubscriberTest
end
class AsyncSubscriberTest < ActiveSupport::TestCase
include Rails::Subscriber::AsyncTestHelper
include SubscriberTest
end
end
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册