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.
Files changed (117) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +49 -34
  3. data/config.rb +1 -1
  4. data/desk_api.gemspec +3 -3
  5. data/lib/desk.rb +1 -35
  6. data/lib/desk_api.rb +35 -0
  7. data/lib/{desk → desk_api}/action/create.rb +1 -1
  8. data/lib/{desk → desk_api}/action/delete.rb +1 -1
  9. data/lib/{desk → desk_api}/action/embedded.rb +1 -1
  10. data/lib/{desk → desk_api}/action/field.rb +3 -3
  11. data/lib/{desk → desk_api}/action/link.rb +2 -2
  12. data/lib/desk_api/action/resource.rb +14 -0
  13. data/lib/{desk → desk_api}/action/search.rb +1 -1
  14. data/lib/{desk → desk_api}/action/update.rb +2 -2
  15. data/lib/{desk → desk_api}/client.rb +15 -15
  16. data/lib/{desk → desk_api}/configuration.rb +13 -13
  17. data/lib/{desk → desk_api}/default.rb +5 -5
  18. data/lib/{desk → desk_api}/error.rb +5 -5
  19. data/lib/{desk → desk_api}/error/bad_gateway.rb +3 -3
  20. data/lib/{desk → desk_api}/error/bad_request.rb +3 -3
  21. data/lib/{desk → desk_api}/error/client_error.rb +3 -3
  22. data/lib/{desk → desk_api}/error/configuration_error.rb +2 -2
  23. data/lib/{desk → desk_api}/error/conflict.rb +3 -3
  24. data/lib/{desk → desk_api}/error/forbidden.rb +3 -3
  25. data/lib/{desk → desk_api}/error/gateway_timeout.rb +3 -3
  26. data/lib/desk_api/error/internal_server_error.rb +10 -0
  27. data/lib/{desk → desk_api}/error/method_not_allowed.rb +3 -3
  28. data/lib/{desk → desk_api}/error/method_not_supported.rb +3 -3
  29. data/lib/{desk → desk_api}/error/not_acceptable.rb +3 -3
  30. data/lib/{desk → desk_api}/error/not_found.rb +3 -3
  31. data/lib/desk_api/error/parse_error.rb +9 -0
  32. data/lib/desk_api/error/parser_error.rb +9 -0
  33. data/lib/{desk → desk_api}/error/server_error.rb +3 -3
  34. data/lib/desk_api/error/service_unavailable.rb +10 -0
  35. data/lib/{desk → desk_api}/error/too_many_requests.rb +3 -3
  36. data/lib/{desk → desk_api}/error/unauthorized.rb +3 -3
  37. data/lib/{desk → desk_api}/error/unprocessable_entity.rb +3 -3
  38. data/lib/{desk → desk_api}/error/unsupported_media_type.rb +3 -3
  39. data/lib/{desk → desk_api}/rate_limit.rb +1 -1
  40. data/lib/{desk → desk_api}/request/retry.rb +2 -2
  41. data/lib/{desk → desk_api}/resource.rb +16 -16
  42. data/lib/desk_api/resource/article.rb +10 -0
  43. data/lib/desk_api/resource/article_translation.rb +8 -0
  44. data/lib/desk_api/resource/attachment.rb +8 -0
  45. data/lib/desk_api/resource/case.rb +9 -0
  46. data/lib/desk_api/resource/company.rb +8 -0
  47. data/lib/desk_api/resource/customer.rb +9 -0
  48. data/lib/desk_api/resource/integration_url.rb +9 -0
  49. data/lib/desk_api/resource/job.rb +7 -0
  50. data/lib/desk_api/resource/label.rb +9 -0
  51. data/lib/desk_api/resource/macro.rb +9 -0
  52. data/lib/desk_api/resource/macro_action.rb +7 -0
  53. data/lib/desk_api/resource/note.rb +7 -0
  54. data/lib/{desk → desk_api}/resource/page.rb +5 -5
  55. data/lib/desk_api/resource/reply.rb +8 -0
  56. data/lib/desk_api/resource/topic.rb +9 -0
  57. data/lib/desk_api/resource/topic_translation.rb +9 -0
  58. data/lib/desk_api/resource/user_preference.rb +7 -0
  59. data/lib/{desk → desk_api}/resources.json +0 -0
  60. data/lib/desk_api/response/raise_error.rb +34 -0
  61. data/lib/desk_api/version.rb +3 -0
  62. data/spec/cassettes/{Desk_Client → DeskApi_Client}/_delete/deletes_a_resource.yml +5 -5
  63. data/spec/cassettes/{Desk_Client → DeskApi_Client}/_get/fetches_resources.yml +5 -5
  64. data/spec/cassettes/{Desk_Client → DeskApi_Client}/_patch/updates_a_resource.yml +6 -6
  65. data/spec/cassettes/{Desk_Client → DeskApi_Client}/_post/creates_a_resource.yml +8 -8
  66. data/spec/cassettes/{Desk_Error → DeskApi_Error}/_from_response/can_be_created_from_a_faraday_response.yml +5 -5
  67. data/spec/cassettes/{Desk_Error → DeskApi_Error}/_from_response/uses_the_body_message_if_present.yml +5 -5
  68. data/spec/cassettes/{Desk_Resource → DeskApi_Resource}/_by_url/finds_resources_by_url.yml +7 -7
  69. data/spec/cassettes/{Desk_Resource → DeskApi_Resource}/_create/creates_a_new_topic.yml +8 -8
  70. data/spec/cassettes/{Desk_Resource → DeskApi_Resource}/_delete/deletes_a_resource.yml +25 -26
  71. data/spec/cassettes/{Desk_Resource → DeskApi_Resource}/_delete/throws_an_error_deleting_a_non_deletalbe_resource.yml +6 -6
  72. 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
  73. data/spec/cassettes/{Desk_Resource → DeskApi_Resource}/_exec_/loads_the_current_resource.yml +7 -7
  74. 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
  75. 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
  76. data/spec/cassettes/{Desk_Resource → DeskApi_Resource}/_search/allows_searching_on_search_enabled_resources.yml +5 -5
  77. data/spec/cassettes/DeskApi_Resource/_update/can_update_without_a_hash.yml +116 -0
  78. data/spec/cassettes/{Desk_Resource → DeskApi_Resource}/_update/throws_an_error_updating_a_user.yml +5 -5
  79. data/spec/cassettes/{Desk_Resource → DeskApi_Resource}/_update/updates_a_topic.yml +18 -20
  80. data/spec/cassettes/{Desk_Resource_Page → DeskApi_Resource_Page}/_by_id/loads_the_requested_resource.yml +5 -5
  81. data/spec/cassettes/{Desk_Resource_Page → DeskApi_Resource_Page}/_page/keeps_the_resource_as_loaded.yml +5 -5
  82. 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
  83. data/spec/cassettes/{Desk_Resource_Page → DeskApi_Resource_Page}/_page/sets_the_resource_to_not_loaded.yml +5 -5
  84. data/spec/{desk → desk_api}/client_spec.rb +14 -14
  85. data/spec/{desk → desk_api}/configuration_spec.rb +23 -23
  86. data/spec/{desk → desk_api}/default_spec.rb +5 -5
  87. data/spec/{desk → desk_api}/error_spec.rb +4 -4
  88. data/spec/{desk → desk_api}/rate_limit_spec.rb +7 -7
  89. data/spec/{desk → desk_api}/request/retry_spec.rb +3 -3
  90. data/spec/{desk → desk_api}/resource_spec.rb +17 -10
  91. data/spec/{desk → desk_api}/resources/page_spec.rb +5 -5
  92. data/spec/{desk_spec.rb → desk_api_spec.rb} +10 -10
  93. data/spec/spec_helper.rb +1 -1
  94. metadata +121 -118
  95. data/lib/desk/action/resource.rb +0 -14
  96. data/lib/desk/error/internal_server_error.rb +0 -10
  97. data/lib/desk/error/parse_error.rb +0 -9
  98. data/lib/desk/error/parser_error.rb +0 -9
  99. data/lib/desk/error/service_unavailable.rb +0 -10
  100. data/lib/desk/resource/article.rb +0 -10
  101. data/lib/desk/resource/article_translation.rb +0 -8
  102. data/lib/desk/resource/attachment.rb +0 -8
  103. data/lib/desk/resource/case.rb +0 -9
  104. data/lib/desk/resource/company.rb +0 -8
  105. data/lib/desk/resource/customer.rb +0 -9
  106. data/lib/desk/resource/integration_url.rb +0 -9
  107. data/lib/desk/resource/job.rb +0 -7
  108. data/lib/desk/resource/label.rb +0 -9
  109. data/lib/desk/resource/macro.rb +0 -9
  110. data/lib/desk/resource/macro_action.rb +0 -7
  111. data/lib/desk/resource/note.rb +0 -7
  112. data/lib/desk/resource/reply.rb +0 -8
  113. data/lib/desk/resource/topic.rb +0 -9
  114. data/lib/desk/resource/topic_translation.rb +0 -9
  115. data/lib/desk/resource/user_preference.rb +0 -7
  116. data/lib/desk/response/raise_error.rb +0 -34
  117. data/lib/desk/version.rb +0 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6b7e54656d496540b4dca275b4288ee34341b3c6
