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.
- data/lib/freshdesk.rb +133 -0
- metadata +74 -0
data/lib/freshdesk.rb
ADDED
@@ -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
|
+
|