freshdesk 0.1

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.
Files changed (2) hide show
  1. data/lib/freshdesk.rb +133 -0
  2. metadata +74 -0
@@ -0,0 +1,133 @@
1
+ require 'rest_client'
2
+ require 'nokogiri'
3
+
4
+ class Freshdesk
5
+
6
+ # custom errors
7
+ class AlreadyExistedError < StandardError; end
8
+ class ConnectionError < StandardError; end
9
+
10
+ attr_accessor :base_url
11
+
12
+ def initialize(base_url, username, password)
13
+
14
+ @base_url = base_url
15
+
16
+ RestClient.add_before_execution_proc do | req, params |
17
+ req.basic_auth username, password
18
+ end
19
+ end
20
+
21
+ # Freshdesk API client support "GET" with id parameter optional
22
+ # Returns nil if there is no response
23
+ def self.define_get(name, *args)
24
+ name = name.to_s
25
+ method_name = "get_" + name
26
+
27
+ define_method method_name do |*args|
28
+ uri = mapping(name)
29
+ uri.gsub!(/.xml/, "/#{args}.xml") if args.size > 0
30
+
31
+ begin
32
+ response = RestClient.get uri
33
+ rescue Exception
34
+ response = nil
35
+ end
36
+ end
37
+ end
38
+
39
+ # Freshdesk API client support "DELETE" with the required id parameter
40
+ def self.define_delete(name, *args)
41
+ name = name.to_s
42
+ method_name = "delete_" + name
43
+
44
+ define_method method_name do |args|
45
+ uri = mapping(name)
46
+ raise StandardError, "An ID is required to delete" if args.size.eql? 0
47
+ uri.gsub!(/.xml/, "/#{args}.xml")
48
+ RestClient.delete uri
49
+ end
50
+ end
51
+
52
+ # Freshdesk API client support "POST" with the optional key, value parameter
53
+ #
54
+ # Will throw:
55
+ # AlreadyExistedError if there is exact copy of data in the server
56
+ # ConnectionError if there is connection problem with the server
57
+ def self.define_post(name, *args)
58
+ name = name.to_s
59
+ method_name = "post_" + name
60
+
61
+ define_method method_name do |args|
62
+ raise StandardError, "Arguments are required to modify data" if args.size.eql? 0
63
+ uri = mapping(name)
64
+
65
+ builder = Nokogiri::XML::Builder.new do |xml|
66
+ xml.send(doc_name(name)) {
67
+ args.each do |key, value|
68
+ xml.send(key, value)
69
+ end
70
+ }
71
+ end
72
+
73
+ begin
74
+ response = RestClient.post uri, builder.to_xml, :content_type => "text/xml"
75
+
76
+ rescue RestClient::UnprocessableEntity
77
+ raise AlreadyExistedError, "Entry already existed"
78
+
79
+ rescue RestClient::InternalServerError
80
+ raise ConnectionError, "Connection to the server failed. Please check hostname"
81
+
82
+ rescue RestClient::Found
83
+ raise ConnectionError, "Connection to the server failed. Please check username/password"
84
+
85
+ rescue Exception => e3
86
+ raise
87
+ end
88
+
89
+ response
90
+ end
91
+ end
92
+
93
+ [:tickets, :ticket_fields, :users, :forums, :solutions, :companies].each do |a|
94
+ define_get a
95
+ define_post a
96
+ define_delete a
97
+ end
98
+
99
+
100
+ # Mapping of object name to url:
101
+ # tickets => helpdesk/tickets.xml
102
+ # ticket_fields => /ticket_fields.xml
103
+ # users => /contacts.xml
104
+ # forums => /categories.xml
105
+ # solutions => /solution/categories.xml
106
+ # companies => /customers.xml
107
+ def mapping(method_name)
108
+ path = case method_name
109
+ when "tickets" then File.join(@base_url + "helpdesk/tickets.xml")
110
+ when "ticket_fields" then File.join( @base_url, "ticket_fields.xml")
111
+ when "users" then File.join(@base_url, "contacts.xml")
112
+ when "forums" then File.join(@base_url + "categories.xml")
113
+ when "solutions" then File.join(@base_url + "solution/categories.xml")
114
+ when "companies" then File.join(@base_url + "customers.xml")
115
+ end
116
+ end
117
+
118
+ # match with the root name of xml document that freskdesk uses
119
+ def doc_name(name)
120
+ doc = case name
121
+ when "tickets" then "helpdesk_ticket"
122
+ when "ticket_fields" then "helpdesk-ticket-fields"
123
+ when "users" then "user"
124
+ when "companies" then "customer"
125
+ else raise StandardError, "No root object for this call"
126
+ end
127
+ end
128
+ end
129
+
130
+ #freshdesk = Freshdesk.new('http://onescreen.freshdesk.com', 'limanoit@gmail.com', '134658')
131
+ #response = freshdesk.post_users(:name => 'test', :email => 'test@143124test.com', :customer => "onescreen")
132
+ #response = freshdesk.post_users(:name=>'NirmitPatel', :email=>'f.last@onescreen.com', :customer=>'1000500nemo')
133
+ #puts response
metadata ADDED
@@ -0,0 +1,74 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: freshdesk
3
+ version: !ruby/object:Gem::Version
4
+ version: "0.1"
5
+ platform: ruby
6
+ authors:
7
+ - David Liman
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2012-02-22 00:00:00 -08:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: rest-client
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: "0"
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: nokogiri
27
+ type: :runtime
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: "0"
34
+ version:
35
+ description: Ruby Gem for interfacing with the Freshdesk API
36
+ email: limanoit@gmail.com
37
+ executables: []
38
+
39
+ extensions: []
40
+
41
+ extra_rdoc_files: []
42
+
43
+ files:
44
+ - lib/freshdesk.rb
45
+ has_rdoc: true
46
+ homepage: https://github.com/dvliman/freshdesk-api
47
+ licenses: []
48
+
49
+ post_install_message:
50
+ rdoc_options: []
51
+
52
+ require_paths:
53
+ - lib
54
+ required_ruby_version: !ruby/object:Gem::Requirement
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ version: "0"
59
+ version:
60
+ required_rubygems_version: !ruby/object:Gem::Requirement
61
+ requirements:
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ version: "0"
65
+ version:
66
+ requirements: []
67
+
68
+ rubyforge_project:
69
+ rubygems_version: 1.3.5
70
+ signing_key:
71
+ specification_version: 3
72
+ summary: Ruby Gem for interfacing with the Freshdesk API
73
+ test_files: []
74
+