zuora_connect 0.0.8.7 → 0.0.8.8

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 81ebef5be131dc140b59f694e5649d8fa2dd04d3
4
- data.tar.gz: 110eacfd8172a36046b6f3e34e02a829041b9de2
3
+ metadata.gz: cb571a97d8681a301ca314a1d95f3549ccad57ba
4
+ data.tar.gz: 7d2fe3929a59033b06e2fbc6e31b0cc192160eca
5
5
  SHA512:
6
- metadata.gz: b1c6e202b1a03d019b99f235609f3611089c131975c16d900161ef92e65fc3c1674788f8c1820a6186a683854b71f990c320f6e2335ce6afafbec82856de7b38
7
- data.tar.gz: 04456991c5d73a8da3dcd3a9dd172e3176b5267bbf8edb6e6fcaa7b7b9b5528ab30d7294d1019903d7f3065c4f2e103461bf122bb65c2e5d8bf6944d0864908b
6
+ metadata.gz: cbbea8478bfe96f32c74774b472abf0f558ea3eacd1653ba39307f7f0b6371598fdf6a2b22466c242ad1d9301f2651fb62e836b419346f26160a6036098e64e9
7
+ data.tar.gz: b7180a6de4307a4dd42b167e0703da65fe60e444be0bb260216485515d77b1216d58025fbc22c95a420f698cd32ebdce0e01d4b5de299daf5e9b32bbbf94fc5f
@@ -1,18 +1,32 @@
1
1
  module ZuoraConnect
2
2
  class AppInstance < ActiveRecord::Base
3
3
  after_initialize :init
4
- attr_accessor :user, :pass, :options, :mode, :logins, :valid, :task_data, :last_refresh
4
+ attr_accessor :options, :mode, :logins, :valid, :task_data, :last_refresh, :username, :password
5
5
 
6
6
  def init
7
7
  @options = Hash.new
8
8
  @logins = Hash.new
9
+ @valid = false
9
10
  Apartment::Migrator.migrate(self.id)
10
11
  Apartment::Tenant.switch!(self.id)
12
+
13
+ ## DEV MODE TASK DATA MOCKUP
14
+ if ZuoraConnect.configuration.mode != "Production"
15
+ self.options = ZuoraConnect.configuration.dev_mode_options
16
+ ZuoraConnect.configuration.dev_mode_logins.each do |k,v|
17
+ tmp = ZuoraConnect::Login.new(v)
18
+ self.logins[k] = tmp
19
+ self.attr_builder(k, tmp)
20
+ end
21
+ self.mode = ZuoraConnect.configuration.dev_mode_mode
22
+ end
23
+ ###
11
24
  end
12
25
 
13
- def new_session(user, password, session = {})
14
- @user = user
15
- @pass = password
26
+ def new_session(session: {}, username: self.access_token, password: self.refresh_token)
27
+ @username = username
28
+ @password = password
29
+ @last_refresh = session["#{self.id}::last_refresh"]
16
30
  if session.nil? || (!session.nil? && self.id != session["appInstance"].to_i) || session["#{self.id}::task_data"].blank? || ( session["#{self.id}::last_refresh"].blank? || session["#{self.id}::last_refresh"].to_i < ZuoraConnect.configuration.timeout.ago.to_i )
17
31
  Rails.logger.debug("REFRESHING - Session Nil") if session.nil?
18
32
  Rails.logger.debug("REFRESHING - AppInstance ID does not match session id") if (!session.nil? && self.id != session["appInstance"].to_i)
@@ -40,20 +54,20 @@ module ZuoraConnect
40
54
  end
41
55
 
42
56
  def updateOption(optionId, value)
43
- if @user && @pass
44
- return HTTParty.get(ZuoraConnect.configuration.url + "/api/v1/tools/application_options/#{optionId}/edit?value=#{value}",:basic_auth => auth = {:username => user, :password => password})
57
+ if self.access_token && self.refresh_token
58
+ return HTTParty.get(ZuoraConnect.configuration.url + "/api/v1/tools/application_options/#{optionId}/edit?value=#{value}",:basic_auth => auth = {:username => self.username, :password => self.password})
45
59
  else
46
60
  return false
47
61
  end
48
62
  end
49
63
 
50
64
  def refresh(session = nil)
