ey_api_hmac 0.0.9 → 0.0.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ey_api_hmac (0.0.8.pre)
4
+ ey_api_hmac (0.0.10.pre)
5
5
  json
6
6
  rack-client
7
7
 
@@ -11,14 +11,18 @@ module EY
11
11
  @auth_id = auth_id
12
12
  @auth_key = auth_key
13
13
  @standard_headers = {
14
- 'CONTENT_TYPE' => 'application/json',
15
- 'Accept' => 'application/json',
16
- 'HTTP_DATE' => Time.now.httpdate,
17
- 'USER_AGENT' => user_agent || default_user_agent
14
+ 'CONTENT_TYPE' => 'application/json',
15
+ 'Accept' => 'application/json',
16
+ 'HTTP_DATE' => Time.now.httpdate,
17
+ 'USER_AGENT' => user_agent || default_user_agent
18
18
  }
19
19
  @rack_builder_block = rack_builder_block
20
20
  end
21
21
 
22
+ def default_user_agent
23
+ "ApiHMAC"
24
+ end
25
+
22
26
  class NotFound < StandardError
23
27
  def initialize(url)
24
28
  super("#{url} not found")
@@ -65,7 +69,11 @@ module EY
65
69
  request(:get, url, &block)
66
70
  end
67
71
 
68
- protected
72
+ def handle_errors_with(error_handler)
73
+ @error_handler = error_handler
74
+ end
75
+
76
+ protected
69
77
 
70
78
  def client
71
79
  bak = self.backend
@@ -83,19 +91,33 @@ module EY
83
91
  end
84
92
 
85
93
  def request(method, url, body = nil, &block)
94
+ response = nil
95
+ request_headers = @standard_headers
86
96
  if body
87
- response = client.send(method, url, @standard_headers, body.to_json)
97
+ response = client.send(method, url, request_headers, body.to_json)
88
98
  else
89
- response = client.send(method, url, @standard_headers)
99
+ response = client.send(method, url, request_headers)
90
100
  end
91
101
  handle_response(url, response, &block)
102
+ rescue => e
103
+ request_hash = {:method => method, :url => url, :headers => request_headers, :body => body}
104
+ response_hash = {:status => response.status, :body => response.body} if response
105
+ handle_error(request_hash, (response_hash || {}), e) || (raise e)
106
+ end
107
+
108
+ def handle_error(request, response, exception)
109
+ if @error_handler
110
+ @error_handler.call(request, response, exception)
111
+ end
92
112
  end
93
113
 
94
114
  def handle_response(url, response)
95
115
  case response.status
96
116
  when 200, 201
97
- json_body = JSON.parse(response.body)
98
- yield json_body, response["Location"] if block_given?
117
+ if block_given?
118
+ json_body = JSON.parse(response.body)
119
+ yield json_body, response["Location"]
120
+ end
99
121
  when 404
100
122
  raise NotFound.new(url)
101
123
  when 400
@@ -1,5 +1,5 @@
1
1
  module EY
2
2
  module ApiHMAC
3
- VERSION = "0.0.9"
3
+ VERSION = "0.0.10"
4
4
  end
5
5
  end
@@ -0,0 +1,36 @@
1
+ require "spec_helper"
2
+ require 'ey_api_hmac'
3
+
4
+ describe EY::ApiHMAC::BaseConnection do
5
+ before do
6
+ @connection = EY::ApiHMAC::BaseConnection.new("123", "456")
7
+ end
8
+ describe "handle_error" do
9
+ describe "on 500" do
10
+ before do
11
+ @connection.backend = lambda do |env|
12
+ ["500", {}, ""]
13
+ end
14
+ end
15
+ it "raises an error" do
16
+ lambda { @connection.post("/", "blah") }.should raise_exception(EY::ApiHMAC::BaseConnection::UnknownError)
17
+ end
18
+ it "calls the error handler if one is registered" do
19
+ errors = []
20
+ @connection.handle_errors_with(lambda {|*args| errors << [args]; "handled"})
21
+ @connection.post("/", "blah").should eq("handled")
22
+ end
23
+ end
24
+ describe "on bad body" do
25
+ it "calls the error handler" do
26
+ @connection.backend = lambda do |env|
27
+ ["200", {"Content-Type" => "application/json"}, "200 OK"]
28
+ end
29
+ errors = []
30
+ @connection.handle_errors_with(lambda {|*args| errors << [args]; false})
31
+ lambda { @connection.post("/", "blah") {} }.should raise_exception(JSON::ParserError)
32
+ errors.should_not be_empty
33
+ end
34
+ end
35
+ end
36
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ey_api_hmac
3
3
  version: !ruby/object:Gem::Version
4
- hash: 13
4
+ hash: 11
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 9
10
- version: 0.0.9
9
+ - 10
10
+ version: 0.0.10
11
11
  platform: ruby
12
12
  authors:
13
13
  - "Jacob Burkhart & Thorben Schr\xC3\xB6der & David Calavera & others"
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-09-07 00:00:00 Z
18
+ date: 2011-09-08 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: rack-client
@@ -82,6 +82,7 @@ files:
82
82
  - lib/ey_api_hmac/sso.rb
83
83
  - lib/ey_api_hmac/version.rb
84
84
  - spec/api_auth_spec.rb
85
+ - spec/base_connection_spec.rb
85
86
  - spec/spec_helper.rb
86
87
  - spec/sso_spec.rb
87
88
  homepage: ""
@@ -119,5 +120,6 @@ specification_version: 3
119
120
  summary: HMAC Rack basic implementation for Engine Yard services
120
121
  test_files:
121
122
  - spec/api_auth_spec.rb
123
+ - spec/base_connection_spec.rb
122
124
  - spec/spec_helper.rb
123
125
  - spec/sso_spec.rb