limdesk_api 0.0.1 → 0.0.2
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 +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
|
+
[](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
|