Вот один из способов сделать это без установки обезьян.
class MyConn < ActiveResource::Connection
attr_reader :last_resp
def handle_response(resp)
@last_resp=resp
super
end
end
class Item < ActiveResource::Base
class << self
attr_writer :connection
end
self.site = 'http://yoursite'
end
# Set up our own connection
myconn = MyConn.new Item.connection.site
Item.connection = myconn # replace with our enhanced version
item = Item.find(123)
# you can also access myconn via Item.connection, since we've assigned it
myconn.last_resp.code # response code
myconn.last_resp.to_hash # header
Если вы измените некоторые поля класса, такие как site, ARes переназначит поле подключения с новым объектом Connection.Чтобы увидеть, когда это произойдет, найдите в active_resource / base.rb значение @connection, равное nil.В этих случаях вам придется снова назначить соединение.
ОБНОВЛЕНИЕ: Вот модифицированный MyConn, который должен быть потокобезопасным.(отредактировано с предложением Fivell)
class MyConn < ActiveResource::Connection
def handle_response(resp)
# Store in thread (thanks fivell for the tip).
# Use a symbol to avoid generating multiple string instances.
Thread.current[:active_resource_connection_last_response] = resp
super
end
# this is only a convenience method. You can access this directly from the current thread.
def last_resp
Thread.current[:active_resource_connection_last_response]
end
end