Module: LimdeskApi

Defined in:
lib/limdesk_api.rb,
lib/limdesk_api/sale.rb,
lib/limdesk_api/client.rb,
lib/limdesk_api/ticket.rb,
lib/limdesk_api/version.rb,
lib/limdesk_api/activity.rb,
lib/limdesk_api/contactperson.rb,
lib/limdesk_api/limdesk_object.rb

Overview

LideskAPI Warapper Limdesk.com is a multichannel, web-based customer support solution. This gem lets you integrate your software using LimdeskAPI.

Defined Under Namespace

Classes: Activity, Client, Contactperson, LimdeskObject, Sale, Ticket

Constant Summary collapse

ENDPOINT =

default endpoint

'https://cloud.limdesk.com'
KNOWN_OBJS =
{
  ticket: :tickets,
  activity: :activities,
  client: :clients,
  sale: :sales,
  contactperson: :contactpersons
}
VERSION =
'0.0.6'

Class Method Summary collapse

Class Method Details

.check_create_response(body, obj) ⇒ Object



135
136
137
138
139
140
# File 'lib/limdesk_api.rb', line 135

def self.check_create_response(body, obj)
  fail 'LimdeskApiError' if !body.is_a?(Hash) ||
                            body['status'].nil? ||
                            body['status'] == 'error' ||
                            body[obj.to_s].nil?
end

.check_get_one_response(body) ⇒ Object



60
61
62
63
# File 'lib/limdesk_api.rb', line 60

def self.check_get_one_response(body)
  fail 'LimdeskApiError' if !body.is_a?(Hash) ||
                            body['status'] != 'ok'
end

.check_get_page_response(body, obj) ⇒ Object



88
89
90
91
92
93
94
# File 'lib/limdesk_api.rb', line 88

def self.check_get_page_response(body, obj)
  fail 'LimdeskApiError' if !body.is_a?(Hash) ||
                            body['status'] != 'ok' ||
                            body['page'].nil? ||
                            body['total_pages'].nil? ||
                            body[obj.to_s].nil?
end

.check_update_resonse(body) ⇒ Object



161
162
163
164
# File 'lib/limdesk_api.rb', line 161

def self.check_update_resonse(body)
  fail 'LimdeskApiError' if !body.is_a?(Hash) ||
                            body['status'].nil?
end

.configure {|_self| ... } ⇒ Object

Examples:

configure API access

LimdeskApi.configure { |lim| lim.key = 'xxx'; lim.version = 1 }

Yields:

  • (_self)

Yield Parameters:

  • _self (LimdeskApi)

    the object that the method was called on



30
31
32
33
34
35
36
37
38
39
# File 'lib/limdesk_api.rb', line 30

def self.configure
  yield self
  @connection = Faraday.new(url: ENDPOINT) do |faraday|
    faraday.response :json, content_type: /\bjson$/
    faraday.adapter Faraday.default_adapter
    faraday.use Faraday::Response::Logger if @debug
  end
  @prefix = "/api/v#{@version}"
  self
end

.create(params) ⇒ Object

create LimdeskAPI object

Parameters:

  • params (Hash)

    new object data



145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
# File 'lib/limdesk_api.rb', line 145

def self.create(params)
  resp = @connection.post do |req|
    req.url generate_url params
    req.params[:key] = @key
    req.body = params[:params].to_json
  end
  case resp.status
  when 200
    body = resp.body
    check_create_response(body, params[:object])
    body[params[:object].to_s]
  else
    fail 'LimdeskApiErrorFatal'
  end
end

.debug=(debug) ⇒ Object



49
50
51
# File 'lib/limdesk_api.rb', line 49

def self.debug=(debug)
  @debug = debug
end

.delete(params) ⇒ Object



194
195
196
# File 'lib/limdesk_api.rb', line 194

def self.delete(params)
  update(:delete, params)
end

.generate_url(params) ⇒ Object



53
54
55
56
57
58
# File 'lib/limdesk_api.rb', line 53

def self.generate_url(params)
  url = [@prefix, LimdeskApi::KNOWN_OBJS[params[:object]]]
  url.push params[:id] if params[:id]
  url.push params[:action] if params[:action]
  url.join('/')
end

.get_all(object_name) ⇒ Object

get all LimdeskAPI objects of a type

Parameters:

  • object_name (Symbol)

    t one of LimdeskApi::KNOWN_OBJS



123
124
125
126
127
128
129
130
131
132
133
# File 'lib/limdesk_api.rb', line 123

def self.get_all(object_name)
  query_options = { page: 0, object: object_name }
  data = []
  loop do
    query_options[:page] += 1
    results = LimdeskApi.get_page(query_options)
    data += results[:objects]
    break if results[:total_pages] == results[:page] || results[:page] == 0
  end
  data
end

.get_one(params) ⇒ Object

get a single LimdeskAPI object

Parameters:

  • params (Hash)

Options Hash (params):

  • :object (Symbol)

    one of LimdeskApi::KNOWN_OBJS

  • :id (Integer)

    requested object’s id



70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# File 'lib/limdesk_api.rb', line 70

def self.get_one(params)
  resp = @connection.get do |req|
    req.url generate_url params
    req.params[:key] = @key
    req.params[:query] = params[:query] if params[:query]
  end
  case resp.status
  when 200
    body = resp.body
    check_get_one_response(body)
    body[params[:object].to_s]
  when 404
    nil
  else
    fail 'LimdeskApiErrorFatal'
  end
end

.get_page(params) ⇒ Object

get a page of LimdeskAPI object

Parameters:

  • params (Hash)

Options Hash (params):

  • :object (Symbol)

    one of LimdeskApi::KNOWN_OBJS

  • :page (Integer)

    requested page



101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
# File 'lib/limdesk_api.rb', line 101

def self.get_page(params)
  obj = LimdeskApi::KNOWN_OBJS[params[:object]]
  resp = @connection.get do |req|
    req.url generate_url params
    req.params[:key] = @key
    req.params[:page] = params[:page]
  end
  case resp.status
  when 200
    body = resp.body
    check_get_page_response(body, obj)
    {  page: body['page'],
       total_pages: body['total_pages'],
       objects: body[obj.to_s] }
  else
    fail 'LimdeskApiErrorFatal'
  end
end

.key=(key) ⇒ Object



41
42
43
# File 'lib/limdesk_api.rb', line 41

def self.key=(key)
  @key = key
end

.post_simple(params) ⇒ Object



190
191
192
# File 'lib/limdesk_api.rb', line 190

def self.post_simple(params)
  update(:post, params)
end

.put(params) ⇒ Object



186
187
188
# File 'lib/limdesk_api.rb', line 186

def self.put(params)
  update(:put, params)
end

.update(method, params) ⇒ Object

update/delete a LimdeskAPI object

Parameters:

  • method (Symobol)

    a http method, one of :put, :post, :delete

  • params (Hash)

    object data, if required



170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
# File 'lib/limdesk_api.rb', line 170

def self.update(method, params)
  resp = @connection.send(method) do |req|
    req.url generate_url params
    req.params[:key] = @key
    req.body = params[:params].to_json
  end
  case resp.status
  when 200
    body = resp.body
    check_update_resonse(body)
    body['status'] == 'ok' ? true : false
  else
    fail 'LimdeskApiErrorFatal'
  end
end

.version=(version) ⇒ Object



45
46
47
# File 'lib/limdesk_api.rb', line 45

def self.version=(version)
  @version = version
end