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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 98a9417eaadaf56f00c999cd56a4f54d86c82d15
4
- data.tar.gz: fbccda463576a535adab7f5e0de327e7984202f9
3
+ metadata.gz: 20f13df68d98955d7f47adea62e02b95bb9f5c4a
4
+ data.tar.gz: 7a228e94c25393b16c9d395ac86edf8100e2033d
5
5
  SHA512:
6
- metadata.gz: 1cfb8ffaade21c04901a4bd485c6c1ccfe7d698783fd91524ec3af437b1d6b65dbbc676854d3371212bee0dbcb02d2326df242f125fae655c70172abd2834990
7
- data.tar.gz: f8a6610416d9eed8347a55301e033730b94c14e98e0ded7e24bfbc0dfe0e05480c677e234b9de788f7ff5c00926fb5bba1916b3e95a47f13bacf0ec94bf6d864
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(content: 'this is a private comment', answer_type: :priv)
55
- ticket.answer(content: 'dear customer, it is solved', answer_type: :pub)
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(content: 'its solved', type: :resolved)
59
+ ticket.close content: 'its solved', type: :resolved
58
60
  ticket.reopen
59
- ticket.close(content: 'spam', type: :rejected)
61
+ ticket.close content: 'spam', type: :rejected
60
62
 
61
- ticket2 = LimdeskApi::Ticket.create title: "a ticket", content: "client's probem", reported_by: :mail, client_id: -1
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
- "a ticket"
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( :content=>"client has logged into website",
80
- :client_id=>55 )
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( :name =>"John Smith",
95
- :nippesel =>"15012406496",
96
- :phone =>"223111789",
97
- :email =>"email@example.com",
98
- :adress =>"Plain Street 149 85-058 Warsaw" )
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/[my-github-username]/limdesk/fork )
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
@@ -1,31 +1,28 @@
1
1
  module LimdeskApi
2
-
3
- class Activity < RecursiveOpenStruct
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
- response = LimdeskApi.create(:object=>:activity , :params=>params)
7
- Activity.new response
13
+ super
8
14
  end
9
15
 
10
- def self.all
11
- query_options = { page: 1, object: :activity }
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 ok?
26
- error == true ? false : true
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
@@ -1,44 +1,18 @@
1
1
  module LimdeskApi
2
-
3
- class Client < RecursiveOpenStruct
4
-
5
- def self.get(id)
6
- response = LimdeskApi.get_one(:object=>:client, :id=>id)
7
- response ? Client.new(response) : nil
8
- end
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
- response = LimdeskApi.create(:object=>:client, :params=>params)
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
@@ -1,89 +1,96 @@
1
1
  module LimdeskApi
2
-
3
- class Ticket < RecursiveOpenStruct
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
- def self.get(no)
23
- response = LimdeskApi.get_one(:object=>:ticket, :id=>no)
24
- response ? Ticket.new(response) : nil
25
- end
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
- raise "BadMediaType" unless Ticket::MEDIA_TYPES.keys.include?(params[:reported_by])
29
- params["reportedBy"] = Ticket::MEDIA_TYPES[params.delete(:reported_by)]
30
- response = LimdeskApi.create(:object=>:ticket, :params=>params)
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
- raise "BadCloseType" unless Ticket::CLOSE_TYPES.keys.include?(params[:type])
59
- raise "NoContentGiven" unless params[:content]
60
- response = LimdeskApi.put( id: self.number,
61
- object: :ticket,
62
- action: :close,
63
- params: { content: params[:content], type: Ticket::CLOSE_TYPES[params[:type]] } )
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
- return not(response[:error])
61
+ response
66
62
  end
67
63
 
64
+ # Reopens a closed ticket
65
+ #
66
+ # @return [Boolean]
68
67
  def reopen
69
- response = LimdeskApi.put( id: self.number,
70
- object: :ticket,
71
- action: :reopen,
72
- params: {} )
68
+ response = LimdeskApi.put(
69
+ id: self.number,
70
+ object: :ticket,
71
+ action: :reopen,
72
+ params: {})
73
73
  refresh!
