zuora_api_oauth_alpha 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.
- checksums.yaml +7 -0
- data/Rakefile +6 -0
- data/lib/insights_api/login.rb +221 -0
- data/lib/zuora_api_oauth_alpha/exceptions.rb +86 -0
- data/lib/zuora_api_oauth_alpha/login.rb +707 -0
- data/lib/zuora_api_oauth_alpha/logins/basic.rb +139 -0
- data/lib/zuora_api_oauth_alpha/logins/oauth.rb +171 -0
- data/lib/zuora_api_oauth_alpha/version.rb +3 -0
- data/lib/zuora_api_oauth_alpha.rb +10 -0
- metadata +185 -0
@@ -0,0 +1,139 @@
|
|
1
|
+
module ZuoraAPI
|
2
|
+
class Basic < Login
|
3
|
+
attr_accessor :z_session_token
|
4
|
+
|
5
|
+
def initialize(**keyword_args)
|
6
|
+
super
|
7
|
+
end
|
8
|
+
|
9
|
+
def z_session_token=(val)
|
10
|
+
if !val.blank?
|
11
|
+
@z_session_token = val
|
12
|
+
self.current_session = @z_session_token
|
13
|
+
@stored_session_type = :basic
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def authentication_prefix(auth_type = :basic)
|
18
|
+
return "ZSession "
|
19
|
+
raise ZuoraAPI::Exceptions::ZuoraAPIAuthenticationTypeError.new("Basic Login, does not support Authentication of Type: #{auth_type}")
|
20
|
+
end
|
21
|
+
|
22
|
+
def check_session(auth_type = :basic)
|
23
|
+
return @z_session_token.blank?
|
24
|
+
end
|
25
|
+
|
26
|
+
def new_session(auth_type = :basic)
|
27
|
+
raise ZuoraAPI::Exceptions::ZuoraAPIAuthenticationTypeError.new("Basic Login, does not support Authentication of Type: #{auth_type}") if auth_type != :basic
|
28
|
+
begin
|
29
|
+
tries ||= 2
|
30
|
+
request = Nokogiri::XML::Builder.new do |xml|
|
31
|
+
xml['SOAP-ENV'].Envelope('xmlns:SOAP-ENV' =>"http://schemas.xmlsoap.org/soap/envelope/", 'xmlns:api' => "http://api.zuora.com/" ) do
|
32
|
+
if (self.password.blank? && !@z_session_token.blank?)
|
33
|
+
Rails.logger.debug("Method [Session]")
|
34
|
+
xml['SOAP-ENV'].Header do
|
35
|
+
xml['api'].SessionHeader do
|
36
|
+
xml['api'].session @z_session_token
|
37
|
+
end
|
38
|
+
end
|
39
|
+
xml['SOAP-ENV'].Body do
|
40
|
+
xml['api'].getUserInfo
|
41
|
+
end
|
42
|
+
else
|
43
|
+
xml['SOAP-ENV'].Header
|
44
|
+
xml['SOAP-ENV'].Body do
|
45
|
+
xml['api'].login do
|
46
|
+
xml['api'].username self.username
|
47
|
+
xml['api'].password self.password
|
48
|
+
xml['api'].entityId self.entity_id if !self.entity_id.blank?
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
input_xml = Nokogiri::XML(request.to_xml(:save_with => Nokogiri::XML::Node::SaveOptions::AS_XML | Nokogiri::XML::Node::SaveOptions::NO_DECLARATION).strip)
|
56
|
+
input_xml.xpath('//ns1:session', 'ns1' =>'http://api.zuora.com/').children.remove
|
57
|
+
Rails.logger.debug('Connect') {"Request SOAP XML: #{input_xml.to_xml(:save_with => Nokogiri::XML::Node::SaveOptions::AS_XML | Nokogiri::XML::Node::SaveOptions::NO_DECLARATION).strip}"}# if debug
|
58
|
+
|
59
|
+
@response_query = HTTParty.post(self.url,:body => request.to_xml, :headers => {'Content-Type' => "text/xml; charset=utf-8"}, :timeout => 10)
|
60
|
+
@output_xml = Nokogiri::XML(@response_query.body)
|
61
|
+
Rails.logger.debug('Connect') {"Response SOAP XML: #{@output_xml.to_xml(:save_with => Nokogiri::XML::Node::SaveOptions::AS_XML | Nokogiri::XML::Node::SaveOptions::NO_DECLARATION).strip}"}# if debug
|
62
|
+
|
63
|
+
if !@response_query.success?
|
64
|
+
@z_session_token = nil
|
65
|
+
if @output_xml.namespaces.size > 0 && @output_xml.xpath('//soapenv:Fault').size > 0
|
66
|
+
self.current_error = @output_xml.xpath('//fns:FaultMessage', 'fns' =>'http://fault.api.zuora.com/').text
|
67
|
+
if self.current_error.include?('deactivated')
|
68
|
+
self.status = 'Deactivated'
|
69
|
+
self.current_error = 'Deactivated user login, please check with Zuora tenant administrator'
|
70
|
+
self.errors[:username] = self.current_error
|
71
|
+
elsif self.current_error.include?('inactive')
|
72
|
+
self.status = 'Inactive'
|
73
|
+
self.current_error = 'Inactive user login, please check with Zuora tenant administrator'
|
74
|
+
self.errors[:username] = self.current_error
|
75
|
+
elsif self.current_error.include?("invalid username or password") || self.current_error.include?("Invalid login. User name and password do not match.")
|
76
|
+
self.status = 'Invalid Login'
|
77
|
+
self.current_error = 'Invalid login, please check username and password or URL endpoint'
|
78
|
+
self.errors[:username] = self.current_error
|
79
|
+
self.errors[:password] = self.current_error
|
80
|
+
elsif self.current_error.include?('unsupported version')
|
81
|
+
self.status = 'Unsupported API Version'
|
82
|
+
self.current_error = 'Unsupported API version, please verify URL endpoint'
|
83
|
+
self.errors[:url] = self.current_error
|
84
|
+
elsif self.current_error.include?('invalid api version')
|
85
|
+
self.status = 'Invalid API Version'
|
86
|
+
self.current_error = 'Invalid API version, please verify URL endpoint'
|
87
|
+
self.errors[:url] = self.current_error
|
88
|
+
elsif self.current_error.include?('invalid session')
|
89
|
+
self.status = 'Invalid Session'
|
90
|
+
self.current_error = 'Session invalid, please update session and verify URL endpoint'
|
91
|
+
self.errors[:session] = self.current_error
|
92
|
+
elsif self.current_error.include?('Your IP address')
|
93
|
+
self.status = 'Restricted IP'
|
94
|
+
self.current_error = 'IP restricted, contact Zuora tenant administrator and remove IP restriction'
|
95
|
+
self.errors[:base] = self.current_error
|
96
|
+
elsif self.current_error.include?('This account has been locked')
|
97
|
+
self.status = 'Locked'
|
98
|
+
self.current_error = 'Locked user login, please wait or navigate to Zuora to unlock user'
|
99
|
+
self.errors[:username] = self.current_error
|
100
|
+
else
|
101
|
+
self.status = 'Unknown'
|
102
|
+
self.current_error = @output_xml.xpath('//faultstring').text if self.current_error.blank?
|
103
|
+
self.errors[:base] = self.current_error
|
104
|
+
end
|
105
|
+
else
|
106
|
+
self.current_error = "Code = #{@response_query.code} Message = #{@response_query.body.to_s}"
|
107
|
+
self.status = 'No Service'
|
108
|
+
end
|
109
|
+
else
|
110
|
+
#If Session only is used for Gem TODO Depercate
|
111
|
+
if (self.password.blank? && @z_session_token.present?)
|
112
|
+
@z_session_token = @z_session_token
|
113
|
+
self.username = @output_xml.xpath('//ns1:Username', 'ns1' =>'http://api.zuora.com/').text if self.username.blank?
|
114
|
+
|
115
|
+
#Username & password combo
|
116
|
+
elsif (self.password.present? && self.username.present?)
|
117
|
+
retrieved_session = @output_xml.xpath('//ns1:Session', 'ns1' =>'http://api.zuora.com/').text
|
118
|
+
raise ZuoraAPI::Exceptions::ZuoraAPISessionError.new("No session found for api call.") if retrieved_session.blank?
|
119
|
+
@z_session_token = retrieved_session
|
120
|
+
end
|
121
|
+
|
122
|
+
self.current_error = nil
|
123
|
+
self.status = 'Active'
|
124
|
+
return @z_session_token
|
125
|
+
end
|
126
|
+
rescue Net::ReadTimeout, Net::OpenTimeout, Errno::EPIPE, Errno::ECONNRESET, Errno::ECONNREFUSED, SocketError => ex
|
127
|
+
if !(tries -= 1).zero?
|
128
|
+
Rails.logger.info {"#{ex.class} Timed out will retry after 5 seconds"}
|
129
|
+
sleep(self.timeout_sleep)
|
130
|
+
retry
|
131
|
+
else
|
132
|
+
self.current_error = "Request timed out. Try again"
|
133
|
+
self.status = 'Timeout'
|
134
|
+
return self.status
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
139
|
+
end
|
@@ -0,0 +1,171 @@
|
|
1
|
+
module ZuoraAPI
|
2
|
+
class Oauth < Login
|
3
|
+
attr_accessor :z_session_token, :oauth_session_expires_at, :oauth_client_id, :oauth_secret, :bearer_token, :stored_session_type, :authentication_order_preference
|
4
|
+
|
5
|
+
def initialize(oauth_client_id: nil, oauth_secret: nil, z_session_token: nil, bearer_token: nil, oauth_session_expires_at: nil, **keyword_args)
|
6
|
+
@supported_authentication_types = [:basic, :bearer]
|
7
|
+
self.z_session_token = z_session_token if z_session_token.present?
|
8
|
+
self.bearer_token = bearer_token if z_session_token.present?
|
9
|
+
self.oauth_session_expires_at = oauth_session_expires_at if z_session_token.present?
|
10
|
+
@oauth_client_id = oauth_client_id
|
11
|
+
@oauth_secret = oauth_secret
|
12
|
+
raise ZuoraAPI::Exceptions::ZuoraAPIAuthenticationTypeError.new("Request Oauth Login but either 'Oauth Client Id' or 'Oauth Secret' were not passed") if @oauth_client_id.blank? || @oauth_secret.blank?
|
13
|
+
super
|
14
|
+
end
|
15
|
+
|
16
|
+
def z_session_token=(val)
|
17
|
+
if !val.blank?
|
18
|
+
@z_session_token = val
|
19
|
+
self.current_session = @z_session_token
|
20
|
+
@stored_session_type = :basic
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def oauth_session_expires_at=(val)
|
25
|
+
@oauth_session_expires_at = val if !val.blank?
|
26
|
+
end
|
27
|
+
|
28
|
+
def bearer_token=(val)
|
29
|
+
if !val.blank?
|
30
|
+
@bearer_token = val
|
31
|
+
self.current_session = @bearer_token
|
32
|
+
@stored_session_type = :bearer
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def authentication_prefix(auth_type)
|
37
|
+
if auth_type == :bearer
|
38
|
+
return "Bearer "
|
39
|
+
elsif auth_type == :basic
|
40
|
+
return "ZSession "
|
41
|
+
else
|
42
|
+
raise ZuoraAPI::Exceptions::ZuoraAPIAuthenticationTypeError.new("Oauth Login, does not support Authentication of Type: #{auth_type}") if !@supported_authentication_types.include?(auth_type)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def check_session(auth_type = :basic)
|
47
|
+
raise ZuoraAPI::Exceptions::ZuoraAPIAuthenticationTypeError.new("Oauth Login, does not support Authentication of Type: #{auth_type}") if !@supported_authentication_types.include?(auth_type)
|
48
|
+
return true if (auth_type != @stored_session_type || @stored_session_type.nil?)
|
49
|
+
return false
|
50
|
+
end
|
51
|
+
|
52
|
+
def new_session(auth_type = :basic)
|
53
|
+
if auth_type == :basic
|
54
|
+
return get_z_session()
|
55
|
+
elsif auth_type == :bearer
|
56
|
+
return get_bearer_token()
|
57
|
+
else
|
58
|
+
raise ZuoraAPI::Exceptions::ZuoraAPIAuthenticationTypeError.new("Oauth Login, does not support Authentication of Type: #{auth_type}") if !@supported_authentication_types.include?(auth_type)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def get_z_session(debug = false)
|
63
|
+
begin
|
64
|
+
tries ||= 2
|
65
|
+
get_bearer_token()
|
66
|
+
if !@entity_id.nil?
|
67
|
+
response = HTTParty.get(self.rest_endpoint("connections"), headers: {:Authorization => "Bearer " + @bearer_token , :entityId => @entity_id })
|
68
|
+
else
|
69
|
+
response = HTTParty.get(self.rest_endpoint("connections"), headers: {:Authorization => "Bearer " + @bearer_token})
|
70
|
+
end
|
71
|
+
if JSON.parse(response.body)["success"] ##.to_bool
|
72
|
+
@z_session_token = response.headers.to_h['set-cookie'][0].split(';')[0].split('=',2)[1]
|
73
|
+
@stored_session_type = :basic
|
74
|
+
self.current_error = nil
|
75
|
+
self.status = 'Active'
|
76
|
+
else
|
77
|
+
self.current_error = JSON.parse(response.body)["reasons"][0]["message"]
|
78
|
+
self.status = "Invalid"
|
79
|
+
end
|
80
|
+
|
81
|
+
return @z_session_token
|
82
|
+
rescue ZuoraAPI::Exceptions::ZuoraAPISessionError => ex
|
83
|
+
if !(tries -= 1).zero? && z_session
|
84
|
+
Rails.logger.debug {"Session Invalid"}
|
85
|
+
self.new_session
|
86
|
+
retry
|
87
|
+
else
|
88
|
+
if errors.include?(ex.class)
|
89
|
+
raise ex
|
90
|
+
else
|
91
|
+
return [output_json, response]
|
92
|
+
end
|
93
|
+
end
|
94
|
+
rescue ZuoraAPI::Exceptions::ZuoraAPIError, ZuoraAPI::Exceptions::ZuoraAPIRequestLimit, ZuoraAPI::Exceptions::ZuoraAPILockCompetition => ex
|
95
|
+
if errors.include?(ex.class)
|
96
|
+
raise ex
|
97
|
+
else
|
98
|
+
return [output_json, response]
|
99
|
+
end
|
100
|
+
rescue Net::ReadTimeout, Net::OpenTimeout, Errno::EPIPE, Errno::ECONNRESET, Errno::ECONNREFUSED, SocketError => ex
|
101
|
+
if !(tries -= 1).zero?
|
102
|
+
Rails.logger.info {"#{ex.class} Timed out will retry after 5 seconds"}
|
103
|
+
sleep(self.timeout_sleep)
|
104
|
+
retry
|
105
|
+
else
|
106
|
+
self.current_error = "Request timed out. Try again"
|
107
|
+
self.status = 'Timeout'
|
108
|
+
return self.status
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
def get_bearer_token
|
114
|
+
begin
|
115
|
+
tries ||= 2
|
116
|
+
if !oauth_expired?
|
117
|
+
self.current_error = nil
|
118
|
+
self.status = 'Active'
|
119
|
+
else
|
120
|
+
encoded_url = URI.encode(self.rest_endpoint.chomp('v1/').concat('oauth/token'))
|
121
|
+
url = URI.parse(encoded_url)
|
122
|
+
response = HTTParty.post(url,:headers => {:content_type => "application/x-www-form-urlencoded"}, :body => {:client_id=>@oauth_client_id, :client_secret=>@oauth_secret, :grant_type=>"client_credentials"})
|
123
|
+
if JSON.parse(response.body)["error"].nil?
|
124
|
+
@bearer_token = JSON.parse(response.body)["access_token"]
|
125
|
+
@oauth_session_expires_at = Time.now.to_i + JSON.parse(response.body)["expires_in"].to_i
|
126
|
+
@stored_session_type = :bearer
|
127
|
+
self.current_error = nil
|
128
|
+
self.status = 'Active'
|
129
|
+
else
|
130
|
+
self.current_error = "Problem with the Credentials"
|
131
|
+
self.status = 'Invalid'
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
return @bearer_token
|
136
|
+
rescue ZuoraAPI::Exceptions::ZuoraAPISessionError => ex
|
137
|
+
if !(tries -= 1).zero? && z_session
|
138
|
+
Rails.logger.debug {"Session Invalid"}
|
139
|
+
self.new_session
|
140
|
+
retry
|
141
|
+
else
|
142
|
+
if errors.include?(ex.class)
|
143
|
+
raise ex
|
144
|
+
else
|
145
|
+
return [output_json, response]
|
146
|
+
end
|
147
|
+
end
|
148
|
+
rescue ZuoraAPI::Exceptions::ZuoraAPIError, ZuoraAPI::Exceptions::ZuoraAPIRequestLimit, ZuoraAPI::Exceptions::ZuoraAPILockCompetition => ex
|
149
|
+
if errors.include?(ex.class)
|
150
|
+
raise ex
|
151
|
+
else
|
152
|
+
return [output_json, response]
|
153
|
+
end
|
154
|
+
rescue Net::ReadTimeout, Net::OpenTimeout, Errno::EPIPE, Errno::ECONNRESET, Errno::ECONNREFUSED, SocketError => ex
|
155
|
+
if !(tries -= 1).zero?
|
156
|
+
Rails.logger.info {"#{ex.class} Timed out will retry after 5 seconds"}
|
157
|
+
sleep(self.timeout_sleep)
|
158
|
+
retry
|
159
|
+
else
|
160
|
+
self.current_error = "Request timed out. Try again"
|
161
|
+
self.status = 'Timeout'
|
162
|
+
return self.status
|
163
|
+
end
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
def oauth_expired?
|
168
|
+
return @oauth_session_expires_at.nil? ? true : (@oauth_session_expires_at < Time.now.to_i)
|
169
|
+
end
|
170
|
+
end
|
171
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
require 'rails'
|
2
|
+
require "zuora_api_oauth_alpha/login"
|
3
|
+
require "zuora_api_oauth_alpha/logins/basic"
|
4
|
+
require "zuora_api_oauth_alpha/logins/oauth"
|
5
|
+
require 'zuora_api_oauth_alpha/exceptions'
|
6
|
+
require "insights_api/login"
|
7
|
+
|
8
|
+
module ZuoraAPI
|
9
|
+
# Your code goes here...
|
10
|
+
end
|
metadata
ADDED
@@ -0,0 +1,185 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: zuora_api_oauth_alpha
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: '2'
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Zuora Strategic Solutions Group
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2018-04-03 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.12'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.12'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '3.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: webmock
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: simplecov
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: nokogiri
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 1.6.8
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 1.6.8
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: httparty
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :runtime
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: rubyzip
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: railties
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: 4.1.0
|
132
|
+
- - "<"
|
133
|
+
- !ruby/object:Gem::Version
|
134
|
+
version: '5.1'
|
135
|
+
type: :runtime
|
136
|
+
prerelease: false
|
137
|
+
version_requirements: !ruby/object:Gem::Requirement
|
138
|
+
requirements:
|
139
|
+
- - ">="
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: 4.1.0
|
142
|
+
- - "<"
|
143
|
+
- !ruby/object:Gem::Version
|
144
|
+
version: '5.1'
|
145
|
+
description: Gem that provides easy integration to Zuora
|
146
|
+
email:
|
147
|
+
- connect@zuora.com
|
148
|
+
executables: []
|
149
|
+
extensions: []
|
150
|
+
extra_rdoc_files: []
|
151
|
+
files:
|
152
|
+
- Rakefile
|
153
|
+
- lib/insights_api/login.rb
|
154
|
+
- lib/zuora_api_oauth_alpha.rb
|
155
|
+
- lib/zuora_api_oauth_alpha/exceptions.rb
|
156
|
+
- lib/zuora_api_oauth_alpha/login.rb
|
157
|
+
- lib/zuora_api_oauth_alpha/logins/basic.rb
|
158
|
+
- lib/zuora_api_oauth_alpha/logins/oauth.rb
|
159
|
+
- lib/zuora_api_oauth_alpha/version.rb
|
160
|
+
homepage: https://connect.zuora.com
|
161
|
+
licenses: []
|
162
|
+
metadata: {}
|
163
|
+
post_install_message:
|
164
|
+
rdoc_options: []
|
165
|
+
require_paths:
|
166
|
+
- lib
|
167
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
168
|
+
requirements:
|
169
|
+
- - ">="
|
170
|
+
- !ruby/object:Gem::Version
|
171
|
+
version: '0'
|
172
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
173
|
+
requirements:
|
174
|
+
- - ">="
|
175
|
+
- !ruby/object:Gem::Version
|
176
|
+
version: '0'
|
177
|
+
requirements: []
|
178
|
+
rubyforge_project:
|
179
|
+
rubygems_version: 2.7.4
|
180
|
+
signing_key:
|
181
|
+
specification_version: 4
|
182
|
+
summary: Gem that provides easy integration to Zuora | this is an unstable alpha release
|
183
|
+
and the connect team will not provide an commitment to the functionalilty until
|
184
|
+
a formal release of the gem
|
185
|
+
test_files: []
|