desk_api 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +49 -34
- data/config.rb +1 -1
- data/desk_api.gemspec +3 -3
- data/lib/desk.rb +1 -35
- data/lib/desk_api.rb +35 -0
- data/lib/{desk → desk_api}/action/create.rb +1 -1
- data/lib/{desk → desk_api}/action/delete.rb +1 -1
- data/lib/{desk → desk_api}/action/embedded.rb +1 -1
- data/lib/{desk → desk_api}/action/field.rb +3 -3
- data/lib/{desk → desk_api}/action/link.rb +2 -2
- data/lib/desk_api/action/resource.rb +14 -0
- data/lib/{desk → desk_api}/action/search.rb +1 -1
- data/lib/{desk → desk_api}/action/update.rb +2 -2
- data/lib/{desk → desk_api}/client.rb +15 -15
- data/lib/{desk → desk_api}/configuration.rb +13 -13
- data/lib/{desk → desk_api}/default.rb +5 -5
- data/lib/{desk → desk_api}/error.rb +5 -5
- data/lib/{desk → desk_api}/error/bad_gateway.rb +3 -3
- data/lib/{desk → desk_api}/error/bad_request.rb +3 -3
- data/lib/{desk → desk_api}/error/client_error.rb +3 -3
- data/lib/{desk → desk_api}/error/configuration_error.rb +2 -2
- data/lib/{desk → desk_api}/error/conflict.rb +3 -3
- data/lib/{desk → desk_api}/error/forbidden.rb +3 -3
- data/lib/{desk → desk_api}/error/gateway_timeout.rb +3 -3
- data/lib/desk_api/error/internal_server_error.rb +10 -0
- data/lib/{desk → desk_api}/error/method_not_allowed.rb +3 -3
- data/lib/{desk → desk_api}/error/method_not_supported.rb +3 -3
- data/lib/{desk → desk_api}/error/not_acceptable.rb +3 -3
- data/lib/{desk → desk_api}/error/not_found.rb +3 -3
- data/lib/desk_api/error/parse_error.rb +9 -0
- data/lib/desk_api/error/parser_error.rb +9 -0
- data/lib/{desk → desk_api}/error/server_error.rb +3 -3
- data/lib/desk_api/error/service_unavailable.rb +10 -0
- data/lib/{desk → desk_api}/error/too_many_requests.rb +3 -3
- data/lib/{desk → desk_api}/error/unauthorized.rb +3 -3
- data/lib/{desk → desk_api}/error/unprocessable_entity.rb +3 -3
- data/lib/{desk → desk_api}/error/unsupported_media_type.rb +3 -3
- data/lib/{desk → desk_api}/rate_limit.rb +1 -1
- data/lib/{desk → desk_api}/request/retry.rb +2 -2
- data/lib/{desk → desk_api}/resource.rb +16 -16
- data/lib/desk_api/resource/article.rb +10 -0
- data/lib/desk_api/resource/article_translation.rb +8 -0
- data/lib/desk_api/resource/attachment.rb +8 -0
- data/lib/desk_api/resource/case.rb +9 -0
- data/lib/desk_api/resource/company.rb +8 -0
- data/lib/desk_api/resource/customer.rb +9 -0
- data/lib/desk_api/resource/integration_url.rb +9 -0
- data/lib/desk_api/resource/job.rb +7 -0
- data/lib/desk_api/resource/label.rb +9 -0
- data/lib/desk_api/resource/macro.rb +9 -0
- data/lib/desk_api/resource/macro_action.rb +7 -0
- data/lib/desk_api/resource/note.rb +7 -0
- data/lib/{desk → desk_api}/resource/page.rb +5 -5
- data/lib/desk_api/resource/reply.rb +8 -0
- data/lib/desk_api/resource/topic.rb +9 -0
- data/lib/desk_api/resource/topic_translation.rb +9 -0
- data/lib/desk_api/resource/user_preference.rb +7 -0
- data/lib/{desk → desk_api}/resources.json +0 -0
- data/lib/desk_api/response/raise_error.rb +34 -0
- data/lib/desk_api/version.rb +3 -0
- data/spec/cassettes/{Desk_Client → DeskApi_Client}/_delete/deletes_a_resource.yml +5 -5
- data/spec/cassettes/{Desk_Client → DeskApi_Client}/_get/fetches_resources.yml +5 -5
- data/spec/cassettes/{Desk_Client → DeskApi_Client}/_patch/updates_a_resource.yml +6 -6
- data/spec/cassettes/{Desk_Client → DeskApi_Client}/_post/creates_a_resource.yml +8 -8
- data/spec/cassettes/{Desk_Error → DeskApi_Error}/_from_response/can_be_created_from_a_faraday_response.yml +5 -5
- data/spec/cassettes/{Desk_Error → DeskApi_Error}/_from_response/uses_the_body_message_if_present.yml +5 -5
- data/spec/cassettes/{Desk_Resource → DeskApi_Resource}/_by_url/finds_resources_by_url.yml +7 -7
- data/spec/cassettes/{Desk_Resource → DeskApi_Resource}/_create/creates_a_new_topic.yml +8 -8
- data/spec/cassettes/{Desk_Resource → DeskApi_Resource}/_delete/deletes_a_resource.yml +25 -26
- data/spec/cassettes/{Desk_Resource → DeskApi_Resource}/_delete/throws_an_error_deleting_a_non_deletalbe_resource.yml +6 -6
- data/spec/cassettes/{Desk_Resource_Page/_page/returns_the_current_page_and_loads_if_page_not_defined.yml → DeskApi_Resource/_exec_/can_be_forced_to_reload.yml} +6 -6
- data/spec/cassettes/{Desk_Resource → DeskApi_Resource}/_exec_/loads_the_current_resource.yml +7 -7
- data/spec/cassettes/{Desk_Resource/_exec_/can_be_forced_to_reload.yml → DeskApi_Resource/_method_missing/loads_the_resource_to_find_a_suitable_method.yml} +6 -6
- data/spec/cassettes/{Desk_Resource/_method_missing/loads_the_resource_to_find_a_suitable_method.yml → DeskApi_Resource/_method_missing/raises_an_error_if_method_does_not_exist.yml} +7 -7
- data/spec/cassettes/{Desk_Resource → DeskApi_Resource}/_search/allows_searching_on_search_enabled_resources.yml +5 -5
- data/spec/cassettes/DeskApi_Resource/_update/can_update_without_a_hash.yml +116 -0
- data/spec/cassettes/{Desk_Resource → DeskApi_Resource}/_update/throws_an_error_updating_a_user.yml +5 -5
- data/spec/cassettes/{Desk_Resource → DeskApi_Resource}/_update/updates_a_topic.yml +18 -20
- data/spec/cassettes/{Desk_Resource_Page → DeskApi_Resource_Page}/_by_id/loads_the_requested_resource.yml +5 -5
- data/spec/cassettes/{Desk_Resource_Page → DeskApi_Resource_Page}/_page/keeps_the_resource_as_loaded.yml +5 -5
- data/spec/cassettes/{Desk_Resource/_method_missing/raises_an_error_if_method_does_not_exist.yml → DeskApi_Resource_Page/_page/returns_the_current_page_and_loads_if_page_not_defined.yml} +6 -6
- data/spec/cassettes/{Desk_Resource_Page → DeskApi_Resource_Page}/_page/sets_the_resource_to_not_loaded.yml +5 -5
- data/spec/{desk → desk_api}/client_spec.rb +14 -14
- data/spec/{desk → desk_api}/configuration_spec.rb +23 -23
- data/spec/{desk → desk_api}/default_spec.rb +5 -5
- data/spec/{desk → desk_api}/error_spec.rb +4 -4
- data/spec/{desk → desk_api}/rate_limit_spec.rb +7 -7
- data/spec/{desk → desk_api}/request/retry_spec.rb +3 -3
- data/spec/{desk → desk_api}/resource_spec.rb +17 -10
- data/spec/{desk → desk_api}/resources/page_spec.rb +5 -5
- data/spec/{desk_spec.rb → desk_api_spec.rb} +10 -10
- data/spec/spec_helper.rb +1 -1
- metadata +121 -118
- data/lib/desk/action/resource.rb +0 -14
- data/lib/desk/error/internal_server_error.rb +0 -10
- data/lib/desk/error/parse_error.rb +0 -9
- data/lib/desk/error/parser_error.rb +0 -9
- data/lib/desk/error/service_unavailable.rb +0 -10
- data/lib/desk/resource/article.rb +0 -10
- data/lib/desk/resource/article_translation.rb +0 -8
- data/lib/desk/resource/attachment.rb +0 -8
- data/lib/desk/resource/case.rb +0 -9
- data/lib/desk/resource/company.rb +0 -8
- data/lib/desk/resource/customer.rb +0 -9
- data/lib/desk/resource/integration_url.rb +0 -9
- data/lib/desk/resource/job.rb +0 -7
- data/lib/desk/resource/label.rb +0 -9
- data/lib/desk/resource/macro.rb +0 -9
- data/lib/desk/resource/macro_action.rb +0 -7
- data/lib/desk/resource/note.rb +0 -7
- data/lib/desk/resource/reply.rb +0 -8
- data/lib/desk/resource/topic.rb +0 -9
- data/lib/desk/resource/topic_translation.rb +0 -9
- data/lib/desk/resource/user_preference.rb +0 -7
- data/lib/desk/response/raise_error.rb +0 -34
- data/lib/desk/version.rb +0 -3
@@ -1,22 +1,22 @@
|
|
1
|
-
require '
|
1
|
+
require 'desk_api/version'
|
2
2
|
|
3
|
-
module
|
3
|
+
module DeskApi
|
4
4
|
module Default
|
5
5
|
CONNECTION_OPTIONS = {
|
6
6
|
headers: {
|
7
7
|
accept: 'application/json',
|
8
|
-
user_agent: "desk.com Ruby Gem v#{
|
8
|
+
user_agent: "desk.com Ruby Gem v#{DeskApi::VERSION}"
|
9
9
|
},
|
10
10
|
request: {
|
11
11
|
open_timeout: 5,
|
12
12
|
timeout: 10
|
13
13
|
}
|
14
|
-
} unless defined?
|
14
|
+
} unless defined? DeskApi::Default::CONNECTION_OPTIONS
|
15
15
|
|
16
16
|
class << self
|
17
17
|
# @return [Hash]
|
18
18
|
def options
|
19
|
-
Hash[
|
19
|
+
Hash[DeskApi::Configuration.keys.map{|key| [key, send(key)]}]
|
20
20
|
end
|
21
21
|
|
22
22
|
# @return [String]
|
@@ -1,6 +1,6 @@
|
|
1
|
-
require '
|
1
|
+
require 'desk_api/rate_limit'
|
2
2
|
|
3
|
-
module
|
3
|
+
module DeskApi
|
4
4
|
# Custom error class for rescuing from all desk.com errors
|
5
5
|
class Error < StandardError
|
6
6
|
attr_reader :rate_limit
|
@@ -10,9 +10,9 @@ module Desk
|
|
10
10
|
# @param exception [Exception, String]
|
11
11
|
# @param response_headers [Hash]
|
12
12
|
# @param code [Integer]
|
13
|
-
# @return [
|
13
|
+
# @return [DeskApi::Error]
|
14
14
|
def initialize(exception=$!, response_headers={}, code = nil)
|
15
|
-
@rate_limit =
|
15
|
+
@rate_limit = DeskApi::RateLimit.new(response_headers)
|
16
16
|
@wrapped_exception = exception
|
17
17
|
@code = code
|
18
18
|
exception.respond_to?(:backtrace) ? super(exception.message) : super(exception.to_s)
|
@@ -26,7 +26,7 @@ module Desk
|
|
26
26
|
# Create a new error from an HTTP response
|
27
27
|
#
|
28
28
|
# @param response [Hash]
|
29
|
-
# @return [
|
29
|
+
# @return [DeskApi::Error]
|
30
30
|
def from_response(response = {})
|
31
31
|
error, code = parse_error(response[:body]), response[:status]
|
32
32
|
new(error, response[:response_headers], code)
|
@@ -1,9 +1,9 @@
|
|
1
|
-
require '
|
1
|
+
require 'desk_api/error/server_error'
|
2
2
|
|
3
|
-
module
|
3
|
+
module DeskApi
|
4
4
|
class Error
|
5
5
|
# Raised when Desk returns the HTTP status code 502
|
6
|
-
class BadGateway <
|
6
|
+
class BadGateway < DeskApi::Error::ServerError
|
7
7
|
HTTP_STATUS_CODE = 502
|
8
8
|
end
|
9
9
|
end
|
@@ -1,9 +1,9 @@
|
|
1
|
-
require '
|
1
|
+
require 'desk_api/error/client_error'
|
2
2
|
|
3
|
-
module
|
3
|
+
module DeskApi
|
4
4
|
class Error
|
5
5
|
# Raised when desk.com returns the HTTP status code 400
|
6
|
-
class BadRequest <
|
6
|
+
class BadRequest < DeskApi::Error::ClientError
|
7
7
|
HTTP_STATUS_CODE = 400
|
8
8
|
end
|
9
9
|
end
|
@@ -1,9 +1,9 @@
|
|
1
|
-
require '
|
1
|
+
require 'desk_api/error'
|
2
2
|
|
3
|
-
module
|
3
|
+
module DeskApi
|
4
4
|
class Error
|
5
5
|
# Raised when desk.com returns a 4xx HTTP status code or there's an error in Faraday
|
6
|
-
class ClientError <
|
6
|
+
class ClientError < DeskApi::Error
|
7
7
|
end
|
8
8
|
end
|
9
9
|
end
|
@@ -1,9 +1,9 @@
|
|
1
|
-
require '
|
1
|
+
require 'desk_api/error/client_error'
|
2
2
|
|
3
|
-
module
|
3
|
+
module DeskApi
|
4
4
|
class Error
|
5
5
|
# Raised when desk.com returns the HTTP status code 409
|
6
|
-
class Conflict <
|
6
|
+
class Conflict < DeskApi::Error::ClientError
|
7
7
|
HTTP_STATUS_CODE = 409
|
8
8
|
end
|
9
9
|
end
|
@@ -1,9 +1,9 @@
|
|
1
|
-
require '
|
1
|
+
require 'desk_api/error/client_error'
|
2
2
|
|
3
|
-
module
|
3
|
+
module DeskApi
|
4
4
|
class Error
|
5
5
|
# Raised when desk.com returns the HTTP status code 403
|
6
|
-
class Forbidden <
|
6
|
+
class Forbidden < DeskApi::Error::ClientError
|
7
7
|
HTTP_STATUS_CODE = 403
|
8
8
|
end
|
9
9
|
end
|
@@ -1,9 +1,9 @@
|
|
1
|
-
require '
|
1
|
+
require 'desk_api/error/server_error'
|
2
2
|
|
3
|
-
module
|
3
|
+
module DeskApi
|
4
4
|
class Error
|
5
5
|
# Raised when Desk returns the HTTP status code 504
|
6
|
-
class GatewayTimeout <
|
6
|
+
class GatewayTimeout < DeskApi::Error::ServerError
|
7
7
|
HTTP_STATUS_CODE = 504
|
8
8
|
end
|
9
9
|
end
|
@@ -1,9 +1,9 @@
|
|
1
|
-
require '
|
1
|
+
require 'desk_api/error/client_error'
|
2
2
|
|
3
|
-
module
|
3
|
+
module DeskApi
|
4
4
|
class Error
|
5
5
|
# Raised when desk.com returns the HTTP status code 405
|
6
|
-
class MethodNotAllowed <
|
6
|
+
class MethodNotAllowed < DeskApi::Error::ClientError
|
7
7
|
HTTP_STATUS_CODE = 405
|
8
8
|
end
|
9
9
|
end
|
@@ -1,9 +1,9 @@
|
|
1
|
-
require '
|
1
|
+
require 'desk_api/error'
|
2
2
|
|
3
|
-
module
|
3
|
+
module DeskApi
|
4
4
|
class Error
|
5
5
|
# Raised when trying to search a resource that doesn't support search
|
6
|
-
class MethodNotSupported <
|
6
|
+
class MethodNotSupported < DeskApi::Error
|
7
7
|
end
|
8
8
|
end
|
9
9
|
end
|
@@ -1,9 +1,9 @@
|
|
1
|
-
require '
|
1
|
+
require 'desk_api/error/client_error'
|
2
2
|
|
3
|
-
module
|
3
|
+
module DeskApi
|
4
4
|
class Error
|
5
5
|
# Raised when desk.com returns the HTTP status code 406
|
6
|
-
class NotAcceptable <
|
6
|
+
class NotAcceptable < DeskApi::Error::ClientError
|
7
7
|
HTTP_STATUS_CODE = 406
|
8
8
|
end
|
9
9
|
end
|
@@ -1,9 +1,9 @@
|
|
1
|
-
require '
|
1
|
+
require 'desk_api/error/client_error'
|
2
2
|
|
3
|
-
module
|
3
|
+
module DeskApi
|
4
4
|
class Error
|
5
5
|
# Raised when desk.com returns the HTTP status code 404
|
6
|
-
class NotFound <
|
6
|
+
class NotFound < DeskApi::Error::ClientError
|
7
7
|
HTTP_STATUS_CODE = 404
|
8
8
|
end
|
9
9
|
end
|
@@ -1,9 +1,9 @@
|
|
1
|
-
require '
|
1
|
+
require 'desk_api/error/client_error'
|
2
2
|
|
3
|
-
module
|
3
|
+
module DeskApi
|
4
4
|
class Error
|
5
5
|
# Raised when desk.com returns the HTTP status code 429
|
6
|
-
class TooManyRequests <
|
6
|
+
class TooManyRequests < DeskApi::Error::ClientError
|
7
7
|
HTTP_STATUS_CODE = 429
|
8
8
|
end
|
9
9
|
end
|
@@ -1,9 +1,9 @@
|
|
1
|
-
require '
|
1
|
+
require 'desk_api/error/client_error'
|
2
2
|
|
3
|
-
module
|
3
|
+
module DeskApi
|
4
4
|
class Error
|
5
5
|
# Raised when desk.com returns the HTTP status code 401
|
6
|
-
class Unauthorized <
|
6
|
+
class Unauthorized < DeskApi::Error::ClientError
|
7
7
|
HTTP_STATUS_CODE = 401
|
8
8
|
end
|
9
9
|
end
|
@@ -1,9 +1,9 @@
|
|
1
|
-
require '
|
1
|
+
require 'desk_api/error/client_error'
|
2
2
|
|
3
|
-
module
|
3
|
+
module DeskApi
|
4
4
|
class Error
|
5
5
|
# Raised when desk.com returns the HTTP status code 422
|
6
|
-
class UnprocessableEntity <
|
6
|
+
class UnprocessableEntity < DeskApi::Error::ClientError
|
7
7
|
HTTP_STATUS_CODE = 422
|
8
8
|
end
|
9
9
|
end
|
@@ -1,9 +1,9 @@
|
|
1
|
-
require '
|
1
|
+
require 'desk_api/error/client_error'
|
2
2
|
|
3
|
-
module
|
3
|
+
module DeskApi
|
4
4
|
class Error
|
5
5
|
# Raised when desk.com returns the HTTP status code 415
|
6
|
-
class UnsupportedMediaType <
|
6
|
+
class UnsupportedMediaType < DeskApi::Error::ClientError
|
7
7
|
HTTP_STATUS_CODE = 415
|
8
8
|
end
|
9
9
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
module
|
1
|
+
module DeskApi
|
2
2
|
module Request
|
3
3
|
class Retry < Faraday::Request::Retry
|
4
4
|
def initialize(app, options = {})
|
@@ -13,7 +13,7 @@ module Desk
|
|
13
13
|
|
14
14
|
begin
|
15
15
|
@app.call(env)
|
16
|
-
rescue
|
16
|
+
rescue DeskApi::Error::TooManyRequests => e
|
17
17
|
if retries > 0 and e.rate_limit.reset_in
|
18
18
|
retries = 0
|
19
19
|
sleep e.rate_limit.reset_in
|
@@ -1,19 +1,19 @@
|
|
1
|
-
require '
|
2
|
-
require '
|
3
|
-
require '
|
4
|
-
require '
|
5
|
-
require '
|
6
|
-
require '
|
7
|
-
require '
|
8
|
-
require '
|
9
|
-
|
10
|
-
require '
|
11
|
-
|
12
|
-
module
|
1
|
+
require 'desk_api/action/create'
|
2
|
+
require 'desk_api/action/delete'
|
3
|
+
require 'desk_api/action/embedded'
|
4
|
+
require 'desk_api/action/field'
|
5
|
+
require 'desk_api/action/link'
|
6
|
+
require 'desk_api/action/resource'
|
7
|
+
require 'desk_api/action/search'
|
8
|
+
require 'desk_api/action/update'
|
9
|
+
|
10
|
+
require 'desk_api/error/method_not_supported'
|
11
|
+
|
12
|
+
module DeskApi
|
13
13
|
class Resource
|
14
|
-
include
|
15
|
-
include
|
16
|
-
include
|
14
|
+
include DeskApi::Action::Resource
|
15
|
+
include DeskApi::Action::Link
|
16
|
+
include DeskApi::Action::Field
|
17
17
|
|
18
18
|
def initialize(client, definition = {}, loaded = false)
|
19
19
|
@client, @loaded, @_changed = client, loaded, {}
|
@@ -46,7 +46,7 @@ module Desk
|
|
46
46
|
|
47
47
|
def method_missing(method, *args, &block)
|
48
48
|
self.exec! if !loaded
|
49
|
-
raise
|
49
|
+
raise DeskApi::Error::MethodNotSupported unless self.respond_to?(method.to_sym)
|
50
50
|
self.send(method, *args, &block)
|
51
51
|
end
|
52
52
|
end
|