51
- response = HTTParty.get(ZuoraConnect.configuration.url + "/api/v1/tools/tasks/#{self.id}.json",:basic_auth => auth = {:username => self.user, :password => self.pass})
65
+ response = HTTParty.get(ZuoraConnect.configuration.url + "/api/v1/tools/tasks/#{self.id}.json",:basic_auth => auth = {:username => self.username, :password => self.password})
52
66
  if response.code == 200
53
67
  @last_refresh = Time.now.to_i
54
68
  build_task(JSON.parse(response.body), session)
55
69
  else
56
- raise "Unauthorized"
70
+ raise ZuoraConnect::Exceptions::ConnectCommunicationError.new("Error Communicating with Connect", response.body, response.code)
57
71
  end
58
72
  end
59
73
 
@@ -0,0 +1,6 @@
1
+ class AddTokensToAppInstance < ActiveRecord::Migration
2
+ def change
3
+ add_column :zuora_connect_app_instances, :access_token, :string
4
+ add_column :zuora_connect_app_instances, :refresh_token, :string
5
+ end
6
+ end
data/lib/zuora_connect.rb CHANGED
@@ -1,7 +1,9 @@
1
1
  require 'zuora_connect/configuration'
2
2
  require "zuora_connect/engine"
3
+ require 'zuora_connect/exceptions'
3
4
  require 'zuora_connect/controllers/helpers'
4
5
  require 'zuora_connect/views/helpers'
6
+
5
7
  module ZuoraConnect
6
8
  class << self
7
9
  attr_accessor :configuration
@@ -10,10 +10,12 @@ module ZuoraConnect
10
10
  @invalid_app_instance_error_path = '/connect/invalid_instance'
11
11
  @url = "https://connect.zuora.com/"
12
12
  @mode = "Production"
13
+ @private_key = "-----BEGIN RSA PRIVATE KEY-----\nMIIEpgIBAAKCAQEA3PlAZWUbyvBSVU9GZxQM+brbwDfecsrFXJIbEvV76LVfFuTO\nDbyMPyuM0SBEAskb79wqNsn5JD0edCwmvZ+/Kn83b8SFkFW3f1tUxA0zFdVuqKP2\nJk1vms97yvOUveDjv22gYVMJYcSAFEzg9D9fUvTRocuBWQdbTq1cyJL+LYs9bUpl\nMB4oIUZuQ5nYz66y2gLlF0yUFNAfLpaCyaJvAmN93bPWTPfaKf+PMtkWCMQJQ3w+\nGvsudynLyE0ZgLx5mfM18h08iTMl61sUawyUEYNPm71Q6er9TB7oiOt3RT7ncw9P\nN+jzdklEphPp+1RaK35joPLQZjZl3Nh/XZg5eQIDAQABAoIBAQCJB+SgPDgk/C0C\njDurdmqpfvABXmQLKaWER3KUqjjh0X+bUd5Z9F/AWMBley3R0GcLsqtW+J8QkvpM\nroiDtQm2T9fP7r2pCQ7W4otJXKoeUxHhcHQXwpOAHES3UaAes9RoBJKdaAH8Z//J\nFve1X4s8hWdufyXCUOaVfrp4A3euQ3BYkb1n6yCnaEclG/evX6VM5jYMuHSDH0AS\nRUAMotuNvoLEIweNjWIolrKBEe+ZA6Rz6UaSoOxoNl8qWWOMsQvKzWfzHOA/YMnn\n9TN3AR10XYhWVjzNWL2dN1Jh4aD3d0byzImuhnCdIsIkTmS5aogl3/iFDce+9+kF\nLnkH5PuRAoGBAPiXQZdXHu7HwuQvZdb+2kII4kVLyLRM6v81rmXZr7pBUWrdpezy\nnFDj8OumSml4cKOLDUTAj/2/Hjs1o3JVGZqD0EbVrfIF0LZ3LzHb0rAae0uoyG7S\ny+2Y8wjLP53RogdZMA+6uoozEPM7yAp04d+rVPQY8i6JwGQmRYh7xSSlAoGBAOOP\nRssUBabZX13gQQ3BsO28g4HTEiFuqgAvGG/44Xbf74IRQiOT6ZaNYELvgaZT+RW2\nbp5E+T15Qe+SHHdxJhv3wtsnAw7yno1BmHpkAs1mEjjGFbNMF84YcRWSRU09g9Pm\nORhAc4lCFxHh7LnGsI1bgcPOYuFDRSHjYEy6y6VFAoGBAOiE8kEQqEpIZy7wdp1m\nu9fQX3TZsd2TpKsaFwoFV60rs2/16mF7fGLdElgYrrmAgjs2sS6Bvy1lOm2/eiZT\nGyO/72ySKaWbcuF5EZfdOXCnFHRsZy3h1gVjbs/m7JY9owSkk6Pi0OC7aztXy4Cc\nWznPFCNNwhltl5sVgSxsOLZRAoGBAJcPOI581xegevdFc8nfB0V5+86FwCZjYQTI\nPq+uBnW0SDkOndoiSVEAvqMQfP9eBR7NwPbdkJqnUQbo9m6vtP2h5j820YfttSTO\nI5szosyY8oWvsR4Z6D+O6BrKw6h3qnhS/xnDRy8ZqVjcohnc9LyRvz2tVuR0lILf\nfsDQy3kFAoGBAOm3N39RR7BwOMWIbe0Pk/ohJJdKwzsd1t1WyuXjAHJGdhMXkjl5\n9T1UsrouUr6qr545FNwEXktjmJ0IuqwypBC7B9kezKJlNTsZxmtcl7HfIFFOade7\nvrPHAAHPHSvCRcUPcFG1PDnFno66dXFOZwMo7W2lN+xTXuO0EvBAlW9P\n-----END RSA PRIVATE KEY-----\n"
14
+
15
+ # DEV MODE OPTIONS
13
16
  @dev_mode_logins = { "target_login" => {"tenant_type" => "Zuora", "username" => "user", "password" => "pass", "url" => "url"} }
