trell 0.0.2 → 0.0.3
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.
- checksums.yaml +4 -4
- data/lib/trell/configurable.rb +19 -0
- data/lib/trell/error.rb +104 -0
- data/lib/trell/response/raise_error.rb +16 -0
- data/lib/trell/version.rb +1 -1
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e0a60800fdb2d7d54d3e6044702b51a5a158b186
|
4
|
+
data.tar.gz: 02c3b27a40d390cf65b37a6ec0e9d96f4f830cdd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dfcd51f254621b00bb9fb3edb4ec9e86bd039f44304e3c7a35f6f2b567016bcbbd319abb9eddae15e00f1b61ce4d9e304348e97c9e2ade940e1a831701db2c05
|
7
|
+
data.tar.gz: eb75d86f51f456bad96a0e37feb82108f10c931d091ec6c2cd1209daad5dc7383c63536446737cdec75d20a8b74ac8e6fdae41a1e2e8dbe87f4c2e31355bb84c
|
data/lib/trell/configurable.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'trell/response/raise_error'
|
2
|
+
|
1
3
|
module Trell
|
2
4
|
module Configurable
|
3
5
|
OPTIONS_KEYS = %i(
|
@@ -9,6 +11,9 @@ module Trell
|
|
9
11
|
web_endpoint
|
10
12
|
user_agent
|
11
13
|
media_type
|
14
|
+
connection_options
|
15
|
+
proxy
|
16
|
+
middleware
|
12
17
|
)
|
13
18
|
|
14
19
|
attr_accessor(*OPTIONS_KEYS)
|
@@ -23,6 +28,14 @@ module Trell
|
|
23
28
|
yield self
|
24
29
|
end
|
25
30
|
|
31
|
+
def api_endpoint
|
32
|
+
File.join(@api_endpoint, '')
|
33
|
+
end
|
34
|
+
|
35
|
+
def web_endpoint
|
36
|
+
File.join(@web_endpoint, '')
|
37
|
+
end
|
38
|
+
|
26
39
|
def reset!
|
27
40
|
@login = ENV['TRELL_LOGIN']
|
28
41
|
@password = ENV['TRELL_PASSWORD']
|
@@ -32,6 +45,12 @@ module Trell
|
|
32
45
|
@web_endpoint = ENV['TRELL_WEB_ENDPOINT'] || 'https://trello.com/'
|
33
46
|
@user_agent = "Trell Ruby Gem #{Trell::VERSION}"
|
34
47
|
@media_type = 'application/json'
|
48
|
+
@connection_options = { headers: { accept: media_type, user_agent: user_agent } }
|
49
|
+
@proxy = ENV['TRELL_PROXY']
|
50
|
+
@middleware = Faraday::RackBuilder.new { |builder|
|
51
|
+
builder.use Trell::Response::RaiseError
|
52
|
+
builder.adapter Faraday.default_adapter
|
53
|
+
}
|
35
54
|
self
|
36
55
|
end
|
37
56
|
alias setup reset!
|
data/lib/trell/error.rb
ADDED
@@ -0,0 +1,104 @@
|
|
1
|
+
module Trell
|
2
|
+
class Error < StandardError
|
3
|
+
def self.from_response(response)
|
4
|
+
if klass = case response[:status].to_i
|
5
|
+
when 400 then Trell::BadRequest
|
6
|
+
when 401 then Trell::Unauthorized
|
7
|
+
when 403 then Trell::Forbidden
|
8
|
+
when 404 then Trell::NotFound
|
9
|
+
when 406 then Trell::NotAcceptable
|
10
|
+
when 409 then Trell::Conflict
|
11
|
+
when 415 then Trell::UnsupportedMediaType
|
12
|
+
when 422 then Trell::UnprocessableEntity
|
13
|
+
when 400..499 then Trell::ClientError
|
14
|
+
when 500 then Trell::InternalServerError
|
15
|
+
when 501 then Trell::NotImplemented
|
16
|
+
when 502 then Trell::BadGateway
|
17
|
+
when 503 then Trell::ServiceUnavailable
|
18
|
+
when 500..599 then Trell::ServerError
|
19
|
+
end
|
20
|
+
klass.new(response)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def initialize(response = nil)
|
25
|
+
@response = response
|
26
|
+
super(build_error_message)
|
27
|
+
end
|
28
|
+
|
29
|
+
def errors
|
30
|
+
if data && data.is_a?(Hash)
|
31
|
+
data[:errors] || []
|
32
|
+
else
|
33
|
+
[]
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
private
|
38
|
+
|
39
|
+
def data
|
40
|
+
@data ||=
|
41
|
+
if (body = @response[:body]) && !body.empty?
|
42
|
+
if body.is_a?(String) &&
|
43
|
+
@response[:response_headers] &&
|
44
|
+
@response[:response_headers][:content_type] =~ /json/
|
45
|
+
|
46
|
+
Sawyer::Agent.serializer.decode(body)
|
47
|
+
else
|
48
|
+
body
|
49
|
+
end
|
50
|
+
else
|
51
|
+
nil
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def response_message
|
56
|
+
case data
|
57
|
+
when Hash
|
58
|
+
data[:message]
|
59
|
+
when String
|
60
|
+
data
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def response_error
|
65
|
+
"Error: #{data[:error]}" if data.is_a?(Hash) && data[:error]
|
66
|
+
end
|
67
|
+
|
68
|
+
def build_error_message
|
69
|
+
return nil if @response.nil?
|
70
|
+
|
71
|
+
message = "#{@response[:method].to_s.upcase} "
|
72
|
+
message << redact_url(@response[:url].to_s) + ": "
|
73
|
+
message << "#{@response[:status]} - "
|
74
|
+
message << "#{response_message}" unless response_message.nil?
|
75
|
+
message << "#{response_error}" unless response_error.nil?
|
76
|
+
message
|
77
|
+
end
|
78
|
+
|
79
|
+
def redact_url(url_string)
|
80
|
+
%w[client_secret access_token].each do |token|
|
81
|
+
url_string.gsub!(/#{token}=\S+/, "#{token}=(redacted)") if url_string.include? token
|
82
|
+
end
|
83
|
+
url_string
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
class ClientError < Error; end
|
88
|
+
class BadRequest < ClientError; end
|
89
|
+
class Unauthorized < ClientError; end
|
90
|
+
class Forbidden < ClientError; end
|
91
|
+
class TooManyRequests < Forbidden; end
|
92
|
+
class TooManyLoginAttempts < Forbidden; end
|
93
|
+
class NotFound < ClientError; end
|
94
|
+
class NotAcceptable < ClientError; end
|
95
|
+
class Conflict < ClientError; end
|
96
|
+
class UnsupportedMediaType < ClientError; end
|
97
|
+
class UnprocessableEntity < ClientError; end
|
98
|
+
class ServerError < Error; end
|
99
|
+
class InternalServerError < ServerError; end
|
100
|
+
class NotImplemented < ServerError; end
|
101
|
+
class BadGateway < ServerError; end
|
102
|
+
class ServiceUnavailable < ServerError; end
|
103
|
+
class MissingContentType < ArgumentError; end
|
104
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'faraday'
|
2
|
+
require 'trell/error'
|
3
|
+
|
4
|
+
module Trell
|
5
|
+
module Response
|
6
|
+
class RaiseError < Faraday::Response::Middleware
|
7
|
+
private
|
8
|
+
|
9
|
+
def on_complete(response)
|
10
|
+
if error = Trell::Error.from_response(response)
|
11
|
+
raise error
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
data/lib/trell/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: trell
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- linyows
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-03-
|
11
|
+
date: 2014-03-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sawyer
|
@@ -77,6 +77,8 @@ files:
|
|
77
77
|
- lib/trell/client/organizations.rb
|
78
78
|
- lib/trell/client/tokens.rb
|
79
79
|
- lib/trell/configurable.rb
|
80
|
+
- lib/trell/error.rb
|
81
|
+
- lib/trell/response/raise_error.rb
|
80
82
|
- lib/trell/version.rb
|
81
83
|
- spec/helper.rb
|
82
84
|
- trell.gemspec
|
@@ -100,7 +102,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
100
102
|
version: '0'
|
101
103
|
requirements: []
|
102
104
|
rubyforge_project:
|
103
|
-
rubygems_version: 2.2.
|
105
|
+
rubygems_version: 2.2.0
|
104
106
|
signing_key:
|
105
107
|
specification_version: 4
|
106
108
|
summary: Simple Ruby wrapper for the Trello API.
|