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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fa23de82e1ce07590d68a76f0119c95cb9e73a4b
4
- data.tar.gz: 666410ec133cd3443c5acc6d40ce4b29f5c53d21
3
+ metadata.gz: 713992be5f19dc8df200df92c6fe9f5ad5b70d78
4
+ data.tar.gz: 3ac32cfaaf38ca81753bf778817e2f01b314d3e6
5
5
  SHA512:
6
- metadata.gz: 0bf1e2029ddb61613d7db4505759177b84e3ce64026a8f0510fbd62223cfe24caa879d50599a10c55e9acb5422dcba2616a64efa3c13308657c7c0f0051fe052
7
- data.tar.gz: 9264c470bc23b8a33cd852ceeb49c1c2b8d210316f13d0a9010fca549a4d869c54f77328923b0b0c6cc52dce622bbf7383874c8f202aaf1afa842a85886d66be
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{ |my_case|
100
- my_case.type == 'email'
101
- }.first.replies.entries.select{ |reply|
102
- reply.direction == 'out'
103
- }.first.sent_by.name
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('faraday')
24
- gem.add_runtime_dependency('faraday_middleware')
25
- gem.add_runtime_dependency('simple_oauth')
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('rspec')
30
- gem.add_development_dependency('rake')
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
@@ -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, *args, &block)
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
- builder.request :json
41
- builder.request :basic_auth, @username, @password if basic_auth.values.all?
42
- builder.request :oauth, oauth if oauth.values.all?
43
- builder.request :retry
44
-
45
- builder.response :dates
46
- builder.response :raise_desk_error, DeskApi::Error::ClientError
47
- builder.response :raise_desk_error, DeskApi::Error::ServerError
48
- builder.response :json, content_type: /application\/json/
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
@@ -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
 
@@ -1,3 +1,3 @@
1
1
  module DeskApi
2
- VERSION = '0.5.4'
2
+ VERSION = '0.5.5'
3
3
  end
@@ -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
- builder.response :mashify
164
- builder.response :dates
165
- builder.response :json, content_type: /application\/json/
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
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-01-31 00:00:00.000000000 Z
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: '0'
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: '0'
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: '0'
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: '0'
54
+ version: '2.3'
83
55
  - !ruby/object:Gem::Dependency
84
- name: rspec
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: rake
70
+ name: rspec
99
71
  requirement: !ruby/object:Gem::Requirement
100
72
  requirements:
101
- - - '>='
73
+ - - ~>
102
74
  - !ruby/object:Gem::Version
103
- version: '0'
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: '0'
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.