14
17
  @dev_mode_options = {"name" => {"config_name" => "name", "datatype" => "type", "value" => "value"}}
15
18
  @dev_mode_mode = "Universal"
16
- @private_key = "-----BEGIN RSA PRIVATE KEY-----\nMIIEpgIBAAKCAQEA3PlAZWUbyvBSVU9GZxQM+brbwDfecsrFXJIbEvV76LVfFuTO\nDbyMPyuM0SBEAskb79wqNsn5JD0edCwmvZ+/Kn83b8SFkFW3f1tUxA0zFdVuqKP2\nJk1vms97yvOUveDjv22gYVMJYcSAFEzg9D9fUvTRocuBWQdbTq1cyJL+LYs9bUpl\nMB4oIUZuQ5nYz66y2gLlF0yUFNAfLpaCyaJvAmN93bPWTPfaKf+PMtkWCMQJQ3w+\nGvsudynLyE0ZgLx5mfM18h08iTMl61sUawyUEYNPm71Q6er9TB7oiOt3RT7ncw9P\nN+jzdklEphPp+1RaK35joPLQZjZl3Nh/XZg5eQIDAQABAoIBAQCJB+SgPDgk/C0C\njDurdmqpfvABXmQLKaWER3KUqjjh0X+bUd5Z9F/AWMBley3R0GcLsqtW+J8QkvpM\nroiDtQm2T9fP7r2pCQ7W4otJXKoeUxHhcHQXwpOAHES3UaAes9RoBJKdaAH8Z//J\nFve1X4s8hWdufyXCUOaVfrp4A3euQ3BYkb1n6yCnaEclG/evX6VM5jYMuHSDH0AS\nRUAMotuNvoLEIweNjWIolrKBEe+ZA6Rz6UaSoOxoNl8qWWOMsQvKzWfzHOA/YMnn\n9TN3AR10XYhWVjzNWL2dN1Jh4aD3d0byzImuhnCdIsIkTmS5aogl3/iFDce+9+kF\nLnkH5PuRAoGBAPiXQZdXHu7HwuQvZdb+2kII4kVLyLRM6v81rmXZr7pBUWrdpezy\nnFDj8OumSml4cKOLDUTAj/2/Hjs1o3JVGZqD0EbVrfIF0LZ3LzHb0rAae0uoyG7S\ny+2Y8wjLP53RogdZMA+6uoozEPM7yAp04d+rVPQY8i6JwGQmRYh7xSSlAoGBAOOP\nRssUBabZX13gQQ3BsO28g4HTEiFuqgAvGG/44Xbf74IRQiOT6ZaNYELvgaZT+RW2\nbp5E+T15Qe+SHHdxJhv3wtsnAw7yno1BmHpkAs1mEjjGFbNMF84YcRWSRU09g9Pm\nORhAc4lCFxHh7LnGsI1bgcPOYuFDRSHjYEy6y6VFAoGBAOiE8kEQqEpIZy7wdp1m\nu9fQX3TZsd2TpKsaFwoFV60rs2/16mF7fGLdElgYrrmAgjs2sS6Bvy1lOm2/eiZT\nGyO/72ySKaWbcuF5EZfdOXCnFHRsZy3h1gVjbs/m7JY9owSkk6Pi0OC7aztXy4Cc\nWznPFCNNwhltl5sVgSxsOLZRAoGBAJcPOI581xegevdFc8nfB0V5+86FwCZjYQTI\nPq+uBnW0SDkOndoiSVEAvqMQfP9eBR7NwPbdkJqnUQbo9m6vtP2h5j820YfttSTO\nI5szosyY8oWvsR4Z6D+O6BrKw6h3qnhS/xnDRy8ZqVjcohnc9LyRvz2tVuR0lILf\nfsDQy3kFAoGBAOm3N39RR7BwOMWIbe0Pk/ohJJdKwzsd1t1WyuXjAHJGdhMXkjl5\n9T1UsrouUr6qr545FNwEXktjmJ0IuqwypBC7B9kezKJlNTsZxmtcl7HfIFFOade7\nvrPHAAHPHSvCRcUPcFG1PDnFno66dXFOZwMo7W2lN+xTXuO0EvBAlW9P\n-----END RSA PRIVATE KEY-----\n"
17
19
  end