74
- return not(response[:error])
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
- raise "BadAnswerType" unless Ticket::ANSWER_TYPES.keys.include?(params[:answer_type])
79
- params["type"] = Ticket::ANSWER_TYPES[params.delete(:answer_type)]
80
- response = LimdeskApi.post_simple( id: self.number,
81
- object: :ticket,
82
- action: :answer,
83
- params: params )
84
- refresh!
85
- return not(response[:error])
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
@@ -1,3 +1,3 @@
1
1
  module LimdeskApi
2
- VERSION = "0.0.1"
2
+ VERSION = '0.0.2'
3
3
  end
data/lib/limdesk_api.rb CHANGED
@@ -1,129 +1,194 @@
1
- require "faraday"
2
- require "recursive_open_struct"
3
- require "faraday_middleware"
4
- require "json"
5
- require "limdesk_api/version"
6
- require "limdesk_api/client"
7
- require "limdesk_api/activity"
8
- require "limdesk_api/ticket"
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(:url => ENDPOINT) do |faraday|
23
- faraday.response :json, :content_type => /\bjson$/
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
- return self
36
+ self
29
37
  end
30
38
 
31
39
  def self.key=(key)
32
- return @key = key
40
+ @key = key
33
41
  end
34
42
 
35
43
  def self.version=(version)
36
- return @version = version
44
+ @version = version
37
45
  end
38
46
 
39
47
  def self.debug=(debug)
40
- return @debug = debug
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 "#{@prefix}/#{LimdeskApi::KNOWN_OBJS[params[:object]]}/#{params[:id]}"
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
- raise "LimdeskApiError" unless resp.body.kind_of?(Hash) && resp.body['status'] == "ok"
51
- return nil if resp.body[params[:object].to_s].nil?
52
- return resp.body[params[:object].to_s]
75
+ body = resp.body
76
+ check_get_one_response(body)
77
+ body[params[:object].to_s]
53
78
  when 404
54
- return nil
79
+ nil
55
80
  else
56
- raise "LimdeskApiErrorFatal"
81
+ fail 'LimdeskApiErrorFatal'
57
82
  end
58
83
  end
59
84
 
60
- def self.get_many(params)
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 "#{@prefix}/#{LimdeskApi::KNOWN_OBJS[params[:object]]}"
101
+ req.url generate_url params
63
102
  req.params[:key] = @key
64
- req.params[:page] = params[:page] if params[:page].to_i > 0
103
+ req.params[:page] = params[:page]
65
104
  end
66
105
  case resp.status
67
106
  when 200
68
- raise "LimdeskApiError" unless resp.body.kind_of?(Hash) && resp.body['status'] == "ok"
69
- raise "LimdeskApiError" unless resp.body['page'] && resp.body['total_pages']
70
- raise "LimdeskApiError" unless resp.body[LimdeskApi::KNOWN_OBJS[params[:object]].to_s]
71
- return { :page=>resp.body['page'],
72
- :total_pages=>resp.body['total_pages'],
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
- raise "LimdeskApiErrorFatal"
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 "#{@prefix}/#{LimdeskApi::KNOWN_OBJS[params[:object]]}"
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
- raise "LimdeskApiError" unless resp.body.kind_of?(Hash) && resp.body['status']
88
- return { error: true, msg: resp.body['msg'] } if resp.body['status'] == "error"
89
- raise "LimdeskApiError" if resp.body[params[:object].to_s].nil?
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
- raise "LimdeskApiErrorFatal"
154
+ fail 'LimdeskApiErrorFatal'
93
155
  end
94
156
  end
95
157
 
96
- def self.put(params)
97
- self.update(:put, params)
98
- end
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 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
- raise "LimdeskApiError" unless resp.body.kind_of?(Hash) && resp.body['status']
119
- if resp.body['status'] == "ok"
120
- return { error: false }
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
- raise "LimdeskApiErrorFatal"
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.1
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-10-16 00:00:00.000000000 Z
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