desk_api 0.1.3 → 0.5.0

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.
Files changed (94) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -2
  3. data/Gemfile +0 -6
  4. data/README.md +38 -31
  5. data/desk_api.gemspec +1 -4
  6. data/lib/desk_api.rb +5 -7
  7. data/lib/desk_api/client.rb +44 -57
  8. data/lib/desk_api/configuration.rb +89 -95
  9. data/lib/desk_api/default.rb +51 -55
  10. data/lib/desk_api/error.rb +42 -44
  11. data/lib/desk_api/rate_limit.rb +20 -22
  12. data/lib/desk_api/resource.rb +142 -65
  13. data/lib/desk_api/version.rb +1 -1
  14. data/spec/cassettes/DeskApi_Client/using_Basic_Authentication/_delete/deletes_a_resource.yml +22 -22
  15. data/spec/cassettes/DeskApi_Client/using_Basic_Authentication/_get/fetches_resources.yml +26 -26
  16. data/spec/cassettes/DeskApi_Client/using_Basic_Authentication/_patch/updates_a_resource.yml +30 -30
  17. data/spec/cassettes/DeskApi_Client/using_Basic_Authentication/_post/creates_a_resource.yml +27 -27
  18. data/spec/cassettes/DeskApi_Client/using_OAuth/_delete/deletes_a_resource.yml +22 -22
  19. data/spec/cassettes/DeskApi_Client/using_OAuth/_get/fetches_resources.yml +31 -286
  20. data/spec/cassettes/DeskApi_Client/using_OAuth/_patch/updates_a_resource.yml +35 -35
  21. data/spec/cassettes/DeskApi_Client/using_OAuth/_post/creates_a_resource.yml +28 -28
  22. data/spec/cassettes/DeskApi_Error/_from_response/can_be_created_from_a_faraday_response.yml +22 -22
  23. data/spec/cassettes/DeskApi_Error/_from_response/uses_the_body_message_if_present.yml +22 -22
  24. data/spec/cassettes/DeskApi_Error/on_validation_error/allows_access_to_error_hash.yml +22 -22
  25. data/spec/cassettes/DeskApi_Resource/_by_url/finds_resources_by_url.yml +37 -286
  26. data/spec/cassettes/DeskApi_Resource/_create/creates_a_new_topic.yml +27 -27
  27. data/spec/cassettes/DeskApi_Resource/_create/throws_an_error_creating_a_user.yml +54 -0
  28. data/spec/cassettes/DeskApi_Resource/_delete/deletes_a_resource.yml +83 -79
  29. data/spec/cassettes/DeskApi_Resource/_delete/throws_an_error_deleting_a_non_deletalbe_resource.yml +78 -28
  30. data/spec/cassettes/DeskApi_Resource/_exec_/can_be_forced_to_reload.yml +34 -285
  31. data/spec/cassettes/DeskApi_Resource/_exec_/loads_the_current_resource.yml +34 -285
  32. data/spec/cassettes/DeskApi_Resource/_find/has_an_alias_by_id.yml +54 -0
  33. data/spec/cassettes/DeskApi_Resource/_find/loads_the_requested_resource.yml +54 -0
  34. data/spec/cassettes/DeskApi_Resource/_get_linked_resource/returns_linked_resources.yml +113 -0
  35. data/spec/cassettes/DeskApi_Resource/_get_linked_resource/returns_nil_if_link_is_nil.yml +62 -0
  36. data/spec/cassettes/DeskApi_Resource/_get_linked_resource/saves_the_linked_resource_instead_of_the_url.yml +113 -0
  37. data/spec/cassettes/DeskApi_Resource/_method_missing/loads_the_resource_to_find_a_suitable_method.yml +34 -285
  38. data/spec/cassettes/DeskApi_Resource/_method_missing/raises_an_error_if_method_does_not_exist.yml +34 -285
  39. data/spec/cassettes/DeskApi_Resource/_page/keeps_the_resource_as_loaded.yml +113 -0
  40. data/spec/cassettes/DeskApi_Resource/_page/returns_the_current_page_and_loads_if_page_not_defined.yml +62 -0
  41. data/spec/cassettes/DeskApi_Resource/_page/sets_the_resource_to_not_loaded.yml +113 -0
  42. data/spec/cassettes/DeskApi_Resource/_search/allows_searching_on_search_enabled_resources.yml +23 -23
  43. data/spec/cassettes/DeskApi_Resource/_search/throws_an_error_if_search_is_not_enabled.yml +52 -0
  44. data/spec/cassettes/DeskApi_Resource/_update/can_update_without_a_hash.yml +178 -58
  45. data/spec/cassettes/DeskApi_Resource/_update/throws_an_error_updating_a_user.yml +86 -28
  46. data/spec/cassettes/DeskApi_Resource/_update/updates_a_topic.yml +61 -57
  47. data/spec/desk_api/client_spec.rb +9 -16
  48. data/spec/desk_api/resource_spec.rb +118 -43
  49. data/spec/spec_helper.rb +1 -1
  50. metadata +24 -102
  51. data/lib/desk_api/action/create.rb +0 -15
  52. data/lib/desk_api/action/delete.rb +0 -9
  53. data/lib/desk_api/action/embeddable.rb +0 -47
  54. data/lib/desk_api/action/field.rb +0 -33
  55. data/lib/desk_api/action/link.rb +0 -29
  56. data/lib/desk_api/action/resource.rb +0 -14
  57. data/lib/desk_api/action/search.rb +0 -15
  58. data/lib/desk_api/action/update.rb +0 -17
  59. data/lib/desk_api/error/method_not_supported.rb +0 -9
  60. data/lib/desk_api/error/not_embeddable.rb +0 -8
  61. data/lib/desk_api/error/not_updateable.rb +0 -10
  62. data/lib/desk_api/error/parse_error.rb +0 -9
  63. data/lib/desk_api/resource/article.rb +0 -10
  64. data/lib/desk_api/resource/article_translation.rb +0 -8
  65. data/lib/desk_api/resource/attachment.rb +0 -8
  66. data/lib/desk_api/resource/case.rb +0 -11
  67. data/lib/desk_api/resource/company.rb +0 -8
  68. data/lib/desk_api/resource/customer.rb +0 -9
  69. data/lib/desk_api/resource/filter.rb +0 -7
  70. data/lib/desk_api/resource/inbound_mailbox.rb +0 -7
  71. data/lib/desk_api/resource/integration_url.rb +0 -9
  72. data/lib/desk_api/resource/job.rb +0 -9
  73. data/lib/desk_api/resource/label.rb +0 -9
  74. data/lib/desk_api/resource/macro.rb +0 -9
  75. data/lib/desk_api/resource/macro_action.rb +0 -7
  76. data/lib/desk_api/resource/note.rb +0 -7
  77. data/lib/desk_api/resource/page.rb +0 -64
  78. data/lib/desk_api/resource/reply.rb +0 -10
  79. data/lib/desk_api/resource/topic.rb +0 -9
  80. data/lib/desk_api/resource/topic_translation.rb +0 -9
  81. data/lib/desk_api/resource/user_preference.rb +0 -7
  82. data/lib/desk_api/resources.json +0 -76
  83. data/spec/cassettes/DeskApi_Client/_delete/deletes_a_resource.yml +0 -48
  84. data/spec/cassettes/DeskApi_Client/_get/fetches_resources.yml +0 -55
  85. data/spec/cassettes/DeskApi_Client/_patch/updates_a_resource.yml +0 -62
  86. data/spec/cassettes/DeskApi_Client/_post/creates_a_resource.yml +0 -58
  87. data/spec/cassettes/DeskApi_Resource_Case/once_closed/can_not_be_updated.yml +0 -124
  88. data/spec/cassettes/DeskApi_Resource_Page/_find/has_an_alias_by_id.yml +0 -54
  89. data/spec/cassettes/DeskApi_Resource_Page/_find/loads_the_requested_resource.yml +0 -54
  90. data/spec/cassettes/DeskApi_Resource_Page/_page/keeps_the_resource_as_loaded.yml +0 -113
  91. data/spec/cassettes/DeskApi_Resource_Page/_page/returns_the_current_page_and_loads_if_page_not_defined.yml +0 -313
  92. data/spec/cassettes/DeskApi_Resource_Page/_page/sets_the_resource_to_not_loaded.yml +0 -113
  93. data/spec/desk_api/resource/case_spec.rb +0 -28
  94. data/spec/desk_api/resource/page_spec.rb +0 -68