4
- data.tar.gz: fadb4549ca2e30c77e92fa0f74aece67f9176ce6
3
+ metadata.gz: 707504b6574f986733536a110fcb6e62d9e21fdc
4
+ data.tar.gz: 83018510d73d59c23fc2e867729a9317939d1ab0
5
5
  SHA512:
6
- metadata.gz: a14e59d2749dab344223176662a5d20b262d12e010247a76dd04e1a4964dd311fb58e419b1d358eeb5386dd0e11a163df1c5874f84b97591c0a6e2f9fe65ff42
7
- data.tar.gz: 2be5d5583bfc5735e010444a06e4b1d220dc12da470c498240a29c0ac9ed8ffeeec64cc249f06227787d53e9fdaff8ad02a01193569d54f0414ca707ecc3030b
6
+ metadata.gz: cc4d3a9536f1e49d1d0ff7d9d860e8e9a897bc718f663682bd103fd1dc3db06ed52a1637ada19431af765160fa40c03cdf19bcf68184cb37aee8348a1a20a3bd
7
+ data.tar.gz: de81f51bc700975c8ed46394fa47b13a69e420a1f2c86e6665fa48d201fa1e139ee94f93f6ec9c76b643efbdd2dbf0230924b1b4cf20964ef8edf46a5b3bb24a
data/README.md CHANGED
@@ -1,12 +1,27 @@
1
- # desk.com APIv2 [![Build Status](https://secure.travis-ci.org/tstachl/desk.png)](http://travis-ci.org/tstachl/desk) [![Coverage Status](https://coveralls.io/repos/tstachl/desk/badge.png)](https://coveralls.io/r/tstachl/desk) [![Dependency Status](https://gemnasium.com/tstachl/desk.png)](https://gemnasium.com/tstachl/desk)
1
+ # desk.com APIv2 [![Build Status](https://secure.travis-ci.org/tstachl/desk.png)](http://travis-ci.org/tstachl/desk) [![Coverage Status](https://coveralls.io/repos/tstachl/desk/badge.png?branch=develop)](https://coveralls.io/r/tstachl/desk?branch=develop) [![Dependency Status](https://gemnasium.com/tstachl/desk.png)](https://gemnasium.com/tstachl/desk)
2
2
 