18
20
  end
19
21
  end
@@ -4,90 +4,100 @@ module ZuoraConnect
4
4
  module Helpers
5
5
  extend ActiveSupport::Concern
6
6
 
7
+ def instance_data_lookup(id = nil, user = nil)
8
+ return session.blank? ? {} : session
9
+ end
10
+
11
+ def authenticate_app_api_request
12
+ authenticate_or_request_with_http_basic do |username, password|
13
+ @appinstance = ZuoraConnect::AppInstance.find(params[:instance_id])
14
+ @appinstance.new_session(:session => {}, :username => username, :password => password)
15
+ return @appinstance.valid
16
+ end
17
+ end
7
18
 
8
19
  def authenticate_connect_app_request
9
20
  if ZuoraConnect.configuration.mode == "Production"
10
- instance_id = process_encrypted_response
11
- if session["appInstance"]
12
- if ZuoraConnect::AppInstance.where(:id => instance_id).size == 0
13
- Apartment::Tenant.switch!("public")
14
- Apartment::Tenant.create(instance_id)
15
- ZuoraConnect::AppInstance.create!(:id => instance_id )
16
- end
17
- @appinstance = ZuoraConnect::AppInstance.find(instance_id)
18
- begin
19
- @appinstance.new_session(session["#{instance_id}::user"], session["#{instance_id}::key"], session)
20
- I18n.locale = session["#{instance_id}::user::locale"] ? session["#{instance_id}::user::locale"] : ZuoraConnect.configuration.default_locale
21
- Time.zone = session["#{instance_id}::user::timezone"] ? session["#{instance_id}::user::timezone"] : ZuoraConnect.configuration.default_time_zone
22
- rescue
23
- redirect_to ZuoraConnect.configuration.session_error_path
24
- end
21
+ if request["data"]
22
+ setup_instance_via_data
25
23
  else
26
- redirect_to ZuoraConnect.configuration.invalid_app_instance_error_path
24
+ setup_instance_via_session
27
25
  end
26
+ @appinstance.new_session(:session =>instance_data_lookup(@appinstance.id, @appinstance.access_token))
27
+ I18n.locale = session["#{@appinstance.id}::user::locale"] ? session["#{@appinstance.id}::user::locale"] : ZuoraConnect.configuration.default_locale
28
+ Time.zone = session["#{@appinstance.id}::user::timezone"] ? session["#{@appinstance.id}::user::timezone"] : ZuoraConnect.configuration.default_time_zone
28
29
  else
