limdesk_api 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +46 -22
- data/lib/limdesk_api/activity.rb +19 -22
- data/lib/limdesk_api/client.rb +14 -40
- data/lib/limdesk_api/limdesk_object.rb +67 -0
- data/lib/limdesk_api/sale.rb +18 -0
- data/lib/limdesk_api/ticket.rb +65 -58
- data/lib/limdesk_api/version.rb +1 -1
- data/lib/limdesk_api.rb +123 -58
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 20f13df68d98955d7f47adea62e02b95bb9f5c4a
|
4
|
+
data.tar.gz: 7a228e94c25393b16c9d395ac86edf8100e2033d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f15bcf4626b762787623ae4b1847b19464e3af5e0c3af7eaeb353629bf3f2b6bfdbc39858217aa2e7ff32d1c4dd88d34f743615df3c1cff749288b4e2028c5a5
|
7
|
+
data.tar.gz: 60beb84f48914675c6244c9c3dcb4cf6b4029535a2faf024a47bcd22a1a0088bdb6b5f68fb3f61a5dbe06be555d3fc21684f034e17ed0461770362763a84e909
|
data/README.md
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# LimdeskApi
|
2
2
|
|
3
|
+
[![Code Climate](https://codeclimate.com/github/limtel/limdesk_api/badges/gpa.svg)](https://codeclimate.com/github/limtel/limdesk_api)
|
4
|
+
|
3
5
|
## Installation
|
4
6
|
|
5
7
|
Add this line to your application's Gemfile:
|
@@ -51,22 +53,23 @@ ticket.title
|
|
51
53
|
ticket.client.name
|
52
54
|
"John Smith"
|
53
55
|
|
54
|
-
ticket.answer
|
55
|
-
ticket.answer
|
56
|
+
ticket.answer content: 'this is a private comment', answer_type: :priv
|
57
|
+
ticket.answer content: 'dear customer, it is solved', answer_type: :pub
|
56
58
|
|
57
|
-
ticket.close
|
59
|
+
ticket.close content: 'its solved', type: :resolved
|
58
60
|
ticket.reopen
|
59
|
-
ticket.close
|
61
|
+
ticket.close content: 'spam', type: :rejected
|
60
62
|
|
61
|
-
ticket2 = LimdeskApi::Ticket.create title
|
63
|
+
ticket2 = LimdeskApi::Ticket.create :title => "problem",
|
64
|
+
:content => "clients probem",
|
65
|
+
:reported_by => :mail,
|
66
|
+
:client_id => -1
|
62
67
|
|
63
|
-
# reported_by can be mail, phone, other, chat
|
68
|
+
# reported_by can be :mail, :phone, :other, :chat
|
64
69
|
# client_id => -1 means "new anonymous clinet"
|
65
70
|
|
66
|
-
ticket2.ok?
|
67
|
-
true
|
68
71
|
ticket2.title
|
69
|
-
"
|
72
|
+
"sample ticket 2"
|
70
73
|
|
71
74
|
```
|
72
75
|
|
@@ -76,11 +79,10 @@ ticket2.title
|
|
76
79
|
|
77
80
|
acts = LimdeskApi::Activity.all
|
78
81
|
|
79
|
-
act = LimdeskApi::Activity.create
|
80
|
-
|
82
|
+
act = LimdeskApi::Activity.create content: "client has logged into website",
|
83
|
+
client_id: 55
|
81
84
|
```
|
82
85
|
|
83
|
-
|
84
86
|
#### Clients
|
85
87
|
|
86
88
|
|
@@ -91,14 +93,11 @@ cls = LimdeskApi::Client.all
|
|
91
93
|
cls.first.name
|
92
94
|
"John Smith"
|
93
95
|
|
94
|
-
client = LimdeskApi::Client.create
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
client.ok?
|
100
|
-
true
|
101
|
-
|
96
|
+
client = LimdeskApi::Client.create name: "John Smith",
|
97
|
+
nippesel: "15012406496",
|
98
|
+
phone: "223111789",
|
99
|
+
email: "email@example.com",
|
100
|
+
adress: "Plain Street 149 85-058 Warsaw"
|
102
101
|
client.delete!
|
103
102
|
true
|
104
103
|
|
@@ -107,6 +106,31 @@ client2.contacts.first
|
|
107
106
|
|
108
107
|
```
|
109
108
|
|
109
|
+
#### Sales
|
110
|
+
|
111
|
+
```ruby
|
112
|
+
|
113
|
+
sales=LimdeskApi::Sale.all
|
114
|
+
|
115
|
+
sale = sales.first
|
116
|
+
|
117
|
+
sale.name
|
118
|
+
"Hosting service 1yr"
|
119
|
+
|
120
|
+
sale.delete!
|
121
|
+
true
|
122
|
+
|
123
|
+
sale2 = LimdeskApi::Sale.create client_id: 65464,
|
124
|
+
name: "Shoes",
|
125
|
+
price: 99.99,
|
126
|
+
amount: 1,
|
127
|
+
sold: "2014-10-20 20:00:00"
|
128
|
+
|
129
|
+
sale2.client.name
|
130
|
+
"John Smith"
|
131
|
+
|
132
|
+
```
|
133
|
+
|
110
134
|
## TODO
|
111
135
|
|
112
136
|
* tests
|
@@ -114,8 +138,8 @@ client2.contacts.first
|
|
114
138
|
|
115
139
|
## Contributing
|
116
140
|
|
117
|
-
1. Fork it ( https://github.com/
|
141
|
+
1. Fork it ( https://github.com/limtel/limdesk/fork )
|
118
142
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
119
143
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
120
144
|
4. Push to the branch (`git push origin my-new-feature`)
|
121
|
-
5. Create a new Pull Request
|
145
|
+
5. Create a new Pull Request
|
data/lib/limdesk_api/activity.rb
CHANGED
@@ -1,31 +1,28 @@
|
|
1
1
|
module LimdeskApi
|
2
|
-
|
3
|
-
class Activity <
|
4
|
-
|
2
|
+
# Limdesk Activity
|
3
|
+
class Activity < LimdeskObject
|
4
|
+
NOT_IMPLEMENTED = 'activity currently does not support this call'
|
5
|
+
# Creates a new Activity
|
6
|
+
#
|
7
|
+
# @param [Hash] params the options to create an activity with
|
8
|
+
# @option params [String] :content activity content
|
9
|
+
# @option params [String] :client_id client (optional)
|
10
|
+
#
|
11
|
+
# @return [LimdeskApi::Activity]
|
5
12
|
def self.create(params)
|
6
|
-
|
7
|
-
Activity.new response
|
13
|
+
super
|
8
14
|
end
|
9
15
|
|
10
|
-
def self.
|
11
|
-
|
12
|
-
results = {}
|
13
|
-
activities = []
|
14
|
-
loop do
|
15
|
-
unless results[:total_pages].nil?
|
16
|
-
raise StopIteration if results[:total_pages] == results[:page]
|
17
|
-
end
|
18
|
-
results = LimdeskApi.get_many(query_options)
|
19
|
-
query_options[:page] += 1
|
20
|
-
activities+=results[:objects].map { |x| Activity.new x }
|
21
|
-
end
|
22
|
-
activities
|
16
|
+
def self.get(*)
|
17
|
+
fail Activity::NOT_IMPLEMENTED
|
23
18
|
end
|
24
19
|
|
25
|
-
def
|
26
|
-
|
20
|
+
def refresh!
|
21
|
+
fail Activity::NOT_IMPLEMENTED
|
27
22
|
end
|
28
23
|
|
24
|
+
def delete!
|
25
|
+
fail Activity::NOT_IMPLEMENTED
|
26
|
+
end
|
29
27
|
end
|
30
|
-
|
31
|
-
end
|
28
|
+
end
|
data/lib/limdesk_api/client.rb
CHANGED
@@ -1,44 +1,18 @@
|
|
1
1
|
module LimdeskApi
|
2
|
-
|
3
|
-
class Client <
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
2
|
+
# Client
|
3
|
+
class Client < LimdeskObject
|
4
|
+
# Creates a new Client
|
5
|
+
#
|
6
|
+
# @param [Hash] params the options to create a client with
|
7
|
+
# @option params [String] :name client's name
|
8
|
+
# @option params [String] :nippesel unique ID like VATID, passport
|
9
|
+
# @option params [String] :phone client's phone number
|
10
|
+
# @option params [String] :email client's email address
|
11
|
+
# @option params [String] :address client's personal/company address
|
12
|
+
#
|
13
|
+
# @return [LimdeskApi::Client]
|
10
14
|
def self.create(params)
|
11
|
-
|
12
|
-
Client.new response
|
13
|
-
end
|
14
|
-
|
15
|
-
def self.all
|
16
|
-
query_options = { page: 1, object: :client }
|
17
|
-
results = {}
|
18
|
-
clients = []
|
19
|
-
loop do
|
20
|
-
unless results[:total_pages].nil?
|
21
|
-
raise StopIteration if results[:total_pages] == results[:page]
|
22
|
-
end
|
23
|
-
results = LimdeskApi.get_many(query_options)
|
24
|
-
query_options[:page] += 1
|
25
|
-
clients+=results[:objects].map { |x| Client.new x }
|
26
|
-
end
|
27
|
-
clients
|
28
|
-
end
|
29
|
-
|
30
|
-
def ok?
|
31
|
-
error == true ? false : true
|
32
|
-
end
|
33
|
-
|
34
|
-
def refresh!
|
35
|
-
self.marshal_load(Client.get(self['id']).marshal_dump)
|
36
|
-
end
|
37
|
-
|
38
|
-
def delete!
|
39
|
-
response = LimdeskApi.delete( id: self.id, object: :client )
|
40
|
-
return not(response[:error])
|
15
|
+
super
|
41
16
|
end
|
42
|
-
|
43
17
|
end
|
44
|
-
end
|
18
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
module LimdeskApi
|
2
|
+
# This class represents a LimdeskAPI object.
|
3
|
+
# Ohter classes, like Ticket, Sale and Client, inherit from it.
|
4
|
+
class LimdeskObject < RecursiveOpenStruct
|
5
|
+
# Gets a Object form LimdeskAPI by it's ID
|
6
|
+
#
|
7
|
+
# @param [Integer] id requested object's id
|
8
|
+
#
|
9
|
+
# @return [LimdeskApi::Ticket]
|
10
|
+
# @return [LimdeskApi::Client]
|
11
|
+
# @return [LimdeskApi::Sale]
|
12
|
+
def self.get(id)
|
13
|
+
response = LimdeskApi.get_one(object: self.object_symbol, id: id)
|
14
|
+
response ? self.new(response) : nil
|
15
|
+
end
|
16
|
+
|
17
|
+
# Creates an object by LimdeskAPI
|
18
|
+
#
|
19
|
+
# @param [Hash] params new object data (depending on object's type)
|
20
|
+
#
|
21
|
+
# @return [LimdeskApi::Ticket]
|
22
|
+
# @return [LimdeskApi::Client]
|
23
|
+
# @return [LimdeskApi::Sale]
|
24
|
+
def self.create(params)
|
25
|
+
response = LimdeskApi.create(object: self.object_symbol, params: params)
|
26
|
+
self.new response
|
27
|
+
end
|
28
|
+
|
29
|
+
# Gets all objects of a type from LimdeskAPI
|
30
|
+
#
|
31
|
+
# @return [Array<LimdeskApi::Ticket>]
|
32
|
+
# @return [Array<LimdeskApi::Client>]
|
33
|
+
# @return [Array<LimdeskApi::Sale>]
|
34
|
+
# @return [Array<LimdeskApi::Activity>]
|
35
|
+
def self.all
|
36
|
+
LimdeskApi.get_all(self.object_symbol).map { |obj| self.new obj }
|
37
|
+
end
|
38
|
+
|
39
|
+
# Helper - get class name as a symbol
|
40
|
+
# @return [Symbol]
|
41
|
+
def self.object_symbol
|
42
|
+
self.name.downcase.split(':').last.to_sym
|
43
|
+
end
|
44
|
+
|
45
|
+
# Force object to refresh itself from LimdeskAPI
|
46
|
+
#
|
47
|
+
# @return [LimdeskApi::Ticket]
|
48
|
+
# @return [LimdeskApi::Client]
|
49
|
+
# @return [LimdeskApi::Sale]
|
50
|
+
def refresh!
|
51
|
+
self.marshal_load(self.class.get(self['id']).marshal_dump)
|
52
|
+
end
|
53
|
+
|
54
|
+
# Delete an object by LimdeskAPI
|
55
|
+
#
|
56
|
+
# @return [Boolean]
|
57
|
+
def delete!
|
58
|
+
LimdeskApi.delete(id: self['id'], object: object_symbol)
|
59
|
+
end
|
60
|
+
|
61
|
+
# Helper - get class name as a symbol
|
62
|
+
# @return [Symbol]
|
63
|
+
def object_symbol
|
64
|
+
self.class.name.downcase.split(':').last.to_sym
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module LimdeskApi
|
2
|
+
# Client's sales registry
|
3
|
+
class Sale < LimdeskObject
|
4
|
+
# Creates a new Client's Sale
|
5
|
+
#
|
6
|
+
# @param [Hash] params the options to create a sale with
|
7
|
+
# @option params [String] :client_id client's id
|
8
|
+
# @option params [String] :name sales name ("nice shoes")
|
9
|
+
# @option params [Float] :price price of one item
|
10
|
+
# @option params [DateTime] :sold sales date
|
11
|
+
# @option params [DateTime] :expire expiration date (time-limted services)
|
12
|
+
#
|
13
|
+
# @return [LimdeskApi::Sale]
|
14
|
+
def self.create(params)
|
15
|
+
super
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/lib/limdesk_api/ticket.rb
CHANGED
@@ -1,89 +1,96 @@
|
|
1
1
|
module LimdeskApi
|
2
|
-
|
3
|
-
class Ticket <
|
4
|
-
|
2
|
+
# Client's ticket
|
3
|
+
class Ticket < LimdeskObject
|
4
|
+
# map close reason symbols to LimdeskAPI's ids
|
5
5
|
CLOSE_TYPES = {
|
6
6
|
rejected: 2,
|
7
|
-
resolved: 1
|
7
|
+
resolved: 1
|
8
8
|
}
|
9
|
-
|
9
|
+
# map media symbols to LimdeskAPI's ids
|
10
10
|
MEDIA_TYPES = {
|
11
11
|
mail: 1,
|
12
12
|
chat: 2,
|
13
13
|
phone: 3,
|
14
|
-
other: 4
|
14
|
+
other: 4
|
15
15
|
}
|
16
|
-
|
16
|
+
# map answer symbols to LimdeskAPI's ids
|
17
17
|
ANSWER_TYPES = {
|
18
18
|
pub: 0,
|
19
19
|
priv: 1
|
20
20
|
}
|
21
21
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
22
|
+
# Creates a new Ticket
|
23
|
+
#
|
24
|
+
# @param [Hash] params the options to create a ticket with
|
25
|
+
# @option params [Symbol] :reported_by media :mail, :chat, :phone, :other
|
26
|
+
# @option params [String] :title ticket's title
|
27
|
+
# @option params [String] :content ticket's content
|
28
|
+
# @option params [Integer] :client_id ticket's client id
|
29
|
+
#
|
30
|
+
# @return [LimdeskApi::Ticket]
|
27
31
|
def self.create(params)
|
28
|
-
|
29
|
-
params[
|
30
|
-
|
31
|
-
Ticket.new response
|
32
|
-
end
|
33
|
-
|
34
|
-
def self.all
|
35
|
-
query_options = { page: 1, object: :ticket }
|
36
|
-
results = {}
|
37
|
-
tickets = []
|
38
|
-
loop do
|
39
|
-
unless results[:total_pages].nil?
|
40
|
-
raise StopIteration if results[:total_pages] == results[:page]
|
41
|
-
end
|
42
|
-
results = LimdeskApi.get_many(query_options)
|
43
|
-
query_options[:page] += 1
|
44
|
-
tickets+=results[:objects].map { |x| Ticket.new x }
|
45
|
-
end
|
46
|
-
tickets
|
47
|
-
end
|
48
|
-
|
49
|
-
def ok?
|
50
|
-
error == true ? false : true
|
32
|
+
fail 'BadMediaType' unless Ticket::MEDIA_TYPES.keys.include?(params[:reported_by])
|
33
|
+
params['reportedBy'] = Ticket::MEDIA_TYPES[params.delete(:reported_by)]
|
34
|
+
super
|
51
35
|
end
|
52
36
|
|
37
|
+
# Refreshes the object from the server
|
38
|
+
# @return [LimdeskApi::Ticket]
|
53
39
|
def refresh!
|
54
40
|
self.marshal_load(Ticket.get(self['number']).marshal_dump)
|
55
41
|
end
|
56
42
|
|
43
|
+
# Closes a ticket
|
44
|
+
#
|
45
|
+
# @param [Hash] params the options to colose ticket with
|
46
|
+
# @option params [Symbol] :type :rejected or :resolved
|
47
|
+
# @option params [String] :content comment before closing
|
48
|
+
#
|
49
|
+
# @return [Boolean]
|
57
50
|
def close(params)
|
58
|
-
|
59
|
-
|
60
|
-
response = LimdeskApi.put(
|
61
|
-
|
62
|
-
|
63
|
-
|
51
|
+
fail 'BadCloseType' unless Ticket::CLOSE_TYPES.keys.include?(params[:type])
|
52
|
+
fail 'NoContentGiven' unless params[:content]
|
53
|
+
response = LimdeskApi.put(
|
54
|
+
id: self['number'],
|
55
|
+
object: :ticket,
|
56
|
+
action: :close,
|
57
|
+
params: {
|
58
|
+
content: params[:content],
|
59
|
+
type: Ticket::CLOSE_TYPES[params[:type]] })
|
64
60
|
refresh!
|
65
|
-
|
61
|
+
response
|
66
62
|
end
|
67
63
|
|
64
|
+
# Reopens a closed ticket
|
65
|
+
#
|
66
|
+
# @return [Boolean]
|
68
67
|
def reopen
|
69
|
-
response = LimdeskApi.put(
|
70
|
-
|
71
|
-
|
72
|
-
|
68
|
+
response = LimdeskApi.put(
|
69
|
+
id: self.number,
|
70
|
+
object: :ticket,
|
71
|
+
action: :reopen,
|
72
|
+
params: {})
|
73
73
|
refresh!
|
74
|
-
|
75
|
-
end
|
74
|
+
response
|
75
|
+
end
|
76
76
|
|
77
|
+
# Answeres a ticket
|
78
|
+
#
|
79
|
+
# @param [Hash] params the options to create a answer with
|
80
|
+
# @option params [Symbol] :answer_type :priv comment or a :pub answer
|
81
|
+
# @option params [String] :content answer or content body
|
82
|
+
#
|
83
|
+
# @return [Boolean]
|
77
84
|
def answer(params)
|
78
|
-
|
79
|
-
params[
|
80
|
-
response = LimdeskApi.post_simple(
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
85
|
+
fail 'BadAnswerType' unless Ticket::ANSWER_TYPES.keys.include?(params[:answer_type])
|
86
|
+
params['type'] = Ticket::ANSWER_TYPES[params.delete(:answer_type)]
|
87
|
+
response = LimdeskApi.post_simple(
|
88
|
+
id: self.number,
|
89
|
+
object: :ticket,
|
90
|
+
action: :answer,
|
91
|
+
params: params)
|
92
|
+
refresh!
|
93
|
+
response
|
86
94
|
end
|
87
|
-
|
88
95
|
end
|
89
|
-
end
|
96
|
+
end
|
data/lib/limdesk_api/version.rb
CHANGED
data/lib/limdesk_api.rb
CHANGED
@@ -1,129 +1,194 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
8
|
-
require
|
1
|
+
require 'faraday'
|
2
|
+
require 'recursive_open_struct'
|
3
|
+
require 'faraday_middleware'
|
4
|
+
require 'json'
|
5
|
+
require 'limdesk_api/version'
|
6
|
+
require 'limdesk_api/limdesk_object'
|
7
|
+
require 'limdesk_api/client'
|
8
|
+
require 'limdesk_api/activity'
|
9
|
+
require 'limdesk_api/ticket'
|
10
|
+
require 'limdesk_api/sale'
|
9
11
|
|
12
|
+
# LideskAPI Warapper
|
13
|
+
# Limdesk.com is a multichannel, web-based customer support solution.
|
14
|
+
# This gem lets you integrate your software using LimdeskAPI.
|
10
15
|
module LimdeskApi
|
11
|
-
|
16
|
+
# default endpoint
|
12
17
|
ENDPOINT = 'https://cloud.limdesk.com'
|
13
18
|
|
14
19
|
KNOWN_OBJS = {
|
15
20
|
ticket: :tickets,
|
16
21
|
activity: :activities,
|
17
22
|
client: :clients,
|
23
|
+
sale: :sales
|
18
24
|
}
|
19
25
|
|
26
|
+
# @example configure API access
|
27
|
+
# LimdeskApi.configure { |lim| lim.key = 'xxx'; lim.version = 1 }
|
20
28
|
def self.configure
|
21
29
|
yield self
|
22
|
-
@connection = Faraday.new(:
|
23
|
-
faraday.response :json, :
|
24
|
-
faraday.adapter Faraday.default_adapter
|
30
|
+
@connection = Faraday.new(url: ENDPOINT) do |faraday|
|
31
|
+
faraday.response :json, content_type: /\bjson$/
|
32
|
+
faraday.adapter Faraday.default_adapter
|
25
33
|
faraday.use Faraday::Response::Logger if @debug
|
26
34
|
end
|
27
35
|
@prefix = "/api/v#{@version}"
|
28
|
-
|
36
|
+
self
|
29
37
|
end
|
30
38
|
|
31
39
|
def self.key=(key)
|
32
|
-
|
40
|
+
@key = key
|
33
41
|
end
|
34
42
|
|
35
43
|
def self.version=(version)
|
36
|
-
|
44
|
+
@version = version
|
37
45
|
end
|
38
46
|
|
39
47
|
def self.debug=(debug)
|
40
|
-
|
48
|
+
@debug = debug
|
49
|
+
end
|
50
|
+
|
51
|
+
def self.generate_url(params)
|
52
|
+
url = [@prefix, LimdeskApi::KNOWN_OBJS[params[:object]]]
|
53
|
+
url.push params[:id] if params[:id]
|
54
|
+
url.push params[:action] if params[:action]
|
55
|
+
url.join('/')
|
56
|
+
end
|
57
|
+
|
58
|
+
def self.check_get_one_response(body)
|
59
|
+
fail 'LimdeskApiError' if !body.is_a?(Hash) ||
|
60
|
+
body['status'] != 'ok'
|
41
61
|
end
|
42
62
|
|
63
|
+
# get a single LimdeskAPI object
|
64
|
+
#
|
65
|
+
# @param [Hash] params
|
66
|
+
# @option params [Symbol] :object one of LimdeskApi::KNOWN_OBJS
|
67
|
+
# @option params [Integer] :id requested object's id
|
43
68
|
def self.get_one(params)
|
44
69
|
resp = @connection.get do |req|
|
45
|
-
req.url
|
70
|
+
req.url generate_url params
|
46
71
|
req.params[:key] = @key
|
47
72
|
end
|
48
73
|
case resp.status
|
49
74
|
when 200
|
50
|
-
|
51
|
-
|
52
|
-
|
75
|
+
body = resp.body
|
76
|
+
check_get_one_response(body)
|
77
|
+
body[params[:object].to_s]
|
53
78
|
when 404
|
54
|
-
|
79
|
+
nil
|
55
80
|
else
|
56
|
-
|
81
|
+
fail 'LimdeskApiErrorFatal'
|
57
82
|
end
|
58
83
|
end
|
59
84
|
|
60
|
-
def self.
|
85
|
+
def self.check_get_page_response(body, obj)
|
86
|
+
fail 'LimdeskApiError' if !body.is_a?(Hash) ||
|
87
|
+
body['status'] != 'ok' ||
|
88
|
+
body['page'].nil? ||
|
89
|
+
body['total_pages'].nil? ||
|
90
|
+
body[obj.to_s].nil?
|
91
|
+
end
|
92
|
+
|
93
|
+
# get a page of LimdeskAPI object
|
94
|
+
#
|
95
|
+
# @param [Hash] params
|
96
|
+
# @option params [Symbol] :object one of LimdeskApi::KNOWN_OBJS
|
97
|
+
# @option params [Integer] :page requested page
|
98
|
+
def self.get_page(params)
|
99
|
+
obj = LimdeskApi::KNOWN_OBJS[params[:object]]
|
61
100
|
resp = @connection.get do |req|
|
62
|
-
req.url
|
101
|
+
req.url generate_url params
|
63
102
|
req.params[:key] = @key
|
64
|
-
req.params[:page] = params[:page]
|
103
|
+
req.params[:page] = params[:page]
|
65
104
|
end
|
66
105
|
case resp.status
|
67
106
|
when 200
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
:objects=>resp.body[LimdeskApi::KNOWN_OBJS[params[:object]].to_s] }
|
107
|
+
body = resp.body
|
108
|
+
check_get_page_response(body, obj)
|
109
|
+
{ page: body['page'],
|
110
|
+
total_pages: body['total_pages'],
|
111
|
+
objects: body[obj.to_s] }
|
74
112
|
else
|
75
|
-
|
113
|
+
fail 'LimdeskApiErrorFatal'
|
76
114
|
end
|
77
115
|
end
|
78
116
|
|
117
|
+
# get all LimdeskAPI objects of a type
|
118
|
+
#
|
119
|
+
# @param [Symbol] object_name t one of LimdeskApi::KNOWN_OBJS
|
120
|
+
def self.get_all(object_name)
|
121
|
+
query_options = { page: 0, object: object_name }
|
122
|
+
data = []
|
123
|
+
loop do
|
124
|
+
query_options[:page] += 1
|
125
|
+
results = LimdeskApi.get_page(query_options)
|
126
|
+
data += results[:objects]
|
127
|
+
break if results[:total_pages] == results[:page] || results[:page] == 0
|
128
|
+
end
|
129
|
+
data
|
130
|
+
end
|
131
|
+
|
132
|
+
def self.check_create_response(body, obj)
|
133
|
+
fail 'LimdeskApiError' if !body.is_a?(Hash) ||
|
134
|
+
body['status'].nil? ||
|
135
|
+
body['status'] == 'error' ||
|
136
|
+
body[obj.to_s].nil?
|
137
|
+
end
|
138
|
+
|
139
|
+
# create LimdeskAPI object
|
140
|
+
#
|
141
|
+
# @param [Hash] params new object data
|
79
142
|
def self.create(params)
|
80
143
|
resp = @connection.post do |req|
|
81
|
-
req.url
|
144
|
+
req.url generate_url params
|
82
145
|
req.params[:key] = @key
|
83
146
|
req.body = params[:params].to_json
|
84
147
|
end
|
85
148
|
case resp.status
|
86
149
|
when 200
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
return resp.body[params[:object].to_s]
|
150
|
+
body = resp.body
|
151
|
+
check_create_response(body, params[:object])
|
152
|
+
body[params[:object].to_s]
|
91
153
|
else
|
92
|
-
|
154
|
+
fail 'LimdeskApiErrorFatal'
|
93
155
|
end
|
94
156
|
end
|
95
157
|
|
96
|
-
def self.
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
def self.post_simple(params)
|
101
|
-
self.update(:post, params)
|
102
|
-
end
|
103
|
-
|
104
|
-
def self.delete(params)
|
105
|
-
self.update(:delete, params)
|
158
|
+
def self.check_update_resonse(body)
|
159
|
+
fail 'LimdeskApiError' if !body.is_a?(Hash) ||
|
160
|
+
body['status'].nil?
|
106
161
|
end
|
107
162
|
|
163
|
+
# update/delete a LimdeskAPI object
|
164
|
+
#
|
165
|
+
# @param [Symobol] method a http method, one of :put, :post, :delete
|
166
|
+
# @param [Hash] params object data, if required
|
108
167
|
def self.update(method, params)
|
109
|
-
url = "#{@prefix}/#{LimdeskApi::KNOWN_OBJS[params[:object]]}/#{params[:id]}"
|
110
|
-
url += "/#{params[:action]}" if params[:action]
|
111
168
|
resp = @connection.send(method) do |req|
|
112
|
-
req.url
|
169
|
+
req.url generate_url params
|
113
170
|
req.params[:key] = @key
|
114
171
|
req.body = params[:params].to_json
|
115
172
|
end
|
116
173
|
case resp.status
|
117
174
|
when 200
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
else
|
122
|
-
return { error: true, msg: resp.body['msg'] }
|
123
|
-
end
|
175
|
+
body = resp.body
|
176
|
+
check_update_resonse(body)
|
177
|
+
body['status'] == 'ok' ? true : false
|
124
178
|
else
|
125
|
-
|
179
|
+
fail 'LimdeskApiErrorFatal'
|
126
180
|
end
|
127
181
|
end
|
128
182
|
|
183
|
+
def self.put(params)
|
184
|
+
self.update(:put, params)
|
185
|
+
end
|
186
|
+
|
187
|
+
def self.post_simple(params)
|
188
|
+
self.update(:post, params)
|
189
|
+
end
|
190
|
+
|
191
|
+
def self.delete(params)
|
192
|
+
self.update(:delete, params)
|
193
|
+
end
|
129
194
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: limdesk_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Grzegorz Siehień
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-11-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -134,6 +134,8 @@ files:
|
|
134
134
|
- lib/limdesk_api.rb
|
135
135
|
- lib/limdesk_api/activity.rb
|
136
136
|
- lib/limdesk_api/client.rb
|
137
|
+
- lib/limdesk_api/limdesk_object.rb
|
138
|
+
- lib/limdesk_api/sale.rb
|
137
139
|
- lib/limdesk_api/ticket.rb
|
138
140
|
- lib/limdesk_api/version.rb
|
139
141
|
- limdesk_api.gemspec
|