sirportly 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,41 @@
1
+ require 'uri'
2
+ require 'net/https'
3
+ require 'json'
4
+
5
+ require 'sirportly/request'
6
+ require 'sirportly/ticket'
7
+ require 'sirportly/knowledge_base'
8
+ require 'sirportly/objects'
9
+
10
+ module Sirportly
11
+ class << self
12
+
13
+ ## Returns the current version number for the Sirportly API client.
14
+ def version
15
+ "1.0.0-beta"
16
+ end
17
+
18
+ ## Stores authentication details
19
+ attr_accessor :token
20
+ attr_accessor :secret
21
+
22
+ ## Allow the domain to be changed
23
+ attr_writer :domain
24
+
25
+ ## Returns the domain which should be used to query the API
26
+ def domain
27
+ @domain ||= 'https://app.sirportly.com'
28
+ end
29
+
30
+ end
31
+
32
+ ## Various error classes to raise
33
+ class Error < StandardError; end
34
+ module Errors
35
+ class ServiceUnavailable < Error; end
36
+ class AccessDenied < Error; end
37
+ class NotFound < Error; end
38
+ class CommunicationError < Error; end
39
+ end
40
+
41
+ end
@@ -0,0 +1,54 @@
1
+ module Sirportly
2
+ class KnowledgeBase
3
+
4
+ attr_accessor :id
5
+
6
+ class << self
7
+
8
+ def list
9
+ Request.request('knowledge/list')
10
+ end
11
+
12
+ def find_by_id(id)
13
+ Request.request('knowledge/tree', :kb => id)
14
+ self.new(id)
15
+ rescue Errors::NotFound
16
+ false
17
+ end
18
+
19
+ end
20
+
21
+ def initialize(id)
22
+ self.id = id
23
+ end
24
+
25
+ def page(path)
26
+ request('page', :path => path)
27
+ end
28
+
29
+ def tree
30
+ request('tree')
31
+ end
32
+
33
+ def add_page(options = {})
34
+ request('add_page', options)
35
+ end
36
+
37
+ def edit_page(path, options = {})
38
+ options[:path] = path
39
+ request('edit_page', options)
40
+ end
41
+
42
+ def delete_page(path)
43
+ request('delete_page', :path => path)
44
+ end
45
+
46
+ private
47
+
48
+ def request(path, options = {})
49
+ options[:kb] = self.id
50
+ Request.request('knowledge/'+path, options)
51
+ end
52
+
53
+ end
54
+ end
@@ -0,0 +1,47 @@
1
+ module Sirportly
2
+ class Objects
3
+ class << self
4
+
5
+ def statuses
6
+ Request.request('objects/statuses')
7
+ end
8
+
9
+ def priorities
10
+ Request.request('objects/priorities')
11
+ end
12
+
13
+ def users
14
+ Request.request('objects/users')
15
+ end
16
+
17
+ def teams
18
+ Request.request('objects/teams')
19
+ end
20
+
21
+ def brands
22
+ Request.request('objects/brands')
23
+ end
24
+
25
+ def departments(brand_id = nil)
26
+ if brand_id
27
+ begin
28
+ Request.request('objects/departments', :brand_id => brand_id.to_i)
29
+ rescue Errors::NotFound
30
+ false
31
+ end
32
+ else
33
+ Request.request('objects/departments')
34
+ end
35
+ end
36
+
37
+ def escalation_paths
38
+ Request.request('objects/escalation_paths')
39
+ end
40
+
41
+ def slas
42
+ Request.request('objects/slas')
43
+ end
44
+
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,72 @@
1
+ module Sirportly
2
+ class Request
3
+
4
+ def self.request(path, data = {})
5
+ req = self.new(path, :post)
6
+ req.data = data
7
+ req.make && req.success? ? req.output : false
8
+ end
9
+
10
+ attr_reader :path, :method
11
+ attr_accessor :data
12
+
13
+ def initialize(path, method = :get)
14
+ @path = path
15
+ @method = method
16
+ end
17
+
18
+ def success?
19
+ @success || false
20
+ end
21
+
22
+ def output
23
+ @output || nil
24
+ end
25
+
26
+ def make
27
+ uri = URI.parse([Sirportly.domain, "api/v1", @path].join('/'))
28
+ http_request = http_class.new(uri.request_uri)
29
+ http_request.add_field("X-Auth-Token", Sirportly.token)
30
+ http_request.add_field("X-Auth-Secret", Sirportly.secret)
31
+ http_request.set_form_data(@data)
32
+
33
+ http = Net::HTTP.new(uri.host, uri.port)
34
+
35
+ if uri.scheme == 'https'
36
+ http.use_ssl = true
37
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE
38
+ end
39
+
40
+ http_result = http.request(http_request)
41
+ @output = JSON.parse(http_result.body)
42
+ @success = case http_result
43
+ when Net::HTTPSuccess
44
+ true
45
+ when Net::HTTPServiceUnavailable
46
+ raise Sirportly::Errors::ServiceUnavailable
47
+ when Net::HTTPForbidden, Net::HTTPUnauthorized
48
+ raise Sirportly::Errors::AccessDenied, "Access Denied for '#{Sirportly.token}'"
49
+ when Net::HTTPNotFound
50
+ raise Sirportly::Errors::NotFound, "Not Found at #{uri.to_s}"
51
+ when Net::HTTPClientError
52
+ @output
53
+ else
54
+ raise Sirportly::Errors::CommunicationError, http_result.body
55
+ end
56
+ self
57
+ end
58
+
59
+ private
60
+
61
+ def http_class
62
+ case @method
63
+ when :post then Net::HTTP::Post
64
+ when :put then Net::HTTP::Put
65
+ when :delete then Net::HTTP::Delete
66
+ else
67
+ Net::HTTP::Get
68
+ end
69
+ end
70
+
71
+ end
72
+ end
@@ -0,0 +1,27 @@
1
+ module Sirportly
2
+ class Ticket
3
+
4
+ class << self
5
+
6
+ def find_by_reference(reference)
7
+ Request.request('tickets/ticket', :reference => reference)
8
+ rescue Errors::NotFound
9
+ false
10
+ end
11
+
12
+ def execute_spql(query)
13
+ Request.request('tickets/spql', :spql => query)
14
+ end
15
+
16
+ def submit(options)
17
+ Request.request('tickets/submit', options)
18
+ end
19
+
20
+ def update(reference, options)
21
+ options.merge!(:ticket => reference)
22
+ Request.request('tickets/post_update', options)
23
+ end
24
+
25
+ end
26
+ end
27
+ end
metadata ADDED
@@ -0,0 +1,49 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sirportly
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Adam Cooke
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-01-26 00:00:00.000000000Z
13
+ dependencies: []
14
+ description:
15
+ email: adam@atechmedia.com
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - lib/sirportly.rb
21
+ - lib/sirportly/knowledge_base.rb
22
+ - lib/sirportly/objects.rb
23
+ - lib/sirportly/request.rb
24
+ - lib/sirportly/ticket.rb
25
+ homepage: http://www.sirportly.com
26
+ licenses: []
27
+ post_install_message:
28
+ rdoc_options: []
29
+ require_paths:
30
+ - lib
31
+ required_ruby_version: !ruby/object:Gem::Requirement
32
+ none: false
33
+ requirements:
34
+ - - ! '>='
35
+ - !ruby/object:Gem::Version
36
+ version: '0'
37
+ required_rubygems_version: !ruby/object:Gem::Requirement
38
+ none: false
39
+ requirements:
40
+ - - ! '>='
41
+ - !ruby/object:Gem::Version
42
+ version: '0'
43
+ requirements: []
44
+ rubyforge_project:
45
+ rubygems_version: 1.8.10
46
+ signing_key:
47
+ specification_version: 3
48
+ summary: Easy to use client library for Sirportly
49
+ test_files: []