3
3
  desk.com has released v2 of their REST API a few months ago and provides a lot more functionality. You should read up on the current progress of the [API](http://dev.desk.com/API/changelog). This library wraps all of it into an easy to use ruby module. We'll try to keep up with the changes of the API but things might still break unexpectedly.
4
4
 
5
+ ## Installation
6
+
7
+ ```ruby
8
+ gem install desk_api
9
+ ```
10
+
5
11
  ## Example
6
12
  This example shows you how to create a new client and establish a connection to the API. It shows the four request methods supported by the desk.com API (`GET`, `POST`, `PATCH` and `DELETE`).
7
13
 
8
14
  ```ruby
9
- client = Desk::Client.new username: 'thomas@example.com', password: 'somepassword', subdomain: 'devel'
15
+ # Basic Auth
16
+ client = DeskApi::Client.new username: 'thomas@example.com', password: 'somepassword', subdomain: 'devel'
17
+ # OAuth
18
+ client = DeskApi::Client.new({
19
+ token: 'TOKEN',
20
+ token_secret: 'TOKEN_SECRET',
21
+ consumer_key: 'CONSUMER_KEY',
22
+ consumer_secret: 'CONSUMER_SECRET',
23
+ subdomain: 'devel'
24
+ })
10
25
 
11
26
  response = client.get '/api/v2/topics'
12
27
  response = client.post '/api/v2/topics', name: 'My new Topic', allow_questions: true
@@ -17,16 +32,16 @@ response = client.delete '/api/v2/topics/1'
17
32
  For ease of use and if you only create one connection to the desk.com API you can use `Desk` directly:
18
33
 
19
34
  ```ruby
20
- Desk.configure do |config|
35
+ DeskApi.configure do |config|
21
36
  config.username = 'thomas@example.com'
22
37
  config.password = 'somepassword'
23
38
  config.subdomain = 'devel'
24
39
  end
25
40
 
26
- Desk.get '/api/v2/topics'
27
- Desk.post '/api/v2/topics', name: 'My new Topic', allow_questions: true
28
- Desk.patch '/api/v2/topics/1', name: 'Changed the Topic Name'
29
- Desk.delete '/api/v2/topics/1'
41
+ DeskApi.get '/api/v2/topics'
42
+ DeskApi.post '/api/v2/topics', name: 'My new Topic', allow_questions: true
43
+ DeskApi.patch '/api/v2/topics/1', name: 'Changed the Topic Name'
44
+ DeskApi.delete '/api/v2/topics/1'
30
45
  ```
31
46
 
32
47
  ## Working with Resources and Collections
@@ -36,10 +51,10 @@ The API supports RESTful resources and so does this wrapper. Those resources are
36
51
  ### Finders
37
52
  ```ruby
38
53
  # get the first user and find a case by url.
39
- found_case = Desk.users.first.by_url '/api/v2/cases/1'
54
+ found_case = DeskApi.users.first.by_url '/api/v2/cases/1'
40
55
 
41
56
  # find a case by case number
42
- found_case = Desk.cases.by_id 1
57
+ found_case = DeskApi.cases.by_id 1
43
58
  ```
44
59
 
45
60
  ### Pagination
@@ -47,7 +62,7 @@ found_case = Desk.cases.by_id 1
47
62
  As mentioned above you can also navigate between resources and mainly pages of collections.
48
63
 
49
64
  ```ruby
50
- cases = Desk.cases
65
+ cases = DeskApi.cases
51
66
  cases.each do |my_case|
52
67
  # do something with the case
53
68
  end
@@ -70,9 +85,9 @@ Pagination is pretty obvious but the cool part about pagination or rather resour
70
85
 
71
86
  ```ruby
72
87
  # get the customer of the first case of the first page
73
- customer = Desk.cases.first.customer
88
+ customer = DeskApi.cases.first.customer
74
89
  # who sent the first outbound reply of the first email
75
- user_name = Desk.cases.select{ |my_case|
90
+ user_name = DeskApi.cases.select{ |my_case|
76
91
  my_case.type == 'email'
77
92
  }.first.replies.select{ |reply|
78
93
  reply.direction == 'out'
@@ -81,29 +96,29 @@ user_name = Desk.cases.select{ |my_case|
81
96
 
82
97
  ### Lazy loading
83
98
 
84
- Collections and resources in general are lazily loaded, meaning if you request the cases `Desk.cases` no actual request will be set off until you actually request data. This makes sure only necessary requests are fired and which keeps the overall requests low and spares the [desk.com rate limit](http://dev.desk.com/API/using-the-api/#rate-limits).
99
+ Collections and resources in general are lazily loaded, meaning if you request the cases `DeskApi.cases` no actual request will be set off until you actually request data. This makes sure only necessary requests are fired and which keeps the overall requests low and spares the [desk.com rate limit](http://dev.desk.com/API/using-the-api/#rate-limits).
85
100
 
86
101
  ```ruby
87
- Desk.cases.page(10).per_page(50).each do |my_case|
102
+ DeskApi.cases.page(10).per_page(50).each do |my_case|
88
103
  # in this method chain `.each' is the first method that acutally sends a request
89
104
  end
90
105
 
91
106
  # however if you request the current page numer and the resource is not loaded
92
107
  # it'll send a request
93
- Desk.cases.page == 1
108
+ DeskApi.cases.page == 1
94
109
  ```
95
110
 
96
111
  ### Create, Update and Delete
97
112
 
98
- Of course we support creating, updating and deleting resources but not all resources can be deleted or updated or created, if that's the case for the resource you're trying to update, it'll throw a `Desk::Error::MethodNotSupported` error. The specific method won't be defined on the resource either `Desk.cases.first.respond_to?(:delete) == false`.
113
+ Of course we support creating, updating and deleting resources but not all resources can be deleted or updated or created, if that's the case for the resource you're trying to update, it'll throw a `DeskApi::Error::MethodNotSupported` error. The specific method won't be defined on the resource either `DeskApi.cases.first.respond_to?(:delete) == false`.
99
114
 
100
115
  ```ruby
101
116
  # let's create an article
102
- new_article = Desk.articles.create({
117
+ new_article = DeskApi.articles.create({
103
118
  subject: 'Some Subject',
104
119
  body: 'Some Body',
105
120
  _links: {
106
- topic: Desk.topics.first.get_self
121
+ topic: DeskApi.topics.first.get_self
107
122
  }
108
123
  })
109
124
 
@@ -120,8 +135,8 @@ end
120
135
 
121
136
  # ATTENTION: Cases can not be deleted!
122
137
  begin
123
- Desk.cases.first.delete
124
- rescue Desk::Error::MethodNotSupported => e
138
+ DeskApi.cases.first.delete
139
+ rescue DeskApi::Error::MethodNotSupported => e
125
140
  # too bad
126
141
  end
127
142
  ```
@@ -131,7 +146,7 @@ end
131
146
  As you have seen in prior examples for each field on the resource we create a getter and setter. Be careful if a resource is not updatable it won't have a setter specified.
132
147
 
133
148
  ```ruby
134
- customer = Desk.customers.by_id(1)
149
+ customer = DeskApi.customers.by_id(1)
135
150
 
136
151
  puts customer.first_name
137
152
  puts customer.last_name
@@ -146,28 +161,28 @@ updated_customer = customer.update title: 'Master of the Universe'
146
161
 
147
162
  # users are not updatable
148
163
  begin
149
- user = Desk.users.first
164
+ user = DeskApi.users.first
150
165
  user.name = 'Not updateable'
151
- rescue Desk::Error::MethodNotSupported
166
+ rescue DeskApi::Error::MethodNotSupported
152
167
  # too bad
153
168
  end
154
169
  ```
155
170
 
156
171
  ### API Errors
157
172
 
158
- Sometimes the API is going to return errors, eg. Validation Error. In these cases we wrap the API error into a `Desk::Error`. Here are the common errors:
173
+ Sometimes the API is going to return errors, eg. Validation Error. In these cases we wrap the API error into a `DeskApi::Error`. Here are the common errors:
159
174
 
160
175
  ```ruby
161
- Desk::Error::BadRequest #=> 400 Status
162
- Desk::Error::Unauthorized #=> 401 Status
163
- Desk::Error::Forbidden #=> 403 Status
164
- Desk::Error::NotFound #=> 404 Status
165
- Desk::Error::MethodNotAllowed #=> 405 Status
166
- Desk::Error::NotAcceptable #=> 406 Status
167
- Desk::Error::Conflict #=> 409 Status
168
- Desk::Error::UnsupportedMediaType #=> 415 Status
169
- Desk::Error::UnprocessableEntity #=> 422 Status
170
- Desk::Error::TooManyRequests #=> 429 Status
176
+ DeskApi::Error::BadRequest #=> 400 Status
177
+ DeskApi::Error::Unauthorized #=> 401 Status
178
+ DeskApi::Error::Forbidden #=> 403 Status
179
+ DeskApi::Error::NotFound #=> 404 Status
180
+ DeskApi::Error::MethodNotAllowed #=> 405 Status
181
+ DeskApi::Error::NotAcceptable #=> 406 Status
182
+ DeskApi::Error::Conflict #=> 409 Status
183
+ DeskApi::Error::UnsupportedMediaType #=> 415 Status
184
+ DeskApi::Error::UnprocessableEntity #=> 422 Status
185
+ DeskApi::Error::TooManyRequests #=> 429 Status
171
186
  ```
172
187
 
173
188
  Please also have a look at all [desk.com API errors](http://dev.desk.com/API/using-the-api/#status-codes) and their respective meanings.
data/config.rb CHANGED
@@ -1,4 +1,4 @@
1
- module Desk
1
+ module DeskApi
2
2
  CONFIG = {
3
3
  username: 'tstachl@salesforce.com',
4
4
  password: '253e6745',
data/desk_api.gemspec CHANGED
@@ -1,13 +1,13 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  $LOAD_PATH.unshift File.expand_path("../lib", __FILE__)
3
- require 'desk/version'
3
+ require 'desk_api/version'
4
4
 
5
5
  Gem::Specification.new do |gem|
6
6
  gem.name = 'desk_api'
7
7
  gem.summary = 'A lightweight, flexible wrapper for the desk.com REST API.'
8
8
  gem.description = 'This is a lightweight, flexible ruby gem to interact with the desk.com REST API. It allows to create, read and delete resources available through the API endpoints. It can be used either with OAuth or HTTP Basic Authentication.'
9
- gem.homepage = 'http://github.com/tstachl/desk.rb'
10
- gem.version = Desk::VERSION
9
+ gem.homepage = 'http://github.com/tstachl/desk'
10
+ gem.version = DeskApi::VERSION
11
11
 
12
12
  gem.authors = ['Thomas Stachl']
13
13
  gem.email = 'tom@desk.com'
data/lib/desk.rb CHANGED
@@ -1,35 +1 @@
1
- require 'uri'
2
- require 'json'
3
- require 'forwardable'
4
- require 'addressable/uri'
5
-
6
- require 'hashie/mash'
7
- require 'active_support/inflector'
8
-
9
- require 'desk/configuration'
10
- require 'desk/client'
11
- require 'desk/version'
12
-
13
- module Desk
14
- class << self
15
- include Desk::Configuration
16
-
17
- # Delegate to a Desk::Client
18
- #
19
- # @return [Desk::Client]
20
- def client
21
- return @client if instance_variable_defined?(:@client) && @client.hash == options.hash
22
- @client = Desk::Client.new(options)
23
- end
24
-
25
- def method_missing(method_name, *args, &block)
26
- return super unless respond_to_missing?(method_name)
27
- client.send(method_name, *args, &block)
28
- end
29
-
30
- def respond_to_missing?(method_name, include_private = false)
31
- client.respond_to?(method_name, include_private)
32
- end
33
- end
34
- setup
35
- end
1
+ require File.dirname(__FILE__) + '/desk_api'
data/lib/desk_api.rb ADDED
@@ -0,0 +1,35 @@
1
+ require 'uri'
2
+ require 'json'
3
+ require 'forwardable'
4
+ require 'addressable/uri'
5
+
6
+ require 'hashie/mash'
7
+ require 'active_support/inflector'
8
+
9
+ require 'desk_api/configuration'
10
+ require 'desk_api/client'
11
+ require 'desk_api/version'
12
+
13
+ module DeskApi
14
+ class << self
15
+ include DeskApi::Configuration
16
+
17
+ # Delegate to a DeskApi::Client
18
+ #
19
+ # @return [DeskApi::Client]
20
+ def client
21
+ return @client if instance_variable_defined?(:@client) && @client.hash == options.hash
22
+ @client = DeskApi::Client.new(options)
23
+ end
24
+
25
+ def method_missing(method_name, *args, &block)
26
+ return super unless respond_to_missing?(method_name)
27
+ client.send(method_name, *args, &block)
28
+ end
29
+
30
+ def respond_to_missing?(method_name, include_private = false)
31
+ client.respond_to?(method_name, include_private)
32
+ end
33
+ end
34
+ setup
35
+ end
@@ -1,4 +1,4 @@
1
- module Desk
1
+ module DeskApi
2
2
  module Action
3
3
  module Create
4
4
  module ClassMethods
@@ -1,4 +1,4 @@
1
- module Desk
1
+ module DeskApi
2
2
  module Action
3
3
  module Delete
4
4
  def delete
@@ -1,4 +1,4 @@
1
- module Desk
1
+ module DeskApi
2
2
  module Action
3
3
  module Embedded
4
4
  protected
@@ -1,4 +1,4 @@
1
- module Desk
1
+ module DeskApi
2
2
  module Action
3
3
  module Field
4
4
  protected
@@ -14,11 +14,11 @@ module Desk
14
14
  instance_variable_set(:"@#{key}", value)
15
15
  # create getter
16
16
  (class << self; self; end).send(:define_method, "#{key}") do
17
- return @_changed[key] if kind_of?(Desk::Action::Update) and @_changed[key]
17
+ return @_changed[key] if kind_of?(DeskApi::Action::Update) and @_changed[key]
18
18
  instance_variable_get(:"@#{key}")
19
19
  end
20
20
  # create setter
21
- if kind_of?(Desk::Action::Update)
21
+ if kind_of?(DeskApi::Action::Update)
22
22
  (class << self; self; end).send(:define_method, "#{key}=") do |value|
23
23
  if instance_variable_get(:"@#{key}") != value
24
24
  @_changed[key] = value
@@ -1,4 +1,4 @@
1
- module Desk
1
+ module DeskApi
2
2
  module Action
3
3
  module Link
4
4
  protected
@@ -18,7 +18,7 @@ module Desk
18
18
  # this is a really ugly hack but necessary for sub resources which aren't declared consistently
19
19
  definition['class'] = 'page' if method.pluralize == method
20
20
  # get the client
21
- client = self.instance_of?(Desk::Client) ? self : self.client
21
+ client = self.instance_of?(DeskApi::Client) ? self : self.client
22
22
  # create the new resource
23
23
  @_links[method]['resource'] = resource(definition['class']).new client, Hashie::Mash.new({ _links: { self: definition } })
24
24
  end
@@ -0,0 +1,14 @@
1
+ module DeskApi
2
+ module Action
3
+ module Resource
4
+ protected
5
+ def resource(name)
6
+ require "desk_api/resource/#{name}"
7
+ "DeskApi::Resource::#{name.classify}".constantize
8
+ rescue NameError
9
+ rescue LoadError
10
+ DeskApi::Resource
11
+ end
12
+ end
13
+ end
14
+ end
@@ -1,4 +1,4 @@
1
- module Desk
1
+ module DeskApi
2
2
  module Action
3
3
  module Search
4
4
  module ClassMethods
@@ -1,7 +1,7 @@
1
- module Desk
1
+ module DeskApi
2
2
  module Action
3
3
  module Update
4
- def update(params)
4
+ def update(params = {})
5
5
  params.each_pair do |key, value|
6
6
  send("#{key}=", value) if respond_to?("#{key}=")
7
7
  end
@@ -1,26 +1,26 @@
1
1
  require 'faraday'
2
2
 
3
- require 'desk/configuration'
4
- require 'desk/action/link'
5
- require 'desk/action/resource'
6
- require 'desk/error/client_error'
7
- require 'desk/error/parse_error'
3
+ require 'desk_api/configuration'
4
+ require 'desk_api/action/link'
5
+ require 'desk_api/action/resource'
6
+ require 'desk_api/error/client_error'
7
+ require 'desk_api/error/parse_error'
8
8
 
9
- require 'desk/resource'
9
+ require 'desk_api/resource'
10
10
 
11
- module Desk
11
+ module DeskApi
12
12
  class Client
13
- include Desk::Configuration
14
- include Desk::Action::Link
15
- include Desk::Action::Resource
13
+ include DeskApi::Configuration
14
+ include DeskApi::Action::Link
15
+ include DeskApi::Action::Resource
16
16
 
17
17
  # Initializes a new Client object
18
18
  #
19
19
  # @param options [Hash]
20
- # @return [Desk::Client]
20
+ # @return [DeskApi::Client]
21
21
  def initialize(options = {})
22
- Desk::Configuration.keys.each do |key|
23
- instance_variable_set(:"@#{key}", options[key] || Desk.instance_variable_get(:"@#{key}"))
22
+ DeskApi::Configuration.keys.each do |key|
23
+ instance_variable_set(:"@#{key}", options[key] || DeskApi.instance_variable_get(:"@#{key}"))
24
24
  end
25
25
 
26
26
  # load the initial resources (should actually be a call to /api/v2 but not yet)
@@ -55,9 +55,9 @@ module Desk
55
55
  def request(method, path, params = {})
56
56
  connection.send(method, path, params)
57
57
  rescue Faraday::Error::ClientError
58
- raise Desk::Error::ClientError
58
+ raise DeskApi::Error::ClientError
59
59
  rescue JSON::ParserError
60
- raise Desk::Error::ParserError
60
+ raise DeskApi::Error::ParserError
61
61
  end
62
62
 
63
63
  def connection
@@ -4,14 +4,14 @@ require 'faraday_middleware'
4
4
  require 'typhoeus'
5
5
  require 'typhoeus/adapters/faraday'
6
6
 
7
- require 'desk/default'
8
- require 'desk/request/retry'
9
- require 'desk/response/raise_error'
10
- require 'desk/error/configuration_error'
11
- require 'desk/error/client_error'
12
- require 'desk/error/server_error'
13
-
14
- module Desk
7
+ require 'desk_api/default'
8
+ require 'desk_api/request/retry'
9
+ require 'desk_api/response/raise_error'
10
+ require 'desk_api/error/configuration_error'
11
+ require 'desk_api/error/client_error'
12
+ require 'desk_api/error/server_error'
13
+
14
+ module DeskApi
15
15
  module Configuration
16
16
  extend Forwardable
17
17
  attr_writer :consumer_secret, :token, :token_secret, :password
@@ -48,8 +48,8 @@ module Desk
48
48
 
49
49
  builder.response :mashify
50
50
  builder.response :dates
51
- builder.response :raise_error, Desk::Error::ClientError
52
- builder.response :raise_error, Desk::Error::ServerError
51
+ builder.response :raise_error, DeskApi::Error::ClientError
52
+ builder.response :raise_error, DeskApi::Error::ServerError
53
53
  builder.response :json, content_type: /application\/json/
54
54
 
55
55
  builder.adapter :typhoeus
@@ -64,8 +64,8 @@ module Desk
64
64
  end
65
65
 
66
66
  def reset!
67
- Desk::Configuration.keys.each do |key|
68
- send("#{key}=", Desk::Default.options[key])
67
+ DeskApi::Configuration.keys.each do |key|
68
+ send("#{key}=", DeskApi::Default.options[key])
69
69
  end
70
70
  self
71
71
  end
@@ -78,7 +78,7 @@ module Desk
78
78
  private
79
79
  # @return [Hash]
80
80
  def options
81
- Hash[Desk::Configuration.keys.map{|key| [key, instance_variable_get(:"@#{key}")]}]
81
+ Hash[DeskApi::Configuration.keys.map{|key| [key, instance_variable_get(:"@#{key}")]}]
82
82
  end
83
83
 
84
84
  def oauth