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 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.