KayakoClient 1.0.2 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (84) hide show
  1. data/lib/kayako_client.rb +31 -0
  2. data/lib/kayako_client/base.rb +23 -0
  3. data/lib/kayako_client/custom_field.rb +14 -0
  4. data/lib/kayako_client/department.rb +18 -3
  5. data/lib/kayako_client/http/http.rb +14 -0
  6. data/lib/kayako_client/http/http_backend.rb +14 -0
  7. data/lib/kayako_client/http/http_client.rb +14 -0
  8. data/lib/kayako_client/http/http_response.rb +14 -0
  9. data/lib/kayako_client/http/net_http.rb +14 -0
  10. data/lib/kayako_client/knowledgebase_article.rb +131 -0
  11. data/lib/kayako_client/knowledgebase_attachment.rb +59 -0
  12. data/lib/kayako_client/knowledgebase_category.rb +71 -0
  13. data/lib/kayako_client/knowledgebase_comment.rb +32 -0
  14. data/lib/kayako_client/mixins/api.rb +14 -0
  15. data/lib/kayako_client/mixins/article_client.rb +76 -0
  16. data/lib/kayako_client/mixins/attachment.rb +16 -1
  17. data/lib/kayako_client/mixins/authentication.rb +14 -0
  18. data/lib/kayako_client/mixins/client.rb +300 -0
  19. data/lib/kayako_client/mixins/comment_object.rb +102 -0
  20. data/lib/kayako_client/mixins/convert_api.rb +39 -0
  21. data/lib/kayako_client/mixins/creator_api.rb +44 -0
  22. data/lib/kayako_client/mixins/knowledgebase_article_api.rb +69 -0
  23. data/lib/kayako_client/mixins/knowledgebase_category_client.rb +51 -0
  24. data/lib/kayako_client/mixins/logger.rb +14 -0
  25. data/lib/kayako_client/mixins/news_category_client.rb +51 -0
  26. data/lib/kayako_client/mixins/news_client.rb +51 -0
  27. data/lib/kayako_client/mixins/object.rb +24 -7
  28. data/lib/kayako_client/mixins/post_client.rb +14 -0
  29. data/lib/kayako_client/mixins/staff_visibility_api.rb +14 -0
  30. data/lib/kayako_client/mixins/ticket_api.rb +14 -0
  31. data/lib/kayako_client/mixins/ticket_client.rb +14 -0
  32. data/lib/kayako_client/mixins/troubleshooter_step_api.rb +69 -0
  33. data/lib/kayako_client/mixins/troubleshooter_step_client.rb +76 -0
  34. data/lib/kayako_client/mixins/user_visibility_api.rb +14 -0
  35. data/lib/kayako_client/news_category.rb +29 -0
  36. data/lib/kayako_client/news_comment.rb +32 -0
  37. data/lib/kayako_client/news_item.rb +81 -0
  38. data/lib/kayako_client/news_subscriber.rb +33 -0
  39. data/lib/kayako_client/staff.rb +14 -0
  40. data/lib/kayako_client/staff_group.rb +14 -0
  41. data/lib/kayako_client/ticket.rb +24 -1
  42. data/lib/kayako_client/ticket_attachment.rb +18 -0
  43. data/lib/kayako_client/ticket_count.rb +14 -0
  44. data/lib/kayako_client/ticket_custom_field.rb +14 -0
  45. data/lib/kayako_client/ticket_note.rb +14 -1
  46. data/lib/kayako_client/ticket_post.rb +15 -0
  47. data/lib/kayako_client/ticket_priority.rb +14 -0
  48. data/lib/kayako_client/ticket_status.rb +14 -0
  49. data/lib/kayako_client/ticket_time_track.rb +14 -0
  50. data/lib/kayako_client/ticket_type.rb +14 -0
  51. data/lib/kayako_client/troubleshooter_attachment.rb +68 -0
  52. data/lib/kayako_client/troubleshooter_category.rb +51 -0
  53. data/lib/kayako_client/troubleshooter_comment.rb +32 -0
  54. data/lib/kayako_client/troubleshooter_step.rb +100 -0
  55. data/lib/kayako_client/user.rb +42 -0
  56. data/lib/kayako_client/user_group.rb +14 -0
  57. data/lib/kayako_client/user_organization.rb +14 -0
  58. data/lib/kayako_client/xml/lib_xml.rb +14 -0
  59. data/lib/kayako_client/xml/rexml_document.rb +14 -0
  60. data/lib/kayako_client/xml/xml.rb +14 -0
  61. data/lib/kayako_client/xml/xml_backend.rb +14 -0
  62. data/test/test_attachment.rb +77 -0
  63. data/test/test_client.rb +191 -0
  64. data/test/test_configuration.rb +110 -0
  65. data/test/test_count.rb +162 -0
  66. data/test/test_custom_field.rb +86 -0
  67. data/test/test_department.rb +136 -0
  68. data/test/test_http.rb +34 -0
  69. data/test/test_knowledgebase.rb +155 -0
  70. data/test/test_news.rb +117 -0
  71. data/test/test_note.rb +64 -0
  72. data/test/test_post.rb +64 -0
  73. data/test/test_priority.rb +46 -0
  74. data/test/test_properties.rb +114 -0
  75. data/test/test_staff.rb +77 -0
  76. data/test/test_status.rb +52 -0
  77. data/test/test_ticket.rb +152 -0
  78. data/test/test_ticket_custom_field.rb +193 -0
  79. data/test/test_time_track.rb +68 -0
  80. data/test/test_troubleshooter.rb +106 -0
  81. data/test/test_type.rb +65 -0
  82. data/test/test_user.rb +95 -0
  83. data/test/test_xml.rb +183 -0
  84. metadata +89 -42
