trell 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 09c7ae034c0600a4b6c7c1e031486a1395e71694
4
- data.tar.gz: 66ca4b04f741a898253f0beeeee0654c0d306efc
3
+ metadata.gz: e0a60800fdb2d7d54d3e6044702b51a5a158b186
4
+ data.tar.gz: 02c3b27a40d390cf65b37a6ec0e9d96f4f830cdd
5
5
  SHA512:
6
- metadata.gz: 0777023486c4f49cd1e184dcf8872c1a3ae9d331b766485ed84083479f6424a3c788bd0bf2bbe0a62674ad1876a21a736cee92c3d627559db0a4873b57509610
7
- data.tar.gz: 17d9d3019013bac3ba37d6e7cfdd8002be543153c936dc4b1a3e9a409a4727d290e85bf129fca0ebe32418be65d61c180ef24030585f05002277bf93267e09a0
6
+ metadata.gz: dfcd51f254621b00bb9fb3edb4ec9e86bd039f44304e3c7a35f6f2b567016bcbbd319abb9eddae15e00f1b61ce4d9e304348e97c9e2ade940e1a831701db2c05
7
+ data.tar.gz: eb75d86f51f456bad96a0e37feb82108f10c931d091ec6c2cd1209daad5dc7383c63536446737cdec75d20a8b74ac8e6fdae41a1e2e8dbe87f4c2e31355bb84c
@@ -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!
@@ -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
@@ -1,3 +1,3 @@
1
1
  module Trell
2
- VERSION = '0.0.2'
2
+ VERSION = '0.0.3'
3
3
  end
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.2
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-09 00:00:00.000000000 Z
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.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.