@@ -1,8 +0,0 @@
1
- require 'desk_api/error'
2
-
3
- module DeskApi
4
- class Error
5
- class NotEmbeddable < DeskApi::Error
6
- end
7
- end
8
- end
@@ -1,10 +0,0 @@
1
- require 'desk_api/error'
2
-
3
- module DeskApi
4
- class Error
5
- # Raised when an updateable resources becomes non-updateable
6
- # and you try to update it
7
- class NotUpdateable < DeskApi::Error
8
- end
9
- end
10
- end
@@ -1,9 +0,0 @@
1
- require 'desk_api/error'
2
-
3
- module DeskApi
4
- class Error
5
- # Raised when JSON parsing fails
6
- class ParserError < DeskApi::Error
7
- end
8
- end
9
- end
@@ -1,10 +0,0 @@
1
- module DeskApi
2
- class Resource
3
- class Article < DeskApi::Resource
4
- include DeskApi::Action::Create
5
- include DeskApi::Action::Update
6
- include DeskApi::Action::Delete
7
- include DeskApi::Action::Search
8
- end
9
- end
10
- end
@@ -1,8 +0,0 @@
1
- module DeskApi
2
- class Resource
3
- class ArticleTranslation < DeskApi::Resource
4
- include DeskApi::Action::Create
5
- include DeskApi::Action::Update
6
- end
7
- end
8
- end
@@ -1,8 +0,0 @@
1
- module DeskApi
2
- class Resource
3
- class Attachment < DeskApi::Resource
4
- include DeskApi::Action::Create
5
- include DeskApi::Action::Delete
6
- end
7
- end
8
- end
@@ -1,11 +0,0 @@
1
- module DeskApi
2
- class Resource
3
- class Case < DeskApi::Resource
4
- include DeskApi::Action::Create
5
- include DeskApi::Action::Update
6
- include DeskApi::Action::Search
7
-
8
- embeddable :customer, :assigned_user, :assigned_group, :locked_by
9
- end
10
- end
11
- end
@@ -1,8 +0,0 @@
1
- module DeskApi
2
- class Resource
3
- class Company < DeskApi::Resource
4
- include DeskApi::Action::Create
5
- include DeskApi::Action::Update
6
- end
7
- end
8
- end
@@ -1,9 +0,0 @@
1
- module DeskApi
2
- class Resource
3
- class Customer < DeskApi::Resource
4
- include DeskApi::Action::Create
5
- include DeskApi::Action::Update
6
- include DeskApi::Action::Search
7
- end
8
- end
9
- end
@@ -1,7 +0,0 @@
1
- module DeskApi
2
- class Resource
3
- class Filter < DeskApi::Resource
4
- embeddable :user, :group
5
- end
6
- end
7
- end
@@ -1,7 +0,0 @@
1
- module DeskApi
2
- class Resource
3
- class InboundMailbox < DeskApi::Resource
4
- embeddable :default_group
5
- end
6
- end
7
- end
@@ -1,9 +0,0 @@
1
- module DeskApi
2
- class Resource
3
- class IntegrationUrl < DeskApi::Resource
4
- include DeskApi::Action::Create
5
- include DeskApi::Action::Update
6
- include DeskApi::Action::Delete
7
- end
8
- end
9
- end
@@ -1,9 +0,0 @@
1
- module DeskApi
2
- class Resource
3
- class Job < DeskApi::Resource
4
- include DeskApi::Action::Create
5
-
6
- embeddable :user
7
- end
8
- end
9
- end
@@ -1,9 +0,0 @@
1
- module DeskApi
2
- class Resource
3
- class Article < DeskApi::Resource
4
- include DeskApi::Action::Create
5
- include DeskApi::Action::Update
6
- include DeskApi::Action::Delete
7
- end
8
- end
9
- end
@@ -1,9 +0,0 @@
1
- module DeskApi
2
- class Resource
3
- class Macro < DeskApi::Resource
4
- include DeskApi::Action::Create
5
- include DeskApi::Action::Update
6
- include DeskApi::Action::Delete
7
- end
8
- end
9
- end
@@ -1,7 +0,0 @@
1
- module DeskApi
2
- class Resource
3
- class MacroAction < DeskApi::Resource
4
- include DeskApi::Action::Update
5
- end
6
- end
7
- end
@@ -1,7 +0,0 @@
1
- module DeskApi
2
- class Resource
3
- class Note < DeskApi::Resource
4
- include DeskApi::Action::Create
5
- end
6
- end
7
- end
@@ -1,64 +0,0 @@
1
- module DeskApi
2
- class Resource
3
- class Page < DeskApi::Resource
4
- include Enumerable
5
-
6
- [
7
- :all?, :any?,
8
- :collect, :each, :entries, :find, :find_all,
9
- :find_index, :first, :first, :group_by, :last,
10
- :map, :map!, :none?, :one?, :partition, :reduce,
11
- :reject, :select, :sort, :sort_by, :taken, :zip
12
- ].each do |method|
13
- define_method(method) do |*args, &block|
14
- exec!.records.send(method, *args, &block)
15
- end
16
- end
17
-
18
- def search(params)
19
- raise DeskApi::Error::MethodNotSupported unless base_class.respond_to?(:search)
20
- url = Addressable::URI.parse(clean_base_url + '/search')
21
- url.query_values = params
22
- base_class.search(client, url.to_s).exec!
23
- end
24
-
25
- def create(params)
26
- raise DeskApi::Error::MethodNotSupported unless base_class.respond_to?(:create)
27
- base_class.create(client, clean_base_url, params)
28
- end
29
-
30
- [:page, :per_page].each do |method|
31
- define_method(method) do |value = nil|
32
- if not value
33
- self.exec! if self.query_params_include?(method.to_s) == nil
34
- return self.query_params_include?(method.to_s).to_i
35
- end
36
- self.query_params = Hash[method.to_s, value.to_s]
37
- self
38
- end
39
- end
40
-
41
- def find(id, options = {})
42
- res = base_class.new(client, Hashie::Mash.new({ _links: { self: { href: "#{clean_base_url}/#{id}" }}}))
43
- if options[:embed]
44
- options[:embed] = [options[:embed]] unless options[:embed].kind_of?(Array)
45
- res.embed(*options[:embed])
46
- end
47
- res.exec!
48
- end
49
- alias_method :by_id, :find
50
-
51
- protected
52
-
53
- attr_reader :records
54
-
55
- def clean_base_url
56
- Addressable::URI.parse(@_links.self.href).path.gsub(/\/search$/, '')
57
- end
58
-
59
- def base_class
60
- resource(clean_base_url[/\w+$/].singularize)
61
- end
62
- end
63
- end
64
- end
@@ -1,10 +0,0 @@
1
- module DeskApi
2
- class Resource
3
- class Reply < DeskApi::Resource
4
- include DeskApi::Action::Create
5
- include DeskApi::Action::Update
6
-
7
- embeddable :case, :sent_by, :entered_by
8
- end
9
- end
10
- end
@@ -1,9 +0,0 @@
1
- module DeskApi
2
- class Resource
3
- class Topic < DeskApi::Resource
4
- include DeskApi::Action::Create
5
- include DeskApi::Action::Update
6
- include DeskApi::Action::Delete
7
- end
8
- end
9
- end
@@ -1,9 +0,0 @@
1
- module DeskApi
2
- class Resource
3
- class TopicTranslation < DeskApi::Resource
4
- include DeskApi::Action::Create
5
- include DeskApi::Action::Update
6
- include DeskApi::Action::Delete
7
- end
8
- end
9
- end
@@ -1,7 +0,0 @@
1
- module DeskApi
2
- class Resource
3
- class UserPreference < DeskApi::Resource
4
- include DeskApi::Action::Update
5
- end
6
- end
7
- end
@@ -1,76 +0,0 @@
1
- {
2
- "_links": {
3
- "articles": {
4
- "href": "/api/v2/articles",
5
- "class": "page"
6
- },
7
- "cases": {
8
- "href": "/api/v2/cases",
9
- "class": "page"
10
- },
11
- "companies": {
12
- "href": "/api/v2/companies",
13
- "class": "page"
14
- },
15
- "custom_fields": {
16
- "href": "/api/v2/custom_fields",
17
- "class": "page"
18
- },
19
- "customers": {
20
- "href": "/api/v2/customers",
21
- "class": "page"
22
- },
23
- "filters": {
24
- "href": "/api/v2/filters",
25
- "class": "page"
26
- },
27
- "groups": {
28
- "href": "/api/v2/groups",
29
- "class": "page"
30
- },
31
- "inbound_mailboxes": {
32
- "href": "/api/v2/inbound_mailboxes",
33
- "class": "page"
34
- },
35
- "integration_urls": {
36
- "href": "/api/v2/integration_urls",
37
- "class": "page"
38
- },
39
- "jobs": {
40
- "href": "/api/v2/jobs",
41
- "class": "page"
42
- },
43
- "labels": {
44
- "href": "/api/v2/labels",
45
- "class": "page"
46
- },
47
- "macros": {
48
- "href": "/api/v2/macros",
49
- "class": "page"
50
- },
51
- "rules": {
52
- "href": "/api/v2/rules",
53
- "class": "page"
54
- },
55
- "site_settings": {
56
- "href": "/api/v2/site_settings",
57
- "class": "page"
58
- },
59
- "system_message": {
60
- "href": "/api/v2/system_message",
61
- "class": "system_message"
62
- },
63
- "topics": {
64
- "href": "/api/v2/topics",
65
- "class": "page"
66
- },
67
- "twitter_accounts": {
68
- "href": "/api/v2/twitter_accounts",
69
- "class": "page"
70
- },
71
- "users": {
72
- "href": "/api/v2/users",
73
- "class": "page"
74
- }
75
- }
76
- }
@@ -1,48 +0,0 @@
1
- ---
2
- http_interactions:
3
- - request:
4
- method: delete
5
- uri: https://devel.desk.com/api/v2/topics/558245
6
- body:
7
- encoding: US-ASCII
8
- string: ''
9
- headers:
10
- Accept:
11
- - application/json
12
- User-Agent:
13
- - desk.com Ruby Gem v0.1.0
14
- response:
15
- status:
16
- code: 204
17
- message:
18
- headers:
19
- Accept-Ranges:
20
- - bytes
21
- Cache-Control:
22
- - no-cache
23
- Date:
24
- - Mon, 19 Aug 2013 23:53:31 GMT
25
- Status:
26
- - 204 No Content
27
- Vary:
28
- - X-AppVersion
29
- X-AppVersion:
30
- - '7.9'
31
- X-Frame-Options:
32
- - SAMEORIGIN
33
- X-Rate-Limit-Limit:
34
- - '60'
35
- X-Rate-Limit-Remaining:
36
- - '59'
37
- X-Rate-Limit-Reset:
38
- - '29'
39
- X-Request-Id:
40
- - d699571cf1eeca0714f02b9ee61bcbd8
41
- Connection:
42
- - keep-alive
43
- body:
44
- encoding: UTF-8
45
- string: ''
46
- http_version:
47
- recorded_at: Mon, 19 Aug 2013 23:53:31 GMT
48
- recorded_with: VCR 2.5.0
@@ -1,55 +0,0 @@
1
- ---
2
- http_interactions:
3
- - request:
4
- method: get
5
- uri: https://devel.desk.com/api/v2/cases/3014
6
- body:
7
- encoding: US-ASCII
8
- string: ''
9
- headers:
10
- Accept:
11
- - application/json
12
- User-Agent:
13
- - desk.com Ruby Gem v0.1.0
14
- response:
15
- status:
16
- code: 200
17
- message:
18
- headers:
19
- Accept-Ranges:
20
- - bytes
21
- Cache-Control:
22
- - must-revalidate, private, max-age=0
23
- Content-Type:
24
- - application/json; charset=utf-8
25
- Date:
26
- - Mon, 19 Aug 2013 23:51:35 GMT
27
- ETag:
28
- - '"31cb249bf0be971be83b891b995e19f4"'
29
- Status:
30
- - 200 OK
31
- Vary:
32
- - X-AppVersion
33
- X-AppVersion:
34
- - '7.9'
35
- X-Frame-Options:
36
- - SAMEORIGIN
37
- X-Rate-Limit-Limit:
38
- - '60'
39
- X-Rate-Limit-Remaining:
40
- - '36'
41
- X-Rate-Limit-Reset:
42
- - '25'
43
- X-Request-Id:
44
- - c57375cb946f6c499ce01ecdc8e35527
45
- Content-Length:
46
- - '942'
47
- Connection:
48
- - keep-alive
49
- body:
50
- encoding: UTF-8
51
- string: '{"external_id":"","subject":"Testing Quick Case","priority":8,"locked_until":null,"description":"Some
52
- additional Description regarding this email.","status":"resolved","type":"email","labels":[],"language":"de","active_at":"2013-05-10T19:08:27Z","created_at":"2013-05-10T19:08:10Z","updated_at":"2013-05-10T19:08:10Z","received_at":null,"custom_fields":{"my_new_custom_field":null,"my_new_number_field":null,"my_new_date_field":null,"my_new_boolean_field":null,"my_new_list_field":null},"_links":{"self":{"href":"/api/v2/cases/3014","class":"case"},"message":{"href":"/api/v2/cases/3014/message","class":"email"},"customer":{"href":"/api/v2/customers/37823480","class":"customer"},"assigned_user":null,"assigned_group":null,"locked_by":null,"replies":{"href":"/api/v2/cases/3014/replies","class":"reply"},"notes":{"href":"/api/v2/cases/3014/notes","class":"note"},"attachments":{"href":"/api/v2/cases/3014/attachments","class":"attachment"}}}'
53
- http_version:
54
- recorded_at: Mon, 19 Aug 2013 23:51:35 GMT
55
- recorded_with: VCR 2.5.0