@@ -0,0 +1,102 @@
1
+ #######################################################################
2
+ #
3
+ # Kayako Ruby REST API library
4
+ # _____________________________________________________________________
5
+ #
6
+ # @author Andriy Lesyuk
7
+ #
8
+ # @package KayakoClient
9
+ # @copyright Copyright (c) 2011-2013, Kayako
10
+ # @license FreeBSD
11
+ # @link http://forge.kayako.com/projects/kayako-ruby-api-library
12
+ #
13
+ #######################################################################
14
+
15
+ require 'kayako_client/mixins/creator_api'
16
+
17
+ require 'kayako_client/staff'
18
+ require 'kayako_client/user'
19
+
20
+ module KayakoClient
21
+ module CommentObject
22
+
23
+ CREATOR_STAFF = 1
24
+ CREATOR_USER = 2
25
+
26
+ STATUS_PENDING = 1
27
+ STATUS_APPROVED = 2
28
+ STATUS_SPAM = 3
29
+
30
+ def self.included(base)
31
+ base.extend(ClassMethods)
32
+ base.class_eval do
33
+
34
+ supports :all, :get, :post, :delete
35
+
36
+ property :id, :integer, :readonly => true
37
+ property :creator_type, :integer, :required => :post, :range => 1..2
38
+ property :creator_id, :integer
39
+ property :full_name, :string
40
+ property :email, :string
41
+ property :ip_address, :string, :readonly => true
42
+ property :date_line, :date, :readonly => true
43
+ property :parent_comment_id, :integer
44
+ property :comment_status, :integer, :range => 1..3
45
+ property :user_agent, :string, :readonly => true
46
+ property :referrer, :string, :readonly => true
47
+ property :parent_url, :string, :readonly => true
48
+ property :contents, :string, :required => :post
49
+
50
+ associate :parent_comment, :parent_comment_id, base
51
+
52
+ end
53
+ end
54
+
55
+ def creator=(creator)
56
+ if creator.is_a?(Staff)
57
+ self.creator_type = self.class::CREATOR_STAFF
58
+ self.creator_id = creator.id
59
+ self.full_name = creator.full_name
60
+ self.email = creator.email
61
+ elsif creator.is_a?(User)
62
+ self.creator_type = self.class::CREATOR_USER
63
+ self.creator_id = creator.id
64
+ self.full_name = creator.full_name
65
+ self.email = creator.emails.first
66
+ else
67
+ raise ArgumentError, "creator must be a User or Staff"
68
+ end
69
+ end
70
+
71
+ def has_parent_comment?
72
+ !parent_comment_id.nil? && parent_comment_id > 0
73
+ end
74
+
75
+ alias_method :is_reply?, :has_parent_comment?
76
+
77
+ module ClassMethods
78
+
79
+ def all(object, options = {})
80
+ unless object.to_i > 0
81
+ logger.error "invalid commented object :id - #{object}" if logger
82
+ raise ArgumentError, "invalid commented object ID"
83
+ end
84
+ super(options.merge(:e => "#{path}/ListAll/#{object.to_i}"))
85
+ end
86
+
87
+ end
88
+
89
+ private
90
+
91
+ def validate(method, params)
92
+ if method == :post
93
+ if params[:creator_type] == self.class::CREATOR_STAFF
94
+ raise ArgumentError, ":creator_id is required for staff" unless params[:creator_id]
95
+ elsif params[:creator_type] == self.class::CREATOR_USER
96
+ raise ArgumentError, ":full_name is required for user" unless params[:full_name]
97
+ end
98
+ end
99
+ end
100
+
101
+ end
102
+ end
@@ -0,0 +1,39 @@
1
+ #######################################################################
2
+ #
3
+ # Kayako Ruby REST API library
4
+ # _____________________________________________________________________
5
+ #
6
+ # @author Andriy Lesyuk
7
+ #
8
+ # @package KayakoClient
9
+ # @copyright Copyright (c) 2011-2013, Kayako
10
+ # @license FreeBSD
11
+ # @link http://forge.kayako.com/projects/kayako-ruby-api-library
12
+ #
13
+ #######################################################################
14
+
15
+ module KayakoClient
16
+ module ConvertAPI
17
+
18
+ def self.included(base)
19
+ base.extend(ClassMethods)
20
+ end
21
+
22
+ module ClassMethods
23
+
24
+ def convert(type, value, options = {})
25
+ value = super(type, value, options)
26
+ value = value.join(',') if type.is_a?(Array)
27
+ value
28
+ end
29
+
30
+ def convert_value(type, value, options = {})
31
+ result = super(type, value, options = {})
32
+ result = Time.at(value).strftime('%m/%d/%Y') if type == :date
33
+ result
34
+ end
35
+
36
+ end
37
+
38
+ end
39
+ end
@@ -0,0 +1,44 @@
1
+ #######################################################################
2
+ #
3
+ # Kayako Ruby REST API library
4
+ # _____________________________________________________________________
5
+ #
6
+ # @author Andriy Lesyuk
7
+ #
8
+ # @package KayakoClient
9
+ # @copyright Copyright (c) 2011-2013, Kayako
10
+ # @license FreeBSD
11
+ # @link http://forge.kayako.com/projects/kayako-ruby-api-library
12
+ #
13
+ #######################################################################
14
+
15
+ module KayakoClient
16
+ module CreatorAPI
17
+
18
+ def created_by_staff?
19
+ !creator_type.nil? && creator_type == self.class::CREATOR_STAFF
20
+ end
21
+
22
+ def created_by_user?
23
+ !creator_type.nil? && creator_type == self.class::CREATOR_USER
24
+ end
25
+
26
+ def creator
27
+ if @associated.has_key?(:creator)
28
+ @associated[:creator]
29
+ elsif instance_variable_defined?(:@creator_id)
30
+ creator_id = instance_variable_get(:@creator_id)
31
+ if created_by_staff?
32
+ @associated[:creator] = Staff.get(creator_id.to_i, inherited_options)
33
+ elsif created_by_user?
34
+ @associated[:creator] = User.get(creator_id.to_i, inherited_options)
35
+ else
36
+ @associated[:creator] = nil
37
+ end
38
+ else
39
+ @associated[:creator] = nil
40
+ end
41
+ end
42
+
43
+ end
44
+ end
@@ -0,0 +1,69 @@
1
+ #######################################################################
2
+ #
3
+ # Kayako Ruby REST API library
4
+ # _____________________________________________________________________
5
+ #
6
+ # @author Andriy Lesyuk
7
+ #
8
+ # @package KayakoClient
9
+ # @copyright Copyright (c) 2011-2013, Kayako
10
+ # @license FreeBSD
11
+ # @link http://forge.kayako.com/projects/kayako-ruby-api-library
12
+ #
13
+ #######################################################################
14
+
15
+ module KayakoClient
16
+ module KnowledgebaseArticleAPI
17
+
18
+ def self.included(base)
19
+ base.extend(ClassMethods)
20
+ end
21
+
22
+ def delete_request(options = {})
23
+ raise RuntimeError, "undefined article ID" unless kb_article_id
24
+ raise RuntimeError, "undefined ID" unless id
25
+ super(options.merge(:e => "#{self.class.path}/#{kb_article_id}/#{id}"))
26
+ end
27
+
28
+ module ClassMethods
29
+
30
+ def all(article, options = {})
31
+ unless article.to_i > 0
32
+ logger.error "invalid :kb_article_id - #{article}" if logger
33
+ raise ArgumentError, "invalid article ID"
34
+ end
35
+ super(options.merge(:e => "#{path}/ListAll/#{article.to_i}"))
36
+ end
37
+
38
+ def get(article, id, options = {})
39
+ unless article.to_i > 0
40
+ logger.error "invalid :kb_article_id - #{article}" if logger
41
+ raise ArgumentError, "invalid article ID"
42
+ end
43
+ if id == :all
44
+ all(article, options)
45
+ else
46
+ unless id.to_i > 0
47
+ logger.error "invalid :id - #{id}" if logger
48
+ raise ArgumentError, "invalid ID"
49
+ end
50
+ super(id, options.merge(:e => "#{path}/#{article.to_i}/#{id.to_i}"))
51
+ end
52
+ end
53
+
54
+ def delete(article, id, options = {})
55
+ unless article.to_i > 0
56
+ logger.error "invalid :kb_article_id - #{article}" if logger
57
+ raise ArgumentError, "invalid article ID"
58
+ end
59
+ unless id.to_i > 0
60
+ logger.error "invalid :id - #{id}" if logger
61
+ raise ArgumentError, "invalid ID"
62
+ end
63
+ super(id, options.merge(:e => "#{path}/#{article.to_i}/#{id.to_i}"))
64
+ end
65
+
66
+ end
67
+
68
+ end
69
+ end
@@ -0,0 +1,51 @@
1
+ #######################################################################
2
+ #
3
+ # Kayako Ruby REST API library
4
+ # _____________________________________________________________________
5
+ #
6
+ # @author Andriy Lesyuk
7
+ #
8
+ # @package KayakoClient
9
+ # @copyright Copyright (c) 2011-2013, Kayako
10
+ # @license FreeBSD
11
+ # @link http://forge.kayako.com/projects/kayako-ruby-api-library
12
+ #
13
+ #######################################################################
14
+
15
+ module KayakoClient
16
+ module KnowledgebaseCategoryClient
17
+
18
+ def articles(options = {})
19
+ KayakoClient::KnowledgebaseArticle.all(id, options.merge(inherited_options)) if id
20
+ end
21
+
22
+ def get_article(article, options = {})
23
+ if id
24
+ value = KayakoClient::KnowledgebaseArticle.get(article, options.merge(inherited_options))
25
+ value && value.in_category?(id) ? value : nil
26
+ end
27
+ end
28
+
29
+ alias_method :find_article, :get_article
30
+
31
+ def post_article(options = {})
32
+ if id
33
+ if logger && options[:id] && options[:id].to_i != id
34
+ logger.warn "overwriting :id"
35
+ end
36
+ options[:id] = id
37
+ KayakoClient::KnowledgebaseArticle.post(options.merge(inherited_options))
38
+ end
39
+ end
40
+
41
+ alias_method :create_article, :post_article
42
+
43
+ def delete_article(article, options = {})
44
+ category_article = get_article(article, options.merge(inherited_options))
45
+ category_article.delete if category_article
46
+ end
47
+
48
+ alias_method :destroy_article, :delete_article
49
+
50
+ end
51
+ end
@@ -1,3 +1,17 @@
1
+ #######################################################################
2
+ #
3
+ # Kayako Ruby REST API library
4
+ # _____________________________________________________________________
5
+ #
6
+ # @author Andriy Lesyuk
7
+ #
8
+ # @package KayakoClient
9
+ # @copyright Copyright (c) 2011-2013, Kayako
10
+ # @license FreeBSD
11
+ # @link http://forge.kayako.com/projects/kayako-ruby-api-library
12
+ #
13
+ #######################################################################
14
+
1
15
  module KayakoClient
