cloud_elements_connector 0.4.0

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 (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/cloud_elements_connector.rb +102 -0
  3. metadata +60 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: dcd275ca604064d7af0fff7082c4f75d88591c95
4
+ data.tar.gz: f10b4523ecba39715e2548fe8fee826b7accfd00
5
+ SHA512:
6
+ metadata.gz: 88cc49e397410fdb24726a4a5e1231a92d470c7cb365bc3c04b89f53a0b5494a95f3b322c5201ae73b2c7e4f2be76f7be7d9f6c8c9b9ad231937cd412e339250
7
+ data.tar.gz: 779a250c3523e3bd620b2df5b52c936a7c2a0e716d463d87eec0e7d949f737ef9f05067d7c682ce5a78c8bc2c1bde944f2a24ecf48c2c4f8bd9b505a162154e1
@@ -0,0 +1,102 @@
1
+ require 'httmultiparty'
2
+
3
+ class APIException < Exception
4
+ end
5
+
6
+ class CloudElementsConnector
7
+
8
+ =begin
9
+ Class that allows connection to the Cloud Elements API.
10
+ All connections are made through the invoke method.
11
+ It utilized HTTMultiParty to make http requests.
12
+ =end
13
+ class ElementsConnector
14
+
15
+ attr_accessor :api_endpoint
16
+
17
+ def initialize(api_endpoint='https://console.cloud-elements.com/elements/api-v1')
18
+ @api_endpoint = api_endpoint # Endpoint to hit the api. Defaults to production
19
+ @headers = Hash.new # Headers for some requests
20
+ @headers['Content-Type'] = 'application-json'
21
+ end
22
+
23
+ private
24
+
25
+ def process_request
26
+ # This will do error handling later
27
+ end
28
+
29
+ public
30
+
31
+ # This method conducts the http request and send back the response.
32
+ # It received a string containing the http method, a hash of query/body parameters
33
+ # and and optional list of file names for requests that deal with posting files.
34
+ def request(httpMethod, params, files)
35
+ case httpMethod
36
+ when 'get' then response = HTTMultiParty.get(@url, :headers => @headers, :query => params)
37
+ when 'post'
38
+ if files
39
+ files.each { |f| params[f] = File.new(f) }
40
+ @headers.delete(['Content-Type'])
41
+ response = HTTMultiParty.post(@url, :headers => @headers, :query => params)
42
+ @headers['Content-Type'] = 'application-json'
43
+ else
44
+ response = HTTMultiParty.post(@url, :headers => @headers, :body => params.to_json)
45
+ end
46
+ when 'put' then response = HTTMultiParty.put(@url, :headers => @headers, :body => params.to_json)
47
+ when 'delete' then response = HTTMultiParty.delete(@url, :headers => @headers, :body => params.to_json)
48
+ end
49
+
50
+ return response
51
+ end
52
+
53
+ # This method allows users to interact with the Elements API.
54
+ # It is essentially a copy of the Java ElementsConnector class.
55
+ def invoke(httpMethod, providerName, headers, apiMethodName, params=nil, files=nil, providerVersion='1')
56
+ @url = "#{@api_endpoint}/#{providerName}/#{providerVersion}/#{apiMethodName}"
57
+ if headers.class() == Hash
58
+ auth_string = "User #{headers[:user_secret]}, Organization #{headers[:organization_secret]}"
59
+ else
60
+ auth_string = "Element #{headers}"
61
+ end
62
+ @headers['Authorization'] = auth_string
63
+
64
+ return request(httpMethod, params, files)
65
+ end
66
+ end
67
+
68
+
69
+ def initialize(providerName, elementToken, base_url='https://console.cloud-elements.com/elements/api-v1/')
70
+ apidocs = HTTMultiParty.get(base_url+providerName)
71
+ if apidocs.has_key? 'errorMsg'
72
+ raise APIException.new "Element Hub for #{providerName} does not exist"
73
+ end
74
+
75
+ method_data = []
76
+ method_count = 0
77
+ apidocs['apis'].each do |api|
78
+ method_data[method_count] = Hash.new
79
+
80
+ method_data[method_count][:elementToken] = elementToken
81
+ method_data[method_count][:providerName] = providerName
82
+
83
+ method_data[method_count][:apiMethodName] = api['path'].split('/')[-1]
84
+ method_data[method_count][:httpMethod] = api['operations'][0]["httpMethod"].downcase()
85
+ method_count = method_count + 1
86
+ end
87
+
88
+ method_data.each do |data|
89
+ define_singleton_method data[:apiMethodName] do |params=nil, files=nil|
90
+ client = ElementsConnector.new
91
+ return client.invoke(data[:httpMethod], data[:providerName], data[:elementToken], data[:apiMethodName], params, files)
92
+ end
93
+ end
94
+
95
+ if self.respond_to? :ping
96
+ response = self.ping
97
+ if not response['success']
98
+ raise APIException.new response['errorMsg']
99
+ end
100
+ end
101
+ end
102
+ end
metadata ADDED
@@ -0,0 +1,60 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cloud_elements_connector
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.4.0
5
+ platform: ruby
6
+ authors:
7
+ - Christian Rodriguez
8
+ - Josh Wyse
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2014-01-13 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: httmultiparty
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - '='
19
+ - !ruby/object:Gem::Version
20
+ version: 0.3.10
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - '='
26
+ - !ruby/object:Gem::Version
27
+ version: 0.3.10
28
+ description: Cloud Elements Connector. Allows you to interact with the Cloud Elements
29
+ API. More info on the API at cloud-elements.com
30
+ email: christian.etpr10@gmail.com
31
+ executables: []
32
+ extensions: []
33
+ extra_rdoc_files: []
34
+ files:
35
+ - lib/cloud_elements_connector.rb
36
+ homepage: https://github.com/cloud-elements/elements-connector-ruby
37
+ licenses:
38
+ - MIT
39
+ metadata: {}
40
+ post_install_message:
41
+ rdoc_options: []
42
+ require_paths:
43
+ - lib
44
+ required_ruby_version: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ required_rubygems_version: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ requirements: []
55
+ rubyforge_project:
56
+ rubygems_version: 2.2.2
57
+ signing_key:
58
+ specification_version: 4
59
+ summary: Cloud Elements Connector
60
+ test_files: []