mirror-api 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -34,7 +34,7 @@ require "mirror-api"
34
34
  ```
35
35
  ### Authenticating your client
36
36
  ```ruby
37
- token = Mirror::OAuth.new(client_id, client_secret, refresh_token)
37
+ token = Mirror::Api::OAuth.new(client_id, client_secret, refresh_token)
38
38
 
39
39
  api = Mirror::Api::Client.new(token)
40
40
  ```
@@ -0,0 +1,14 @@
1
+ module Mirror
2
+ module Api
3
+ class BadRequestError < RuntimeError
4
+
5
+ attr :details, :error
6
+
7
+ def initialize(error, details)
8
+ @error = error
9
+ @details = details
10
+ end
11
+
12
+ end
13
+ end
14
+ end
@@ -1,9 +1,12 @@
1
+ require_relative "not_found_error"
2
+ require_relative "bad_request_error"
3
+
1
4
  module Mirror
2
5
  module Api
3
6
  class Errors
4
- ERROR_400 = {code: 1, :message => "Mirror API returned a status code 400 for this call"}
5
- ERROR_404 = {code: 2, :message => "Mirror API returned a status code 404 for this call"}
6
- INTERNAL_ERROR = {:code => 100, :message => "We are experiencing problems requesting your name. Our team has been notified."}
7
+ ERROR_400 = {code: 1, :message => "Mirror API returned a status code 400 for this call", :ex_class => Mirror::Api::BadRequestError}
8
+ ERROR_404 = {code: 2, :message => "Mirror API returned a status code 404 for this call", :ex_class => Mirror::Api::NotFoundError}
9
+ ERROR = {:code => 100, :message => "Mirror API returned an unexpected status code"}
7
10
  TOKEN_REFRESH_ERROR = {:code => 200, :message => "Could not refresh your API access token"}
8
11
  end
9
12
  end
@@ -0,0 +1,14 @@
1
+ module Mirror
2
+ module Api
3
+ class NotFoundError < RuntimeError
4
+
5
+ attr :details, :error
6
+
7
+ def initialize(error, details)
8
+ @error = error
9
+ @details = details
10
+ end
11
+
12
+ end
13
+ end
14
+ end
@@ -37,7 +37,7 @@ module Mirror
37
37
 
38
38
  def logger=(value)
39
39
  if value
40
- if value.is_a?(Logger)
40
+ if value.respond_to?(:warn) && value.respond_to?(:error)
41
41
  @logger = value
42
42
  else
43
43
  raise "Invalid object given as logger #{value.inspect}"
@@ -96,10 +96,12 @@ module Mirror
96
96
  def handle_http_response(response, request, result, &block)
97
97
  @request = request
98
98
  case response.code
99
- when 404
100
- when 400
99
+ when 404, 400
100
+ @error_response = response.body
101
+ @error_code = response.code
102
+ @chosen_error = @error_code == 400 ? Mirror::Api::Errors::ERROR_400 : Mirror::Api::Errors::ERROR_404
101
103
  if @logger
102
- msg = "ERROR - #{response.code} #{request.inspect} to #{self.invoke_url} with params #{self.params}. Response is #{response.body}"
104
+ msg = "ERROR - #{@error_code} #{request.inspect} to #{self.invoke_url} with params #{self.params}. Response is #{@error_response}"
103
105
  @logger.error(msg)
104
106
  end
105
107
  response
@@ -124,7 +126,7 @@ module Mirror
124
126
  if successful_response?
125
127
  ret_val
126
128
  else
127
- send_error
129
+ @chosen_error ? send_chosen_error : send_error
128
130
  end
129
131
  end
130
132
 
@@ -134,7 +136,13 @@ module Mirror
134
136
  @last_error[:validation_error] = validation_error if validation_error
135
137
  msg += " with params #{params}"
136
138
  @logger.warn(msg) if @logger
137
- raise error_desc[:message] if throw_on_fail
139
+ if throw_on_fail
140
+ if error_desc[:ex_class]
141
+ raise error_desc[:ex_class].new(@last_error, params)
142
+ else
143
+ raise error_desc[:message]
144
+ end
145
+ end
138
146
  end
139
147
 
140
148
  def set_data
@@ -185,11 +193,19 @@ module Mirror
185
193
 
186
194
  def send_error
187
195
  return handle_error(
188
- Mirror::Api::Errors::ERROR_400,
196
+ Mirror::Api::Errors::ERROR,
189
197
  "Error making a request for #{@resource}",
190
198
  @data
191
199
  )
192
200
  end
201
+
202
+ def send_chosen_error
203
+ return handle_error(
204
+ @chosen_error,
205
+ "Error making a request for #{@resource}",
206
+ {:response => @error_response, :code => @error_code}
207
+ )
208
+ end
193
209
  end
194
210
  end
195
211
  end
@@ -1,5 +1,5 @@
1
1
  module Mirror
2
2
  module Api
3
- VERSION = "0.1.0"
3
+ VERSION = "0.1.1"
4
4
  end
5
5
  end
@@ -0,0 +1,18 @@
1
+ {
2
+ "error": {
3
+ "errors": [
4
+ {
5
+ "domain": "global",
6
+ "reason": "required",
7
+ "message": "collection field is required for Subscription"
8
+ },
9
+ {
10
+ "domain": "global",
11
+ "reason": "required",
12
+ "message": "callbackUrl field is required for Subscription"
13
+ }
14
+ ],
15
+ "code": 400,
16
+ "message": "collection field is required for Subscription"
17
+ }
18
+ }
@@ -18,6 +18,11 @@ def fixture(file, read=false)
18
18
  file
19
19
  end
20
20
 
21
+ RSpec.configure do |config|
22
+ config.filter_run :focus => true
23
+ config.run_all_when_everything_filtered = true
24
+ end
25
+
21
26
  def json_post_request_headers(token, body)
22
27
  {
23
28
  'Accept'=>'application/json',
@@ -41,8 +41,8 @@ describe "Subscriptions" do
41
41
 
42
42
  context "bubbling errors" do
43
43
  it "should raise ex" do
44
- @api = Mirror::Api::Client.new(@token, true)
45
- expect{@api.subscriptions.delete(@id)}.to raise_error
44
+ @api = Mirror::Api::Client.new(@token, raise_errors: true)
45
+ expect{@api.subscriptions.delete(@id)}.to raise_error(Mirror::Api::BadRequestError)
46
46
  end
47
47
  end
48
48
  end
@@ -75,20 +75,20 @@ describe "Subscriptions" do
75
75
  stub_request(:post, "https://www.googleapis.com/mirror/v1/subscriptions/").
76
76
  with(body: @body2,
77
77
  headers: json_post_request_headers(@token, @body2.to_json)).
78
- to_return(status: 404,
79
- body: {},
78
+ to_return(status: 400,
79
+ body: fixture("subscriptions_insert_bad.json", true),
80
80
  headers: {})
81
81
  end
82
82
  it "should return nil" do
83
83
  @api = Mirror::Api::Client.new(@token)
84
- subscription = @api.subscriptions.insert({not_cool_dude: "Really you thought that was valid?!"})
84
+ subscription = @api.subscriptions.insert(@body2)
85
85
  subscription.should == nil
86
86
  end
87
87
 
88
88
  context "bubbling errors" do
89
89
  it "should raise ex" do
90
90
  @api = Mirror::Api::Client.new(@token, {:raise_errors => true})
91
- expect{@api.subscriptions.insert(@body)}.to raise_error
91
+ expect{@api.subscriptions.insert(@body2)}.to raise_error(Mirror::Api::BadRequestError)
92
92
  end
93
93
  end
94
94
  end
@@ -161,7 +161,7 @@ describe "Subscriptions" do
161
161
 
162
162
  it "should raise an exception" do
163
163
  @api = Mirror::Api::Client.new(@token, {:raise_errors => true})
164
- expect{@api.subscriptions.update(@id, @body)}.to raise_error
164
+ expect{@api.subscriptions.update(@id, @body)}.to raise_error(Mirror::Api::BadRequestError)
165
165
  end
166
166
  end
167
167
  end
@@ -130,7 +130,7 @@ describe "Timeline Attachments" do
130
130
  headers: {})
131
131
  end
132
132
 
133
- it "should return a list of contacts", :focus => true do
133
+ it "should return a list of contacts" do
134
134
  attachments = @api.timeline.list(@timeline_id, {attachments: {} })
135
135
  attachments.should_not be_nil
136
136
  attachments.items.count.should == 2 # see fixture
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mirror-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-05-13 00:00:00.000000000 Z
13
+ date: 2013-09-04 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rake
@@ -205,8 +205,10 @@ files:
205
205
  - Rakefile
206
206
  - example/.gitkeep
207
207
  - lib/mirror-api.rb
208
+ - lib/mirror-api/bad_request_error.rb
208
209
  - lib/mirror-api/client.rb
209
210
  - lib/mirror-api/errors.rb
211
+ - lib/mirror-api/not_found_error.rb
210
212
  - lib/mirror-api/oauth.rb
211
213
  - lib/mirror-api/request.rb
212
214
  - lib/mirror-api/request_data.rb
@@ -222,6 +224,7 @@ files:
222
224
  - spec/fixtures/locations_item.json
223
225
  - spec/fixtures/locations_list.json
224
226
  - spec/fixtures/oauth_response.json
227
+ - spec/fixtures/subscriptions_insert_bad.json
225
228
  - spec/fixtures/subscriptions_item.json
226
229
  - spec/fixtures/subscriptions_list.json
227
230
  - spec/fixtures/timeline_item.json
@@ -270,6 +273,7 @@ test_files:
270
273
  - spec/fixtures/locations_item.json
271
274
  - spec/fixtures/locations_list.json
272
275
  - spec/fixtures/oauth_response.json
276
+ - spec/fixtures/subscriptions_insert_bad.json
273
277
  - spec/fixtures/subscriptions_item.json
274
278
  - spec/fixtures/subscriptions_list.json
275
279
  - spec/fixtures/timeline_item.json