desk_api 0.5.4 → 0.5.5
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 +4 -4
- data/README.md +29 -5
- data/desk_api.gemspec +8 -10
- data/lib/desk_api/client.rb +4 -2
- data/lib/desk_api/configuration.rb +24 -11
- data/lib/desk_api/resource.rb +15 -13
- data/lib/desk_api/version.rb +1 -1
- data/spec/desk_api/resource_spec.rb +29 -3
- metadata +36 -64
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 713992be5f19dc8df200df92c6fe9f5ad5b70d78
|
4
|
+
data.tar.gz: 3ac32cfaaf38ca81753bf778817e2f01b314d3e6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1bc6a19bfe95983cd026f0fdbb6345f47168fd89fc7e1d30918fd810a4f9f456839d58cd9546a1d219befb01d8334be637d7644117a9d60212c8650c31115722
|
7
|
+
data.tar.gz: 95d2944ebeeb92768fa99a617102487f467b9d55cd94e969105461e5adb98f355af7e996c3a3f5adfa9a85151158e484ab7d20a8af97c04a887d9f6b95a5af59
|
data/README.md
CHANGED
@@ -87,6 +87,30 @@ last_page = previous_page.last
|
|
87
87
|
first_page = last_page.first
|
88
88
|
```
|
89
89
|
|
90
|
+
### List params
|
91
|
+
|
92
|
+
Some lists allow for additional params like [cases](http://dev.desk.com/API/cases/#list). This allows you to filter the cases endpoint by using a `company_id`, `customer_id` or `filter_id` list param.
|
93
|
+
|
94
|
+
```ruby
|
95
|
+
# fetch cases for the company with id 1
|
96
|
+
companys_cases = DeskApi.cases(company_id: 1)
|
97
|
+
|
98
|
+
# fetch cases for the customer with id 1
|
99
|
+
customers_cases = DeskApi.cases(customer_id: 1)
|
100
|
+
|
101
|
+
# fetch cases for the filter with id 1
|
102
|
+
filters_cases = DeskApi.cases(filter_id: 1)
|
103
|
+
```
|
104
|
+
|
105
|
+
### Sorting
|
106
|
+
|
107
|
+
A recent update on APIv2 now imposes a maximum page limit. This is why sorting got very important and now you can even sort the list endpoints like [cases](http://dev.desk.com/API/cases/#list).
|
108
|
+
|
109
|
+
```ruby
|
110
|
+
# fetch cases sorted by updated_at direction desc
|
111
|
+
sorted_cases = DeskApi.cases(sort_field: :updated_at, sort_direction: :desc)
|
112
|
+
```
|
113
|
+
|
90
114
|
### Links
|
91
115
|
|
92
116
|
Pagination is pretty obvious but the cool part about pagination or rather resources is the auto-linking. As soon as the resource has a link defined, it'll be navigatable:
|
@@ -96,11 +120,11 @@ Pagination is pretty obvious but the cool part about pagination or rather resour
|
|
96
120
|
customer = DeskApi.cases.entries.first.customer
|
97
121
|
|
98
122
|
# who sent the first outbound reply of the first email
|
99
|
-
user_name = DeskApi.cases.entries.select
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
123
|
+
user_name = DeskApi.cases.entries.select do |my_case|
|
124
|
+
my_case.type == 'email'
|
125
|
+
end.first.replies.entries.select do |reply|
|
126
|
+
reply.direction == 'out'
|
127
|
+
end.first.sent_by.name
|
104
128
|
```
|
105
129
|
|
106
130
|
### Lazy loading
|
data/desk_api.gemspec
CHANGED
@@ -20,15 +20,13 @@ Gem::Specification.new do |gem|
|
|
20
20
|
gem.extra_rdoc_files = ['README.md']
|
21
21
|
gem.rdoc_options = ['--line-numbers', '--inline--source', '--title', 'desk.rb']
|
22
22
|
|
23
|
-
gem.add_runtime_dependency('
|
24
|
-
gem.add_runtime_dependency('
|
25
|
-
gem.add_runtime_dependency('
|
26
|
-
gem.add_runtime_dependency('addressable')
|
27
|
-
gem.add_runtime_dependency('hashie')
|
23
|
+
gem.add_runtime_dependency('faraday_middleware', '~> 0.8.0')
|
24
|
+
gem.add_runtime_dependency('simple_oauth', '~> 0.1')
|
25
|
+
gem.add_runtime_dependency('addressable', '~> 2.3')
|
28
26
|
|
29
|
-
gem.add_development_dependency('
|
30
|
-
gem.add_development_dependency('
|
31
|
-
gem.add_development_dependency('vcr')
|
32
|
-
gem.add_development_dependency('simplecov')
|
33
|
-
gem.add_development_dependency('coveralls')
|
27
|
+
gem.add_development_dependency('rake', '~> 0.9')
|
28
|
+
gem.add_development_dependency('rspec', '~> 2.6')
|
29
|
+
gem.add_development_dependency('vcr', '~> 2.0')
|
30
|
+
gem.add_development_dependency('simplecov', '~> 0.7')
|
31
|
+
gem.add_development_dependency('coveralls', '~> 0.6')
|
34
32
|
end
|
data/lib/desk_api/client.rb
CHANGED
@@ -36,8 +36,10 @@ class DeskApi::Client
|
|
36
36
|
|
37
37
|
private
|
38
38
|
# If the method is missing create a resource
|
39
|
-
def method_missing(method,
|
40
|
-
DeskApi::Resource.new(self, DeskApi::Resource.build_self_link("/api/v2/#{method}"))
|
39
|
+
def method_missing(method, params = {}, &block)
|
40
|
+
DeskApi::Resource.new(self, DeskApi::Resource.build_self_link("/api/v2/#{method}")).tap do |res|
|
41
|
+
res.query_params = params
|
42
|
+
end
|
41
43
|
end
|
42
44
|
|
43
45
|
def request(method, path, params = {})
|
@@ -1,5 +1,6 @@
|
|
1
|
-
require 'faraday'
|
2
1
|
require 'faraday_middleware'
|
2
|
+
require 'faraday_middleware/version'
|
3
|
+
require 'faraday_middleware/response/parse_dates'
|
3
4
|
|
4
5
|
require 'desk_api/default'
|
5
6
|
require 'desk_api/request/retry'
|
@@ -37,16 +38,28 @@ module DeskApi::Configuration
|
|
37
38
|
|
38
39
|
def middleware
|
39
40
|
@middleware ||= Proc.new do |builder|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
41
|
+
if Gem::Version.new(FaradayMiddleware::VERSION) >= Gem::Version.new('0.9.0')
|
42
|
+
builder.request :json
|
43
|
+
builder.request :basic_authentication, @username, @password if basic_auth.values.all?
|
44
|
+
builder.request :oauth, oauth if oauth.values.all?
|
45
|
+
builder.request :retry
|
46
|
+
|
47
|
+
builder.response :dates
|
48
|
+
builder.response :raise_desk_error, DeskApi::Error::ClientError
|
49
|
+
builder.response :raise_desk_error, DeskApi::Error::ServerError
|
50
|
+
builder.response :json, content_type: /application\/json/
|
51
|
+
else
|
52
|
+
builder.use FaradayMiddleware::EncodeJson
|
53
|
+
builder.use Faraday::Request::BasicAuthentication, @username, @password if basic_auth.values.all?
|
54
|
+
builder.use FaradayMiddleware::OAuth, oauth if oauth.values.all?
|
55
|
+
builder.use DeskApi::Request::Retry
|
56
|
+
|
57
|
+
builder.use FaradayMiddleware::ParseDates
|
58
|
+
builder.use DeskApi::Response::RaiseError, DeskApi::Error::ClientError
|
59
|
+
builder.use DeskApi::Response::RaiseError, DeskApi::Error::ServerError
|
60
|
+
builder.use FaradayMiddleware::ParseJson, content_type: /application\/json/
|
61
|
+
end
|
62
|
+
|
50
63
|
builder.adapter Faraday.default_adapter
|
51
64
|
end
|
52
65
|
end
|
data/lib/desk_api/resource.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
class DeskApi::Resource
|
2
2
|
class << self
|
3
|
-
def build_self_link(link)
|
3
|
+
def build_self_link(link, params = {})
|
4
4
|
link = {'href'=>link} if link.kind_of?(String)
|
5
5
|
{'_links'=>{'self'=>link}}
|
6
6
|
end
|
@@ -76,18 +76,6 @@ class DeskApi::Resource
|
|
76
76
|
end
|
77
77
|
end
|
78
78
|
|
79
|
-
protected
|
80
|
-
|
81
|
-
def clean_base_url
|
82
|
-
Addressable::URI.parse(href).path.gsub(/\/(search|\d+)$/, '')
|
83
|
-
end
|
84
|
-
|
85
|
-
def exec!(reload = false)
|
86
|
-
return self if @_loaded and !reload
|
87
|
-
@_definition, @_loaded = @_client.get(href).body, true
|
88
|
-
self
|
89
|
-
end
|
90
|
-
|
91
79
|
def query_params
|
92
80
|
Addressable::URI.parse(href).query_values || {}
|
93
81
|
end
|
@@ -99,6 +87,8 @@ protected
|
|
99
87
|
def query_params=(params = {})
|
100
88
|
return href if params.empty?
|
101
89
|
|
90
|
+
params.keys.each{ |key| params[key] = params[key].join(',') if params[key].is_a?(Array) }
|
91
|
+
|
102
92
|
uri = Addressable::URI.parse(href)
|
103
93
|
params = (uri.query_values || {}).merge(params)
|
104
94
|
|
@@ -108,6 +98,18 @@ protected
|
|
108
98
|
self.href = uri.to_s
|
109
99
|
end
|
110
100
|
|
101
|
+
protected
|
102
|
+
|
103
|
+
def clean_base_url
|
104
|
+
Addressable::URI.parse(href).path.gsub(/\/(search|\d+)$/, '')
|
105
|
+
end
|
106
|
+
|
107
|
+
def exec!(reload = false)
|
108
|
+
return self if @_loaded and !reload
|
109
|
+
@_definition, @_loaded = @_client.get(href).body, true
|
110
|
+
self
|
111
|
+
end
|
112
|
+
|
111
113
|
private
|
112
114
|
attr_accessor :_client, :_loaded, :_changed, :_definition
|
113
115
|
|
data/lib/desk_api/version.rb
CHANGED
@@ -17,6 +17,28 @@ describe DeskApi::Resource do
|
|
17
17
|
it 'sets up the link to self' do
|
18
18
|
subject.articles.href.should_not be_nil
|
19
19
|
end
|
20
|
+
|
21
|
+
context 'additional options' do
|
22
|
+
it 'allows for sorting options' do
|
23
|
+
cases = subject.cases(sort_field: :updated_at, sort_direction: :asc)
|
24
|
+
cases.href.should eq('/api/v2/cases?sort_direction=asc&sort_field=updated_at')
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'allows to specify arbitrary params' do
|
28
|
+
subject.cases(company_id: 1).href.should eq('/api/v2/cases?company_id=1')
|
29
|
+
subject.cases(customer_id: 1).href.should eq('/api/v2/cases?customer_id=1')
|
30
|
+
subject.cases(filter_id: 1).href.should eq('/api/v2/cases?filter_id=1')
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'allows to specify embeddables' do
|
34
|
+
subject.cases(embed: :customer).href.should eq('/api/v2/cases?embed=customer')
|
35
|
+
subject.cases(embed: [:customer, :assigned_user]).href.should eq('/api/v2/cases?embed=customer%2Cassigned_user')
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'does not automatically load the resource' do
|
39
|
+
subject.cases(company_id: 1).instance_variable_get(:@_loaded).should be_false
|
40
|
+
end
|
41
|
+
end
|
20
42
|
end
|
21
43
|
|
22
44
|
context '#exec!', :vcr do
|
@@ -160,9 +182,13 @@ describe DeskApi::Resource do
|
|
160
182
|
@stubs ||= Faraday::Adapter::Test::Stubs.new
|
161
183
|
@client ||= DeskApi::Client.new(DeskApi::CONFIG).tap do |client|
|
162
184
|
client.middleware = Proc.new do |builder|
|
163
|
-
|
164
|
-
|
165
|
-
|
185
|
+
if Gem::Version.new(FaradayMiddleware::VERSION) >= Gem::Version.new('0.9.0')
|
186
|
+
builder.response :dates
|
187
|
+
builder.response :json, content_type: /application\/json/
|
188
|
+
else
|
189
|
+
builder.use FaradayMiddleware::ParseDates
|
190
|
+
builder.use FaradayMiddleware::ParseJson, content_type: /application\/json/
|
191
|
+
end
|
166
192
|
builder.adapter :test, @stubs
|
167
193
|
end
|
168
194
|
end
|
metadata
CHANGED
@@ -1,155 +1,127 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: desk_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Thomas Stachl
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-02-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: faraday
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - '>='
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '0'
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - '>='
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '0'
|
27
13
|
- !ruby/object:Gem::Dependency
|
28
14
|
name: faraday_middleware
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|
30
16
|
requirements:
|
31
|
-
- -
|
17
|
+
- - ~>
|
32
18
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
19
|
+
version: 0.8.0
|
34
20
|
type: :runtime
|
35
21
|
prerelease: false
|
36
22
|
version_requirements: !ruby/object:Gem::Requirement
|
37
23
|
requirements:
|
38
|
-
- -
|
24
|
+
- - ~>
|
39
25
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
26
|
+
version: 0.8.0
|
41
27
|
- !ruby/object:Gem::Dependency
|
42
28
|
name: simple_oauth
|
43
29
|
requirement: !ruby/object:Gem::Requirement
|
44
30
|
requirements:
|
45
|
-
- -
|
31
|
+
- - ~>
|
46
32
|
- !ruby/object:Gem::Version
|
47
|
-
version: '0'
|
33
|
+
version: '0.1'
|
48
34
|
type: :runtime
|
49
35
|
prerelease: false
|
50
36
|
version_requirements: !ruby/object:Gem::Requirement
|
51
37
|
requirements:
|
52
|
-
- -
|
38
|
+
- - ~>
|
53
39
|
- !ruby/object:Gem::Version
|
54
|
-
version: '0'
|
40
|
+
version: '0.1'
|
55
41
|
- !ruby/object:Gem::Dependency
|
56
42
|
name: addressable
|
57
43
|
requirement: !ruby/object:Gem::Requirement
|
58
44
|
requirements:
|
59
|
-
- -
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '0'
|
62
|
-
type: :runtime
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - '>='
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: '0'
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: hashie
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
-
requirements:
|
73
|
-
- - '>='
|
45
|
+
- - ~>
|
74
46
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
47
|
+
version: '2.3'
|
76
48
|
type: :runtime
|
77
49
|
prerelease: false
|
78
50
|
version_requirements: !ruby/object:Gem::Requirement
|
79
51
|
requirements:
|
80
|
-
- -
|
52
|
+
- - ~>
|
81
53
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
54
|
+
version: '2.3'
|
83
55
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
56
|
+
name: rake
|
85
57
|
requirement: !ruby/object:Gem::Requirement
|
86
58
|
requirements:
|
87
|
-
- -
|
59
|
+
- - ~>
|
88
60
|
- !ruby/object:Gem::Version
|
89
|
-
version: '0'
|
61
|
+
version: '0.9'
|
90
62
|
type: :development
|
91
63
|
prerelease: false
|
92
64
|
version_requirements: !ruby/object:Gem::Requirement
|
93
65
|
requirements:
|
94
|
-
- -
|
66
|
+
- - ~>
|
95
67
|
- !ruby/object:Gem::Version
|
96
|
-
version: '0'
|
68
|
+
version: '0.9'
|
97
69
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
70
|
+
name: rspec
|
99
71
|
requirement: !ruby/object:Gem::Requirement
|
100
72
|
requirements:
|
101
|
-
- -
|
73
|
+
- - ~>
|
102
74
|
- !ruby/object:Gem::Version
|
103
|
-
version: '
|
75
|
+
version: '2.6'
|
104
76
|
type: :development
|
105
77
|
prerelease: false
|
106
78
|
version_requirements: !ruby/object:Gem::Requirement
|
107
79
|
requirements:
|
108
|
-
- -
|
80
|
+
- - ~>
|
109
81
|
- !ruby/object:Gem::Version
|
110
|
-
version: '
|
82
|
+
version: '2.6'
|
111
83
|
- !ruby/object:Gem::Dependency
|
112
84
|
name: vcr
|
113
85
|
requirement: !ruby/object:Gem::Requirement
|
114
86
|
requirements:
|
115
|
-
- -
|
87
|
+
- - ~>
|
116
88
|
- !ruby/object:Gem::Version
|
117
|
-
version: '0'
|
89
|
+
version: '2.0'
|
118
90
|
type: :development
|
119
91
|
prerelease: false
|
120
92
|
version_requirements: !ruby/object:Gem::Requirement
|
121
93
|
requirements:
|
122
|
-
- -
|
94
|
+
- - ~>
|
123
95
|
- !ruby/object:Gem::Version
|
124
|
-
version: '0'
|
96
|
+
version: '2.0'
|
125
97
|
- !ruby/object:Gem::Dependency
|
126
98
|
name: simplecov
|
127
99
|
requirement: !ruby/object:Gem::Requirement
|
128
100
|
requirements:
|
129
|
-
- -
|
101
|
+
- - ~>
|
130
102
|
- !ruby/object:Gem::Version
|
131
|
-
version: '0'
|
103
|
+
version: '0.7'
|
132
104
|
type: :development
|
133
105
|
prerelease: false
|
134
106
|
version_requirements: !ruby/object:Gem::Requirement
|
135
107
|
requirements:
|
136
|
-
- -
|
108
|
+
- - ~>
|
137
109
|
- !ruby/object:Gem::Version
|
138
|
-
version: '0'
|
110
|
+
version: '0.7'
|
139
111
|
- !ruby/object:Gem::Dependency
|
140
112
|
name: coveralls
|
141
113
|
requirement: !ruby/object:Gem::Requirement
|
142
114
|
requirements:
|
143
|
-
- -
|
115
|
+
- - ~>
|
144
116
|
- !ruby/object:Gem::Version
|
145
|
-
version: '0'
|
117
|
+
version: '0.6'
|
146
118
|
type: :development
|
147
119
|
prerelease: false
|
148
120
|
version_requirements: !ruby/object:Gem::Requirement
|
149
121
|
requirements:
|
150
|
-
- -
|
122
|
+
- - ~>
|
151
123
|
- !ruby/object:Gem::Version
|
152
|
-
version: '0'
|
124
|
+
version: '0.6'
|
153
125
|
description: This is a lightweight, flexible ruby gem to interact with the desk.com
|
154
126
|
REST API. It allows to create, read and delete resources available through the API
|
155
127
|
endpoints. It can be used either with OAuth or HTTP Basic Authentication.
|