Ruby on Rails | Screencasts | Download | Documentation | Weblog | Community | Source

Changeset 4887

Show
Ignore:
Timestamp:
08/31/06 09:31:11 (2 years ago)
Author:
bitsweat
Message:

200...400 are valid response codes. PUT and POST request bodies default to .

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/activeresource/CHANGELOG

    r4886 r4887  
    11*SVN* 
    22 
    3 * site= accepts URIs. [Jeremy Kemper] 
     3* Base.site= accepts URIs. 200...400 are valid response codes. PUT and POST request bodies default to ''. [Jeremy Kemper] 
    44 
    55* Initial checkin: object-oriented client for restful HTTP resources which follow the Rails convention. [DHH] 
  • trunk/activeresource/lib/active_resource/connection.rb

    r4492 r4887  
    1212      @message  = message 
    1313    end 
    14      
     14 
    1515    def to_s 
    1616      "Failed with #{response.code}" 
    1717    end 
    1818  end 
    19    
     19 
    2020  class ClientError < ConnectionError 
    2121  end 
     
    2323  class ServerError < ConnectionError 
    2424  end 
    25    
     25 
    2626  class ResourceNotFound < ClientError 
    2727  end 
    2828 
    2929  class Connection 
    30     attr_accessor :uri 
    31      
     30    attr_accessor :site 
     31 
    3232    class << self 
    3333      def requests 
     
    3939      @site = site 
    4040    end 
    41      
     41 
    4242    def get(path) 
    4343      Hash.create_from_xml(request(:get, path).body) 
    4444    end 
    45      
     45 
    4646    def delete(path) 
    4747      request(:delete, path) 
    4848    end 
    49      
    50     def put(path, body
     49 
     50    def put(path, body = ''
    5151      request(:put, path, body) 
    5252    end 
    5353 
    54     def post(path, body
     54    def post(path, body = ''
    5555      request(:post, path, body) 
    5656    end 
    57      
     57 
    5858    private 
    5959      def request(method, *arguments) 
    60         response = http.send(method, *arguments) 
     60        handle_response(http.send(method, *arguments)) 
     61      end 
    6162 
     63      def handle_response(response) 
    6264        case response.code.to_i 
    63           when 200...300 
     65          when 200...400 
    6466            response 
    6567          when 404 
     
    8082          @http.verify_mode = OpenSSL::SSL::VERIFY_NONE if @http.use_ssl 
    8183        end 
    82          
     84 
    8385        @http 
    8486      end 
  • trunk/activeresource/test/connection_test.rb

    r4492 r4887  
    11require "#{File.dirname(__FILE__)}/abstract_unit" 
    2 require "fixtures/person" 
    32 
    43class ConnectionTest < Test::Unit::TestCase 
     4  Response = Struct.new(:code) 
     5 
    56  def setup 
     7    @conn = ActiveResource::Connection.new('http://localhost') 
    68  end 
    7    
    8   def test_something 
    9     true 
     9 
     10  def test_handle_response 
     11    # 2xx and 3xx are valid responses. 
     12    [200, 299, 300, 399].each do |code| 
     13      expected = Response.new(code) 
     14      assert_equal expected, @conn.send(:handle_response, expected) 
     15    end 
     16 
     17    # 404 is a missing resource. 
     18    assert_response_raises ActiveResource::ResourceNotFound, 404 
     19 
     20    # 4xx are client errors. 
     21    [400, 499].each do |code| 
     22      assert_response_raises ActiveResource::ClientError, code 
     23    end 
     24 
     25    # 5xx are server errors. 
     26    [500, 599].each do |code| 
     27      assert_response_raises ActiveResource::ServerError, code 
     28    end 
     29 
     30    # Others are unknown. 
     31    [199, 600].each do |code| 
     32      assert_response_raises ActiveResource::ConnectionError, code 
     33    end 
    1034  end 
     35 
     36  protected 
     37    def assert_response_raises(klass, code) 
     38      assert_raise(klass, "Expected response code #{code} to raise #{klass}") do 
     39        @conn.send(:handle_response, Response.new(code)) 
     40      end 
     41    end 
    1142end