29
- dev_mode
30
- instance_id = session["appInstance"].to_i
31
- if session["appInstance"]
32
- if ZuoraConnect::AppInstance.where(:id => instance_id).size == 0
33
- Apartment::Tenant.switch!("public")
34
- Apartment::Tenant.create(instance_id)
35
- ZuoraConnect::AppInstance.create!(:id => instance_id )
36
- end
37
- @appinstance = ZuoraConnect::AppInstance.find(instance_id)
38
- else
39
- redirect_to "/500.html"
40
- end
41
- @appinstance.options = ZuoraConnect.configuration.dev_mode_options
42
- ZuoraConnect.configuration.dev_mode_logins.each do |k,v|
43
- tmp = ZuoraConnect::Login.new(v)
44
- tmp.client.current_session = session["#{@appinstance.id}::#{k}:session"] if !session.nil? && v["tenant_type"] == "Zuora" && session["#{@appinstance.id}::#{k}:session"]
45
- @appinstance.logins[k] = tmp
46
- @appinstance.attr_builder(k, tmp)
47
- end
48
- @appinstance.mode = ZuoraConnect.configuration.dev_mode_mode
30
+ setup_instance_via_dev_mode
31
+ I18n.locale = session["#{@appinstance.id}::user::locale"] ? session["#{@appinstance.id}::user::locale"] : ZuoraConnect.configuration.default_locale
32
+ Time.zone = session["#{@appinstance.id}::user::timezone"] ? session["#{@appinstance.id}::user::timezone"] : ZuoraConnect.configuration.default_time_zone
49
33
  end
34
+ Thread.current[:appinstance] = @appinstance
50
35
  end
51
36
 
52
37
  def persist_connect_app_session
53
38
  session.merge!(@appinstance.save_data)
54
39
  end
55
40
 
41
+ def check_connect_admin!
42
+ raise ZuoraConnect::Exceptions::AccessDenied.new("User is not an authorized admin for this application") if !session["#{@appinstance.id}::admin"]
43
+ end
44
+
56
45
  def check_connect_admin
57
- redirect_to "/500.html" if !session["#{@appinstance.id}::admin"]
46
+ return session["#{@appinstance.id}::admin"]
58
47
  end
59
48
 
60
49
  private
61
- def process_encrypted_response
50
+ def setup_instance_via_data
62
51
  session["valid"] |= false
63
- if request["data"]
64
- reset_session
65
- values = JSON.parse(ZuoraConnect::AppInstance.decrypt_response(Base64.urlsafe_decode64(request["data"])))
66
- if values["param_data"]
67
- values["param_data"].each do |k ,v|
68
- params[k] = v
69
- end
70
- end
71
- session["#{values["appInstance"]}::destroy"] = values["destroy"]
72
- session["#{values["appInstance"]}::user"] = values["user"]
73
- session["#{values["appInstance"]}::key"] = values["key"]
74
- session["#{values["appInstance"]}::valid"] = false
75
- session["appInstance"] = values["appInstance"]
76
- if values["current_user"]
77
- session["#{values["appInstance"]}::admin"] = values["current_user"]["admin"] ? values["current_user"]["admin"] : false
78
- session["#{values["appInstance"]}::user::timezone"] = values["current_user"]["timezone"]
79
- session["#{values["appInstance"]}::user::locale"] = values["current_user"]["locale"]
80
- session["#{values["appInstance"]}::user::email"] = values["current_user"]["email"]
52
+ reset_session
53
+ values = JSON.parse(ZuoraConnect::AppInstance.decrypt_response(Base64.urlsafe_decode64(request["data"])))
54
+ if values["param_data"]
55
+ values["param_data"].each do |k ,v|
56
+ params[k] = v
81
57
  end
82
58
  end
83
- return session["appInstance"]
59
+ session["#{values["appInstance"]}::destroy"] = values["destroy"]
60
+ session["#{values["appInstance"]}::valid"] = false
61
+ session["appInstance"] = values["appInstance"]
62
+ if values["current_user"]
63
+ session["#{values["appInstance"]}::admin"] = values["current_user"]["admin"] ? values["current_user"]["admin"] : false
64
+ session["#{values["appInstance"]}::user::timezone"] = values["current_user"]["timezone"]
65
+ session["#{values["appInstance"]}::user::locale"] = values["current_user"]["locale"]
66
+ session["#{values["appInstance"]}::user::email"] = values["current_user"]["email"]
67
+ end
68
+
69
+ @appinstance = ZuoraConnect::AppInstance.where(:id => values["appInstance"].to_i).first
70
+ if @appinstance.blank?
71
+ Apartment::Tenant.switch!("public")
72
+ Apartment::Tenant.create(values["appInstance"].to_i)
73
+ @appinstance = ZuoraConnect::AppInstance.create!(:id => values["appInstance"].to_i, :access_token => values["user"], :refresh_token => values["key"])
74
+ end
75
+ if @appinstance.access_token.blank? || @appinstance.refresh_token.blank?
76
+ @appinstance.update_attributes(:access_token => values["user"], :refresh_token => values["key"])
77
+ end
78
+ end
79
+
80
+ def setup_instance_via_session
81
+ if !session["appInstance"].blank?
82
+ @appinstance = ZuoraConnect::AppInstance.where(:id => session["appInstance"]).first
83
+ else
84
+ raise ZuoraConnect::Exceptions::SessionInvalid.new("Session Blank -- Relaunch Application")
85
+ end
84
86
  end