2
16
  module Logger
3
17
 
@@ -0,0 +1,51 @@
1
+ #######################################################################
2
+ #
3
+ # Kayako Ruby REST API library
4
+ # _____________________________________________________________________
5
+ #
6
+ # @author Andriy Lesyuk
7
+ #
8
+ # @package KayakoClient
9
+ # @copyright Copyright (c) 2011-2013, Kayako
10
+ # @license FreeBSD
11
+ # @link http://forge.kayako.com/projects/kayako-ruby-api-library
12
+ #
13
+ #######################################################################
14
+
15
+ module KayakoClient
16
+ module NewsCategoryClient
17
+
18
+ def news(options = {})
19
+ KayakoClient::NewsItem.all(id, options.merge(inherited_options)) if id
20
+ end
21
+
22
+ def get_news(news, options = {})
23
+ if id
24
+ value = KayakoClient::NewsItem.get(news, options.merge(inherited_options))
25
+ value && value.in_category?(id) ? value : nil
26
+ end
27
+ end
28
+
29
+ alias_method :find_news, :get_news
30
+
31
+ def post_news(options = {})
32
+ if id
33
+ if logger && options[:id] && options[:id].to_i != id
34
+ logger.warn "overwriting :id"
35
+ end
36
+ options[:id] = id
37
+ KayakoClient::NewsItem.post(options.merge(inherited_options))
38
+ end
39
+ end
40
+
41
+ alias_method :create_news, :post_news
42
+
43
+ def delete_news(news, options = {})
44
+ category_news = get_news(news, options.merge(inherited_options))
45
+ category_news.delete if category_news
46
+ end
47
+
48
+ alias_method :destroy_news, :delete_news
49
+
50
+ end
51
+ end
@@ -0,0 +1,51 @@
1
+ #######################################################################
2
+ #
3
+ # Kayako Ruby REST API library
4
+ # _____________________________________________________________________
5
+ #
6
+ # @author Andriy Lesyuk
7
+ #
8
+ # @package KayakoClient
9
+ # @copyright Copyright (c) 2011-2013, Kayako
10
+ # @license FreeBSD
11
+ # @link http://forge.kayako.com/projects/kayako-ruby-api-library
12
+ #
13
+ #######################################################################
14
+
15
+ module KayakoClient
16
+ module NewsClient
17
+
18
+ def comments(options = {})
19
+ KayakoClient::NewsComment.all(id, options.merge(inherited_options)) if id
20
+ end
21
+
22
+ def get_comment(comment, options = {})
23
+ if id
24
+ value = KayakoClient::NewsComment.get(comment, options.merge(inherited_options))
25
+ value && value.news_item_id == id ? value : nil
26
+ end
27
+ end
28
+
29
+ alias_method :find_comment, :get_comment
30
+
31
+ def post_comment(options = {})
32
+ if id
33
+ if logger && options[:news_item_id] && options[:news_item_id].to_i != id
34
+ logger.warn "overwriting :news_item_id"
35
+ end
36
+ options[:news_item_id] = id
37
+ KayakoClient::NewsComment.post(options.merge(inherited_options))
38
+ end
39
+ end
40
+
41
+ alias_method :create_comment, :post_comment
42
+
43
+ def delete_comment(comment, options = {})
44
+ news_comment = get_comment(comment, options.merge(inherited_options))
45
+ news_comment.delete if news_comment
46
+ end
47
+
48
+ alias_method :destroy_comment, :delete_comment
49
+
50
+ end
51
+ end
@@ -1,9 +1,24 @@
1
+ #######################################################################
2
+ #
3
+ # Kayako Ruby REST API library
4
+ # _____________________________________________________________________
5
+ #
6
+ # @author Andriy Lesyuk
7
+ #
8
+ # @package KayakoClient
9
+ # @copyright Copyright (c) 2011-2013, Kayako
10
+ # @license FreeBSD
11
+ # @link http://forge.kayako.com/projects/kayako-ruby-api-library
12
+ #
13
+ #######################################################################
14
+
1
15
  require 'base64'
