croudia 1.0.9 → 1.0.10
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/croudia/default.rb +5 -1
- data/lib/croudia/entities.rb +17 -0
- data/lib/croudia/entity/media.rb +13 -0
- data/lib/croudia/error.rb +48 -0
- data/lib/croudia/request/raise_error.rb +19 -0
- data/lib/croudia/response/parse_json.rb +23 -0
- data/lib/croudia/response/raise_error.rb +36 -0
- data/lib/croudia/status.rb +4 -0
- data/lib/croudia/version.rb +1 -1
- data/spec/croudia/error_spec.rb +46 -0
- data/spec/fixtures/error.json +3 -0
- data/spec/fixtures/status.json +1 -1
- metadata +11 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 68c388cfc2c0d3d69defbc84ffb59e370c2977c3
|
4
|
+
data.tar.gz: 1497af451bd3a78bc8642492bf1a6f090700698f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e9863275f9486fc8de0e50aab75482aa4859ad2c2fd8946022b29782cd25e709e32d7419719e9ed5f6341bab570a300702704279c756d999a33bda0cabdfc90c
|
7
|
+
data.tar.gz: 885898faeab2a439c97b864be90aa7f1ccec545b9357bc67e85725d120cabc305290f2d65bcf5229075788297dfa322c353f420f3a85a37cb6d95aa771018406
|
data/lib/croudia/default.rb
CHANGED
@@ -2,6 +2,9 @@ require 'faraday'
|
|
2
2
|
require 'faraday_middleware'
|
3
3
|
require 'croudia/configurable'
|
4
4
|
require 'croudia/request/multipart_with_file'
|
5
|
+
require 'croudia/request/raise_error'
|
6
|
+
require 'croudia/response/parse_json'
|
7
|
+
require 'croudia/response/raise_error'
|
5
8
|
require 'croudia/version'
|
6
9
|
|
7
10
|
module Croudia
|
@@ -24,9 +27,10 @@ module Croudia
|
|
24
27
|
builder.request :multipart_with_file
|
25
28
|
builder.request :multipart
|
26
29
|
builder.request :url_encoded
|
30
|
+
builder.request :raise_error
|
27
31
|
|
28
|
-
builder.response :json
|
29
32
|
builder.response :raise_error
|
33
|
+
builder.response :parse_json
|
30
34
|
|
31
35
|
builder.adapter Faraday.default_adapter
|
32
36
|
end unless defined? Croudia::Default::MIDDLEWARE
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'croudia/base'
|
2
|
+
require 'croudia/entity/media'
|
3
|
+
|
4
|
+
module Croudia
|
5
|
+
class Entities < Croudia::Base
|
6
|
+
KEYS = [
|
7
|
+
:media,
|
8
|
+
]
|
9
|
+
attr_reader(*KEYS)
|
10
|
+
|
11
|
+
def initialize(attrs)
|
12
|
+
media = attrs.delete('media')
|
13
|
+
super(attrs)
|
14
|
+
@attrs['media'] = Croudia::Entity::Media.new(media) if media
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
module Croudia
|
2
|
+
class Error < StandardError
|
3
|
+
|
4
|
+
# Error connecting to server
|
5
|
+
class ConnectionFailed < Error
|
6
|
+
attr_reader :wrapped_exception
|
7
|
+
|
8
|
+
def initialize(e)
|
9
|
+
@wrapped_exception = e
|
10
|
+
super(e.respond_to?(:message) ? e.message : e.to_s)
|
11
|
+
end
|
12
|
+
|
13
|
+
def backtrace
|
14
|
+
if @wrapped_exception.respond_to?(:backtrace)
|
15
|
+
@wrapped_exception.backtrace
|
16
|
+
else
|
17
|
+
super
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
class Timeout < ConnectionFailed; end
|
23
|
+
|
24
|
+
# Error connected to server
|
25
|
+
class ConnectionError < Error
|
26
|
+
attr_reader :code, :env, :error
|
27
|
+
|
28
|
+
def initialize(env)
|
29
|
+
@code = env[:status]
|
30
|
+
@error = env[:body]['error'] rescue nil
|
31
|
+
@env = env
|
32
|
+
super(@error)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
# 4xx: Client Errors
|
37
|
+
class ClientError < ConnectionError; end
|
38
|
+
class BadRequest < ClientError; end
|
39
|
+
class Unauthorized < ClientError; end
|
40
|
+
class Forbidden < ClientError; end
|
41
|
+
class NotFound < ClientError; end
|
42
|
+
|
43
|
+
# 5xx: Server Errors
|
44
|
+
class ServerError < ConnectionError; end
|
45
|
+
class BadGateway < ServerError; end
|
46
|
+
class Unavailable < ServerError; end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'croudia/error'
|
2
|
+
require 'faraday'
|
3
|
+
|
4
|
+
module Croudia
|
5
|
+
module Request
|
6
|
+
class RaiseError < Faraday::Middleware
|
7
|
+
def call(env)
|
8
|
+
@app.call(env)
|
9
|
+
rescue Faraday::Error::TimeoutError => e
|
10
|
+
raise Croudia::Error::Timeout.new(e)
|
11
|
+
rescue Faraday::Error::ConnectionFailed => e
|
12
|
+
raise Croudia::Error::ConnectionFailed.new(e)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
Faraday.register_middleware :request,
|
19
|
+
raise_error: lambda { Croudia::Request::RaiseError }
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'faraday'
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
module Croudia
|
5
|
+
module Response
|
6
|
+
class ParseJSON < Faraday::Response::Middleware
|
7
|
+
def on_complete(env)
|
8
|
+
case env[:body]
|
9
|
+
when /\A\s*\z/, nil
|
10
|
+
env[:body] = nil
|
11
|
+
else
|
12
|
+
env[:body] = JSON.parse(env[:body])
|
13
|
+
end
|
14
|
+
rescue JSON::ParseError => e
|
15
|
+
raise e if env[:status] == 200
|
16
|
+
env[:body] = nil
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
Faraday.register_middleware :response,
|
23
|
+
parse_json: Croudia::Response::ParseJSON
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'croudia/error'
|
2
|
+
require 'faraday'
|
3
|
+
|
4
|
+
module Croudia
|
5
|
+
module Response
|
6
|
+
class RaiseError < Faraday::Response::Middleware
|
7
|
+
def on_complete(env)
|
8
|
+
error_class = case env[:status]
|
9
|
+
when 400
|
10
|
+
Croudia::Error::BadRequest
|
11
|
+
when 401
|
12
|
+
Croudia::Error::Unauthorized
|
13
|
+
when 403
|
14
|
+
Croudia::Error::Forbidden
|
15
|
+
when 404
|
16
|
+
Croudia::Error::NotFound
|
17
|
+
when 400 .. 499
|
18
|
+
Croudia::Error::ClientError
|
19
|
+
when 502
|
20
|
+
Croudia::Error::BadGateway
|
21
|
+
when 503
|
22
|
+
Croudia::Error::Unavailable
|
23
|
+
when 500 .. 599
|
24
|
+
Croudia::Error::ServerError
|
25
|
+
else
|
26
|
+
return
|
27
|
+
end
|
28
|
+
|
29
|
+
raise error_class.new(env)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
Faraday.register_middleware :response,
|
36
|
+
raise_error: lambda { Croudia::Response::RaiseError }
|
data/lib/croudia/status.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'croudia/creatable'
|
2
|
+
require 'croudia/entities'
|
2
3
|
require 'croudia/identity'
|
3
4
|
require 'croudia/source'
|
4
5
|
require 'croudia/user'
|
@@ -9,6 +10,7 @@ module Croudia
|
|
9
10
|
|
10
11
|
KEYS = [
|
11
12
|
:id_str,
|
13
|
+
:entities,
|
12
14
|
:favorited,
|
13
15
|
:favorited_count,
|
14
16
|
:in_reply_to_screen_name,
|
@@ -28,11 +30,13 @@ module Croudia
|
|
28
30
|
attr_reader(*KEYS)
|
29
31
|
|
30
32
|
def initialize(attrs={})
|
33
|
+
entities = attrs.delete('entities')
|
31
34
|
user = attrs.delete('user')
|
32
35
|
reply_status = attrs.delete('reply_status')
|
33
36
|
spread_status = attrs.delete('spread_status')
|
34
37
|
source = attrs.delete('source')
|
35
38
|
super(attrs)
|
39
|
+
@attrs['entities'] = Croudia::Entities.new(entities) if entities
|
36
40
|
@attrs['user'] = Croudia::User.new(user) if user
|
37
41
|
@attrs['reply_status'] = Croudia::Status.new(reply_status) if reply_status
|
38
42
|
@attrs['spread_status'] = Croudia::Status.new(spread_status) if spread_status
|
data/lib/croudia/version.rb
CHANGED
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'faraday'
|
2
|
+
require 'helper'
|
3
|
+
|
4
|
+
describe Croudia::Error do
|
5
|
+
before do
|
6
|
+
@client = Croudia::Client.new
|
7
|
+
end
|
8
|
+
|
9
|
+
context 'connection error' do
|
10
|
+
before do
|
11
|
+
stub_get('/account/verify_credentials.json').to_raise Faraday::Error::ConnectionFailed
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'raises Croudia::Error::ConnectionFailed' do
|
15
|
+
expect { @client.verify_credentials }.to raise_error Croudia::Error::ConnectionFailed
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
context 'client error' do
|
20
|
+
before do
|
21
|
+
stub_get('/account/verify_credentials.json').to_return(
|
22
|
+
status: 401,
|
23
|
+
body: fixture(:error),
|
24
|
+
headers: { content_type: 'application/json; charset=utf-8' }
|
25
|
+
)
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'raises Croudia::Error::ClientError' do
|
29
|
+
expect { @client.verify_credentials }.to raise_error Croudia::Error::ClientError
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
context 'server error' do
|
34
|
+
before do
|
35
|
+
stub_get('/account/verify_credentials.json').to_return(
|
36
|
+
status: 502,
|
37
|
+
body: fixture(:error),
|
38
|
+
headers: { content_type: 'application/json; charset=utf-8' }
|
39
|
+
)
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'raises Croudia::Error::ServerError' do
|
43
|
+
expect { @client.verify_credentials }.to raise_error Croudia::Error::ServerError
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
data/spec/fixtures/status.json
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"id":1228014,"id_str":"1228014","text":"さっき誤字してた……","created_at":"Tue, 25 Jun 2013 23:58:43 +0900","favorited":false,"favorited_count":0,"spread":false,"spread_count":0,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"source":{"name":"source","url":"https://croudia.com"},"user":{"id":7987,"id_str":"7987","name":"wktk","screen_name":"wktk","profile_image_url_https":"https://croudia.com/testimages/download/9423","created_at":"Sun, 29 Jul 2012 19:21:21 +0900","description":"気軽に fav ります。Twitter でも @wktk です。 \r\nhttps://twitter.com/wktk\r\nhttps://github.com/wktk","favorites_count":68,"follow_request_sent":"underdevelopment","followers_count":12,"following":"underdevelopment","friends_count":11,"location":"Japan","statuses_count":26,"protected":false,"url":"http://wktk.jp/"}}
|
1
|
+
{"id":1228014,"id_str":"1228014","text":"さっき誤字してた……","created_at":"Tue, 25 Jun 2013 23:58:43 +0900","favorited":false,"favorited_count":0,"spread":false,"spread_count":0,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"source":{"name":"source","url":"https://croudia.com"},"user":{"id":7987,"id_str":"7987","name":"wktk","screen_name":"wktk","profile_image_url_https":"https://croudia.com/testimages/download/9423","created_at":"Sun, 29 Jul 2012 19:21:21 +0900","description":"気軽に fav ります。Twitter でも @wktk です。 \r\nhttps://twitter.com/wktk\r\nhttps://github.com/wktk","favorites_count":68,"follow_request_sent":"underdevelopment","followers_count":12,"following":"underdevelopment","friends_count":11,"location":"Japan","statuses_count":26,"protected":false,"url":"http://wktk.jp/"},"entities":{"media":{"media_url_https":"https://croudia.com/testimages/download/44983","type":"photo"}}}
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: croudia
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- wktk
|
@@ -124,10 +124,16 @@ files:
|
|
124
124
|
- lib/croudia/configurable.rb
|
125
125
|
- lib/croudia/creatable.rb
|
126
126
|
- lib/croudia/default.rb
|
127
|
+
- lib/croudia/entities.rb
|
128
|
+
- lib/croudia/entity/media.rb
|
129
|
+
- lib/croudia/error.rb
|
127
130
|
- lib/croudia/ext/openssl.rb
|
128
131
|
- lib/croudia/identity.rb
|
129
132
|
- lib/croudia/relationship.rb
|
130
133
|
- lib/croudia/request/multipart_with_file.rb
|
134
|
+
- lib/croudia/request/raise_error.rb
|
135
|
+
- lib/croudia/response/parse_json.rb
|
136
|
+
- lib/croudia/response/raise_error.rb
|
131
137
|
- lib/croudia/secret_mail.rb
|
132
138
|
- lib/croudia/source.rb
|
133
139
|
- lib/croudia/status.rb
|
@@ -143,6 +149,7 @@ files:
|
|
143
149
|
- spec/croudia/api/users_spec.rb
|
144
150
|
- spec/croudia/base_spec.rb
|
145
151
|
- spec/croudia/client_spec.rb
|
152
|
+
- spec/croudia/error_spec.rb
|
146
153
|
- spec/croudia/identity_spec.rb
|
147
154
|
- spec/croudia/secret_mail_spec.rb
|
148
155
|
- spec/croudia/source_spec.rb
|
@@ -150,6 +157,7 @@ files:
|
|
150
157
|
- spec/croudia/user_spec.rb
|
151
158
|
- spec/croudia_spec.rb
|
152
159
|
- spec/fixtures/access_token.json
|
160
|
+
- spec/fixtures/error.json
|
153
161
|
- spec/fixtures/friendship.json
|
154
162
|
- spec/fixtures/friendships.json
|
155
163
|
- spec/fixtures/image.jpg
|
@@ -195,6 +203,7 @@ test_files:
|
|
195
203
|
- spec/croudia/api/users_spec.rb
|
196
204
|
- spec/croudia/base_spec.rb
|
197
205
|
- spec/croudia/client_spec.rb
|
206
|
+
- spec/croudia/error_spec.rb
|
198
207
|
- spec/croudia/identity_spec.rb
|
199
208
|
- spec/croudia/secret_mail_spec.rb
|
200
209
|
- spec/croudia/source_spec.rb
|
@@ -202,6 +211,7 @@ test_files:
|
|
202
211
|
- spec/croudia/user_spec.rb
|
203
212
|
- spec/croudia_spec.rb
|
204
213
|
- spec/fixtures/access_token.json
|
214
|
+
- spec/fixtures/error.json
|
205
215
|
- spec/fixtures/friendship.json
|
206
216
|
- spec/fixtures/friendships.json
|
207
217
|
- spec/fixtures/image.jpg
|