totango-api 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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 319205dcbe9eaa0bfbde43428407749ad5f0ddde
4
+ data.tar.gz: 4cd490393e07c57f0b4b7a10b08ebe8ffa51e82b
5
+ SHA512:
6
+ metadata.gz: 02ec7e07b79994109acc525ca4a156f7f4741f98ada1598a3bb7f9de818d3474cf047635744bc301514791a2bd8f67cb4f26db25d6c7588ead596fdb18109edc
7
+ data.tar.gz: 67baf4dae9d081ae520ed92bcb3889ddc5e8632e64ed5e5506ea38c9babbcc7ca5a488fa3d53539ba50b621595c1115baacd208b6b2834867803a14f35151a8e
@@ -0,0 +1,12 @@
1
+ require 'faraday'
2
+ require 'ostruct'
3
+ require 'date'
4
+ require 'yaml'
5
+
6
+
7
+ module Totango
8
+ end
9
+
10
+ require 'totango-api/client'
11
+ require 'totango-api/account'
12
+ require 'totango-api/user'
@@ -0,0 +1,108 @@
1
+ module Totango
2
+ class Account
3
+
4
+ def initialize(args = {})
5
+ @attributes = Hash.new(nil)
6
+ args.each {|k,v| self.send("#{k}=".to_sym,v)}
7
+ end
8
+
9
+ def id
10
+ @attributes["sdr_o"]
11
+ end
12
+ def id=(id)
13
+ @attributes["sdr_o"] = id
14
+ end
15
+
16
+ def ofid
17
+ @attributes["sdr_ofid"]
18
+ end
19
+ def ofid=(ofid)
20
+ @attributes["sdr_ofid"]=ofid
21
+ end
22
+
23
+ def account_name
24
+ @attributes["sdr_odn"]
25
+ end
26
+ def account_name=(name)
27
+ @attributes["sdr_odn"]=name
28
+ end
29
+
30
+ def create_date
31
+ @attributes["sdr_o_Create Date"]
32
+ end
33
+ def create_date=(date)
34
+ @attributes["sdr_o_Create Date"] = to_xmlschema(date)
35
+ end
36
+
37
+ def contract_renewal
38
+ @attributes["sdr_o_Contract Renewal Date"]
39
+ end
40
+ def contract_renewal=(date)
41
+ @attributes["sdr_o_Contract Renewal Date"] = to_xmlschema(date)
42
+ end
43
+
44
+ def contract_value
45
+ @attributes["sdr_o_Contract Value"]
46
+ end
47
+ def contract_value=(n)
48
+ @attributes["sdr_o_Contract value"] = n.to_i
49
+ end
50
+
51
+ def licenses
52
+ @attributes["sdr_o_Licenses"]
53
+ end
54
+ def licenses=(n)
55
+ @attributes["sdr_o_Licenses"] = n.to_i
56
+ end
57
+
58
+ def sales_manager
59
+ @attributes["sdr_o_Sales Manager"]
60
+ end
61
+ def sales_manager=(s)
62
+ @attributes["sdr_o_Sales Manager"]=s
63
+ end
64
+
65
+ def success_manager
66
+ @attributes["sdr_o_Success Manager"]
67
+ end
68
+ def success_manager=(s)
69
+ @attributes["sdr_o_Sucsess Manager"]=s
70
+ end
71
+
72
+ def status
73
+ @attributes["sdr_o_Status"]
74
+ end
75
+ def status=(s)
76
+ @attributes["sdr_o_Status"]=s
77
+ end
78
+
79
+ def attributes
80
+ @attributes.delete_if {|k,v| v.nil? }
81
+ end
82
+
83
+ def method_missing(s,*args)
84
+ m=s.to_s.sub(/=$/,"")
85
+ attr_name = "sdr_o.#{m}"
86
+ return @attributes[attr_name] = "#{args.join(" ")}" if args.length > 0
87
+ raise NoMethodError, "#{s.to_s} for #{self.class}" unless @attributes[attr_name]
88
+ return @attributes[attr_name]
89
+ end
90
+
91
+ private
92
+
93
+ def to_xmlschema(date)
94
+ xml_date = case date.class.to_s
95
+ when String
96
+ DateTime.parse(date)
97
+ when DateTime
98
+ date
99
+ when Time
100
+ date.to_datetime
101
+ when Date
102
+ date.to_datetime
103
+ end
104
+
105
+ return xml_date.xmlschema
106
+ end
107
+ end
108
+ end
@@ -0,0 +1,79 @@
1
+ module Totango
2
+ @error_proc = nil
3
+ @timeout = 10
4
+
5
+ def self.timeout; return @timeout; end
6
+ def self.timeout=(n); return @timeout=n; end
7
+
8
+ def self.on_error(&x); @error_proc = x; end
9
+ def self.error_proc; @error_proc; end
10
+
11
+ module Error
12
+ class InvalidEvent < Exception;end
13
+ class NoSID < Exception;end
14
+ class TotangoAPIError < Exception;end
15
+ end
16
+
17
+ class Client
18
+ attr :account, :user, :sid
19
+ def initialize(hash={})
20
+ @sid = hash[:sid] || hash["sid"] || nil
21
+ load_sid_from_file if @sid == nil
22
+ raise Totango::Error::NoSID, "No SID provided" unless @sid
23
+ @user_attributes = hash[:user] || hash["user"] || {}
24
+ @account_attributes = hash[:account] || hash["account"] || {}
25
+ @attributes = {}
26
+ @attributes["sdr_s"] = @sid
27
+ @attributes["sdr_a"] = hash[:action] || hash["action"]
28
+ @attributes["sdr_m"] = hash[:module] || hash["module"]
29
+ @account = Totango::Account.new(@account_attributes)
30
+ @user = Totango::User.new(@user_attributes)
31
+
32
+ @api = Faraday.new(url: "https://sdr.totango.com/") do |faraday|
33
+ faraday.response :logger # log requests to STDOUT
34
+ faraday.adapter Faraday.default_adapter # make requests with Net::HTTP
35
+ end
36
+ end
37
+
38
+ def attributes
39
+ @attributes.merge(@user.attributes).merge(@account.attributes)
40
+ end
41
+
42
+ def save
43
+ if valid? then
44
+ begin
45
+ Timeout.timeout(Totango.timeout) { @api.get '/pixel.gif/', self.attributes }
46
+ rescue Timeout::Error
47
+ Totango.error_proc.call("Timed out getting data from Totango.") unless Totango.error_proc == nil
48
+ rescue Exception => e
49
+ Totango.error_proc.call("Totango API error #{e.message}") unless Totango.error_proc == nil
50
+ end
51
+ else
52
+ raise Totango::Error::InvalidEvent
53
+ end
54
+ end
55
+
56
+ def valid?
57
+ return false if @account.id == nil
58
+ return false if @user.attributes.keys.grep(/sdr_u\./).count > 0 and @user.attributes["sdr_u"] == nil
59
+ return true
60
+ end
61
+
62
+ def self.create(args)
63
+ event = Client.new(args)
64
+ event.save
65
+ return event
66
+ end
67
+
68
+ private
69
+
70
+ def load_sid_from_file
71
+ if File.exist?("./config/totango.yml")
72
+ @sid = YAML.load_file("./config/totango.yml")["sid"]
73
+ end
74
+
75
+ return nil
76
+ end
77
+
78
+ end
79
+ end
@@ -0,0 +1,35 @@
1
+ module Totango
2
+ class User
3
+ def initialize(args = {})
4
+ @attributes = Hash.new(nil)
5
+ args.each {|k,v| self.send("#{k}=".to_sym,v)}
6
+ end
7
+
8
+ def id
9
+ @attributes["sdr_u"]
10
+ end
11
+ def id=(id)
12
+ @attributes["sdr_u"]=id
13
+ end
14
+
15
+ def name
16
+ @attributes["sdr_u.name"]
17
+ end
18
+ def name=(n)
19
+ @attributes["sdr_u.name"]=n
20
+ end
21
+
22
+ def method_missing(s,*args)
23
+ m=s.to_s.sub(/=$/,"")
24
+ attr_name = "sdr_u.#{m}"
25
+ return @attributes[attr_name] = "#{args.join(" ")}" if args.length > 0
26
+ raise NoMethodError, "#{s.to_s} for #{self.class}" unless @attributes[attr_name]
27
+ return @attributes[attr_name]
28
+ end
29
+
30
+ def attributes
31
+ @attributes.delete_if {|k,v| v.nil? }
32
+ end
33
+
34
+ end
35
+ end
metadata ADDED
@@ -0,0 +1,61 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: totango-api
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - James Paterni
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-02-19 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: faraday
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ description: A ruby wrapper for the totango API
28
+ email: james@ruby-code.com
29
+ executables: []
30
+ extensions: []
31
+ extra_rdoc_files: []
32
+ files:
33
+ - lib/totango-api.rb
34
+ - lib/totango-api/account.rb
35
+ - lib/totango-api/client.rb
36
+ - lib/totango-api/user.rb
37
+ homepage:
38
+ licenses:
39
+ - GPL-2.0
40
+ metadata: {}
41
+ post_install_message:
42
+ rdoc_options: []
43
+ require_paths:
44
+ - lib
45
+ required_ruby_version: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: '0'
50
+ required_rubygems_version: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ requirements: []
56
+ rubyforge_project:
57
+ rubygems_version: 2.4.5.1
58
+ signing_key:
59
+ specification_version: 4
60
+ summary: Totango-API
61
+ test_files: []