2
16
 
3
17
  module KayakoClient
4
18
  module Object
5
19
 
6
20
  PROPERTY_TYPES = [ :integer,
21
+ :float,
7
22
  :string,
8
23
  :symbol,
9
24
  :boolean,
@@ -52,7 +67,7 @@ module KayakoClient
52
67
  end
53
68
 
54
69
  def [](name)
55
- if self.class.properties.include?(name.to_sym)
70
+ if name.respond_to?(:to_sym) && self.class.properties.include?(name.to_sym)
56
71
  send("#{name}")
57
72
  else
58
73
  nil
@@ -197,7 +212,7 @@ module KayakoClient
197
212
  array << klass.get(i.to_i, inherited_options)
198
213
  array
199
214
  end
200
- elsif id.respond_to?('to_i') && id.to_i > 0
215
+ elsif id.respond_to?(:to_i) && id.to_i > 0
201
216
  @associated[property] = klass.get(id.to_i, inherited_options)
202
217
  else
203
218
  @associated[property] = nil
@@ -295,19 +310,19 @@ module KayakoClient
295
310
  end
296
311
 
297
312
  def properties
298
- @properties
313
+ @properties ||= {}
299
314
  end
300
315
 
301
316
  def aliases
302
- @aliases
317
+ @aliases ||= {}
303
318
  end
304
319
 
305
320
  def options
306
- @options
321
+ @options ||= {}
307
322
  end
308
323
 
309
324
  def map
310
- @map
325
+ @map ||= {}
311
326
  end
312
327
 
313
328
  private
@@ -416,12 +431,14 @@ module KayakoClient
416
431
  case type
417
432
  when :integer
418
433
  value.to_i
434
+ when :float
435
+ value.to_f
419
436
  when :string
420
437
  value.to_s
421
438
  when :symbol
422
439
  value.to_sym
423
440
  when :boolean
424
- if value.respond_to?('to_i')
441
+ if value.respond_to?(:to_i)
425
442
  value.to_i == 0 ? false : true
426
443
  else
427
444
  case value