85
87
 
86
- def dev_mode
88
+ def setup_instance_via_dev_mode
87
89
  session["appInstance"] = "1"
88
- session["1::user"] = "test"
89
- session["1::key"] = "test"
90
- session["1::valid"] = true
90
+ session["valid"] = true
91
+ values = {:user => "test" , :key => "test"}
92
+ @appinstance = ZuoraConnect::AppInstance.where(:id => values["appInstance"].to_i).first
93
+ if @appinstance.blank?
94
+ Apartment::Tenant.switch!("public")
95
+ Apartment::Tenant.create(values["appInstance"].to_i)
96
+ @appinstance = ZuoraConnect::AppInstance.create!(:id => values["appInstance"].to_i, :access_token => "test", :refresh_token => "test")
97
+ end
98
+ if @appinstance.access_token.blank? || @appinstance.refresh_token.blank?
99
+ @appinstance.update_attributes(:access_token => values["user"], :refresh_token => values["key"])
100
+ end
91
101
  end
92
102
 
93
103
  end
@@ -0,0 +1,48 @@
1
+ module ZuoraConnect
2
+ module Exceptions
3
+ class Error < StandardError; end
4
+ class AuthorizationNotPerformed < Error; end
5
+
6
+ class SessionInvalid < Error
7
+ attr_writer :default_message
8
+
9
+ def initialize(message = nil)
10
+ @message = message
11
+ @default_message = "Session data invalid."
12
+ end
13
+
14
+ def to_s
15
+ @message || @default_message
16
+ end
17
+ end
18
+
19
+ class ConnectCommunicationError < Error
20
+ attr_reader :code, :response
21
+ attr_writer :default_message
22
+
23
+ def initialize(message = nil,response=nil, code =nil)
24
+ @code = code
25
+ @message = message
26
+ @response = response
27
+ @default_message = "Error communication with Connect."
28
+ end
29
+
30
+ def to_s
31
+ @message || @default_message
32
+ end
33
+ end
34
+
35
+ class AccessDenied < Error
36
+ attr_writer :default_message
37
+
38
+ def initialize(message = nil)
39
+ @message = message
40
+ @default_message = "You are not authorized to access this page."
41
+ end
42
+
43
+ def to_s
44
+ @message || @default_message
45
+ end
46
+ end
47
+ end
48
+ end
@@ -1,3 +1,3 @@
1
1
  module ZuoraConnect
2
- VERSION = "0.0.8.7"
2
+ VERSION = "0.0.8.8"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zuora_connect
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8.7
4
+ version: 0.0.8.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Connect Team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-10-20 00:00:00.000000000 Z
11
+ date: 2016-10-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: apartment
@@ -127,11 +127,13 @@ files:
127
127
  - config/initializers/apartment.rb
128
128
  - config/routes.rb
129
129
  - db/migrate/20160718151733_create_connect_app_instances.rb
130
+ - db/migrate/20161024162319_add_tokens_to_app_instance.rb
130
131
  - lib/tasks/zuora_connect_tasks.rake
131
132
  - lib/zuora_connect.rb
132
133
  - lib/zuora_connect/configuration.rb
133
134
  - lib/zuora_connect/controllers/helpers.rb
134
135
  - lib/zuora_connect/engine.rb
136
+ - lib/zuora_connect/exceptions.rb
135
137
  - lib/zuora_connect/version.rb
136
138
  - lib/zuora_connect/views/helpers.rb
137
139
  - test/controllers/zuora_connect/api/v1/app_instance_controller_test.rb