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 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