zuora_connect 3.0.0l → 3.0.0.pre.a
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 +4 -4
- data/Rakefile +1 -1
- data/app/models/zuora_connect/app_instance_base.rb +19 -18
- data/config/initializers/postgresql_adapter.rb +1 -1
- data/config/initializers/resque.rb +12 -0
- data/lib/middleware/metrics_middleware.rb +39 -4
- data/lib/resque/plugins/app_instance_job.rb +6 -10
- data/lib/resque/plugins/custom_logger.rb +1 -1
- data/lib/zuora_connect/controllers/helpers.rb +15 -22
- data/lib/zuora_connect/railtie.rb +14 -0
- data/lib/zuora_connect/version.rb +1 -1
- metadata +15 -57
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e63c10c8405375ad7cb2c28073c6181ed055266fb8d61e3ac5725e8f5b8ca8d5
|
4
|
+
data.tar.gz: c5124fe3590fd14c0acdad0cfe6e567997195eaa728245f620bfff5bbda285fe
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1beb3e3c0531b3035051711670de269814122c20269086ffd31257b02dc4e6ff8c515ac812abc436360ebc9f1506e3ae8e15e859d6098913e08f2dfed67e1284
|
7
|
+
data.tar.gz: bff9fca90e302be4fe97b3cac4ac54bb8dc6c841ad6762939f9b0b2c6c7e66417bb108105d6d8372965ae9090d813c97cff8a4a4a6b513665beed63c9229f0e4
|
data/Rakefile
CHANGED
@@ -15,7 +15,7 @@ RDoc::Task.new(:rdoc) do |rdoc|
|
|
15
15
|
rdoc.rdoc_files.include('lib/**/*.rb')
|
16
16
|
end
|
17
17
|
|
18
|
-
APP_RAKEFILE = File.expand_path("../
|
18
|
+
APP_RAKEFILE = File.expand_path("../test/dummy/Rakefile", __FILE__)
|
19
19
|
load 'rails/tasks/engine.rake'
|
20
20
|
|
21
21
|
|
@@ -152,8 +152,7 @@ module ZuoraConnect
|
|
152
152
|
if ZuoraConnect.configuration.mode != "Production"
|
153
153
|
mock_task_data = {
|
154
154
|
"id" => ZuoraConnect.configuration.dev_mode_appinstance,
|
155
|
-
"mode" => ZuoraConnect.configuration.dev_mode_mode
|
156
|
-
"name" => "Developer Instance"
|
155
|
+
"mode" => ZuoraConnect.configuration.dev_mode_mode
|
157
156
|
}
|
158
157
|
|
159
158
|
case ZuoraConnect.configuration.dev_mode_options.class
|
@@ -169,7 +168,6 @@ module ZuoraConnect
|
|
169
168
|
end
|
170
169
|
|
171
170
|
self.build_task(task_data: mock_task_data, session: session)
|
172
|
-
self.set_backup_creds if !self['zuora_logins'].present?
|
173
171
|
self.last_refresh = Time.now.to_i
|
174
172
|
else
|
175
173
|
time_expire = (session["#{self.id}::last_refresh"] || Time.now).to_i - INSTANCE_REFRESH_WINDOW.ago.to_i
|
@@ -291,7 +289,10 @@ module ZuoraConnect
|
|
291
289
|
elsif type == :user
|
292
290
|
begin
|
293
291
|
sql = <<-eos
|
294
|
-
SELECT zuora_users.zuora_identity_response
|
292
|
+
SELECT zuora_users.zuora_identity_response
|
293
|
+
FROM "#{self.id}".zuora_users
|
294
|
+
ORDER BY zuora_users.updated_at DESC
|
295
|
+
LIMIT 1;
|
295
296
|
eos
|
296
297
|
user = ActiveRecord::Base.connection.execute(sql).to_a.first
|
297
298
|
|
@@ -351,7 +352,7 @@ module ZuoraConnect
|
|
351
352
|
skip_connect ||= false
|
352
353
|
begin
|
353
354
|
#Check how app was deployed
|
354
|
-
if
|
355
|
+
if self.id < 25000000 && !skip_connect
|
355
356
|
self.check_oauth_state
|
356
357
|
response = HTTParty.get(ZuoraConnect.configuration.url + "/api/#{self.api_version}/tools/tasks/#{self.id}.json",:body => {:access_token => self.access_token})
|
357
358
|
|
@@ -362,9 +363,17 @@ module ZuoraConnect
|
|
362
363
|
raise ZuoraConnect::Exceptions::ConnectCommunicationError.new("JSON parse error", response.body, response.code)
|
363
364
|
end
|
364
365
|
|
365
|
-
self.build_task(task_data: parsed_json, session: session)
|
366
|
-
self.
|
367
|
-
|
366
|
+
self.build_task(task_data: parsed_json, session: session)
|
367
|
+
if self.kms_key.present? && self.kms_key.match(/^arn:aws:.*/)
|
368
|
+
begin
|
369
|
+
self.zuora_logins = self.strip_cache_data(object: parsed_json.dup, keys: ['applications', 'tokens', 'user_settings'])
|
370
|
+
self.save(:validate => false)
|
371
|
+
rescue Aws::KMS::Errors::ValidationException, *AWS_AUTH_ERRORS => ex
|
372
|
+
Rails.logger.warn(AWS_AUTH_ERRORS_MSG, ex)
|
373
|
+
rescue => ex
|
374
|
+
Rails.logger.error(AWS_AUTH_ERRORS_MSG, ex)
|
375
|
+
end
|
376
|
+
end
|
368
377
|
else
|
369
378
|
raise ZuoraConnect::Exceptions::ConnectCommunicationError.new("Error Communicating with Connect", response.body, response.code)
|
370
379
|
end
|
@@ -409,16 +418,8 @@ module ZuoraConnect
|
|
409
418
|
end
|
410
419
|
|
411
420
|
#### START KMS ENCRYPTION Methods ####
|
412
|
-
def set_backup_creds
|
413
|
-
if self.kms_key.present? && self.kms_key.match(/^arn:aws:.*/) && self.task_data.present?
|
414
|
-
self.zuora_logins = self.strip_cache_data(object: self.task_data.dup, keys: ['applications', 'tokens', 'user_settings'])
|
415
|
-
end
|
416
|
-
end
|
417
|
-
|
418
421
|
def zuora_logins=(val)
|
419
422
|
write_attribute(:zuora_logins, kms_encrypt(val.to_json))
|
420
|
-
rescue Aws::KMS::Errors::ValidationException, Aws::KMS::Errors::NotFoundException, *AWS_AUTH_ERRORS => ex
|
421
|
-
Rails.logger.warn(AWS_AUTH_ERRORS_MSG, ex)
|
422
423
|
end
|
423
424
|
|
424
425
|
def zuora_logins
|
@@ -581,7 +582,7 @@ module ZuoraConnect
|
|
581
582
|
parsed_json = JSON.parse(response.body)
|
582
583
|
|
583
584
|
#Set Org
|
584
|
-
if self.
|
585
|
+
if self.id >= 25000000 && parsed_json['organization'].present?
|
585
586
|
login_cache = self.zuora_logins
|
586
587
|
login_cache.delete('organization')
|
587
588
|
self.zuora_logins = login_cache.merge({'organizations' => [parsed_json['organization']]})
|
@@ -1029,7 +1030,7 @@ module ZuoraConnect
|
|
1029
1030
|
catalog_container = catalog_container[object_id]
|
1030
1031
|
end
|
1031
1032
|
|
1032
|
-
return catalog_container
|
1033
|
+
return catalog_container
|
1033
1034
|
end
|
1034
1035
|
|
1035
1036
|
if defined?(Redis.current) && object_id.present? && object_id.class == String && object_id.present?
|
@@ -26,7 +26,7 @@ module ActiveRecord
|
|
26
26
|
if oids
|
27
27
|
query += "WHERE t.oid::integer IN (%s)" % oids.join(", ")
|
28
28
|
else
|
29
|
-
query += initializer.query_conditions_for_initial_load
|
29
|
+
query += initializer.query_conditions_for_initial_load(type_map)
|
30
30
|
end
|
31
31
|
|
32
32
|
execute_and_clear(query, "SCHEMA", []) do |records|
|
@@ -34,3 +34,15 @@ Resque.module_eval do
|
|
34
34
|
Hash[queue_names.zip(sizes)]
|
35
35
|
end
|
36
36
|
end
|
37
|
+
|
38
|
+
if defined?(Resque.logger)
|
39
|
+
Resque.logger = ZuoraObservability::Logger.custom_logger(name: "Resque", type: 'Monologger', level: MonoLogger::INFO)
|
40
|
+
Resque::Scheduler.logger = ZuoraObservability::Logger.custom_logger(name: "ResqueScheduler") if defined?(Resque::Scheduler)
|
41
|
+
end
|
42
|
+
if defined?(Delayed::Worker.logger)
|
43
|
+
Delayed::Worker.logger = ZuoraObservability::Logger.custom_logger(name: "DelayedJob", type: 'Monologger', level: MonoLogger::INFO)
|
44
|
+
end
|
45
|
+
|
46
|
+
Makara::Logging::Logger.logger = ZuoraObservability::Logger.custom_logger(name: "Makara") if defined?(Makara)
|
47
|
+
ElasticAPM.agent.config.logger = ZuoraObservability::Logger.custom_logger(name: "ElasticAPM", level: MonoLogger::WARN) if defined?(ElasticAPM) && ElasticAPM.running?
|
48
|
+
ActionMailer::Base.logger = ZuoraObservability::Logger.custom_logger(name: "ActionMailer", type: 'Monologger') if defined?(ActionMailer)
|
@@ -1,6 +1,37 @@
|
|
1
1
|
module ZuoraConnect
|
2
2
|
require 'uri'
|
3
3
|
|
4
|
+
# Object of this class is passed to the ActiveSupport::Notification hook
|
5
|
+
class PageRequest
|
6
|
+
|
7
|
+
# This method is triggered when a non error page is loaded (not 404)
|
8
|
+
def call(name, started, finished, unique_id, payload)
|
9
|
+
# If the url contains any css or JavaScript files then do not collect metrics for them
|
10
|
+
return nil if ["css", "assets", "jpg", "png", "jpeg", "ico"].any? { |word| payload[:path].include?(word) }
|
11
|
+
|
12
|
+
# Getting the endpoint and the content_type
|
13
|
+
content_hash = {:html => "text/html", :js => "application/javascript", :json => "application/json", :csv => "text/csv"}
|
14
|
+
content_type = content_hash.key?(payload[:format]) ? content_hash[payload[:format]] : payload[:format]
|
15
|
+
content_type = content_type.to_s.gsub('text/javascript', 'application/javascript')
|
16
|
+
|
17
|
+
# payloads with 500 requests do not have status as it is not set by the controller
|
18
|
+
# https://github.com/rails/rails/issues/33335
|
19
|
+
#status_code = payload[:status] ? payload[:status] : payload[:exception_object].present? ? 500 : ""
|
20
|
+
if payload[:exception].present?
|
21
|
+
status_code, exception = [500, payload[:exception].first]
|
22
|
+
else
|
23
|
+
status_code, exception = [payload[:status], nil]
|
24
|
+
end
|
25
|
+
|
26
|
+
tags = {method: payload[:method], status: status_code, error_type: exception, content_type: content_type, controller: payload[:controller], action: payload[:action]}.compact
|
27
|
+
|
28
|
+
values = {view_time: payload[:view_runtime], db_time: payload[:db_runtime], response_time: ((finished-started)*1000)}.compact
|
29
|
+
values = values.map{ |k,v| [k,v.round(2)]}.to_h
|
30
|
+
|
31
|
+
ZuoraObservability::Metrics.write_to_telegraf(direction: :inbound, tags: tags, values: values)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
4
35
|
class MetricsMiddleware
|
5
36
|
|
6
37
|
require "zuora_connect/version"
|
@@ -34,11 +65,8 @@ module ZuoraConnect
|
|
34
65
|
@bad_headers.each { |header| env.delete(header) }
|
35
66
|
|
36
67
|
if defined?(Prometheus) && env['PATH_INFO'] == '/connect/internal/metrics'
|
37
|
-
|
38
68
|
# Prometheus Stuff
|
39
|
-
metrics = ZuoraObservability::Metrics.resque
|
40
|
-
metrics = defined?(ZuoraConnect::AppInstance.get_metrics) ? ZuoraConnect::AppInstance.get_metrics(metrics) : metrics
|
41
|
-
|
69
|
+
metrics = ZuoraObservability::Metrics.resque
|
42
70
|
redis_up = metrics.present? && metrics.dig(:Resque, :Workers_Total).present? ? 1 : 0
|
43
71
|
Prometheus::REDIS_CONNECTION.set(redis_up)
|
44
72
|
|
@@ -58,6 +86,13 @@ module ZuoraConnect
|
|
58
86
|
@status, @headers, @response = @app.call(env)
|
59
87
|
ensure
|
60
88
|
|
89
|
+
# If the url contains any CSS or JavaScript files then do not collect metrics for them
|
90
|
+
if ["css", "assets", "jpg", "png", "jpeg", "ico"].any? { |word| env['PATH_INFO'].include?(word) } || /.*\.js$/.match(env['PATH_INFO'])
|
91
|
+
tags = {status: @status, controller: 'ActionController', action: 'Assets', app_instance: 0}
|
92
|
+
values = {response_time: ((Time.now - start_time)*1000).round(2) }
|
93
|
+
ZuoraObservability::Metrics.write_to_telegraf(direction: 'request-inbound-assets', tags: tags, values: values)
|
94
|
+
end
|
95
|
+
|
61
96
|
# Uncomment following block of code for handling engine requests/requests without controller
|
62
97
|
# else
|
63
98
|
# # Handling requests which do not have controllers (engines)
|
@@ -12,14 +12,14 @@ module Resque
|
|
12
12
|
when "Hash"
|
13
13
|
data = args.merge({:worker_class => self.to_s})
|
14
14
|
end
|
15
|
-
if Rails.logger.is_a?(Ougai::Logger)
|
15
|
+
if Rails.logger.is_a?(Ougai::Logger)
|
16
16
|
Rails.logger.with_fields = {job: data, trace_id: SecureRandom.uuid, name: "RailsWorker"}
|
17
17
|
end
|
18
18
|
|
19
19
|
begin
|
20
|
-
connection_count ||= 0
|
20
|
+
connection_count ||= 0
|
21
21
|
@appinstance = ZuoraConnect::AppInstance.find(args['app_instance_id'].to_i)
|
22
|
-
|
22
|
+
Rails.logger.info('Starting job')
|
23
23
|
|
24
24
|
@appinstance.new_session(holding_pattern: true)
|
25
25
|
rescue ActiveRecord::RecordNotFound => exception
|
@@ -52,12 +52,12 @@ module Resque
|
|
52
52
|
return
|
53
53
|
rescue ZuoraConnect::Exceptions::ConnectCommunicationError => exception
|
54
54
|
Rails.logger.warn("Enqueue Job Again ~ 2 mins", exception)
|
55
|
-
@appinstance.queue_pause(time: 2.minutes.to_i)
|
55
|
+
@appinstance.queue_pause(time: 2.minutes.to_i)
|
56
56
|
Resque.enqueue_to(self.job.queue, self.job.payload['class'], args)
|
57
57
|
return
|
58
58
|
rescue Net::ReadTimeout, Net::OpenTimeout, Errno::ECONNRESET, Errno::ECONNREFUSED, SocketError => exception
|
59
59
|
Rails.logger.warn("Enqueue Job Again ~ 2 mins", exception)
|
60
|
-
@appinstance.queue_pause(time: 2.minutes.to_i)
|
60
|
+
@appinstance.queue_pause(time: 2.minutes.to_i)
|
61
61
|
Resque.enqueue_to(self.job.queue, self.job.payload['class'], args)
|
62
62
|
return
|
63
63
|
end
|
@@ -68,10 +68,6 @@ module Resque
|
|
68
68
|
@appinstance.cache_app_instance if defined?(@appinstance)
|
69
69
|
Rails.logger.flush if Rails.logger.methods.include?(:flush)
|
70
70
|
end
|
71
|
-
|
72
|
-
def job_start_log(args)
|
73
|
-
Rails.logger.info("Starting job")
|
74
|
-
end
|
75
71
|
end
|
76
72
|
end
|
77
|
-
end
|
73
|
+
end
|
@@ -17,7 +17,7 @@ module Resque
|
|
17
17
|
when "Hash"
|
18
18
|
data = args.merge({:worker_class => self.to_s})
|
19
19
|
end
|
20
|
-
if Rails.logger.is_a?(Ougai::Logger)
|
20
|
+
if Rails.logger.is_a?(Ougai::Logger)
|
21
21
|
Rails.logger.with_fields = {job: data, trace_id: SecureRandom.uuid, name: "RailsWorker"}
|
22
22
|
end
|
23
23
|
data = {:msg => 'Starting job', :job => data}
|
@@ -280,7 +280,6 @@ module ZuoraConnect
|
|
280
280
|
next_instance_id,
|
281
281
|
zuora_entity_id,
|
282
282
|
rest_domain,
|
283
|
-
tenant_id: request.headers['zuora-tenant-id'],
|
284
283
|
retry_count: retry_count
|
285
284
|
)
|
286
285
|
rescue ActiveRecord::RecordNotUnique
|
@@ -303,8 +302,7 @@ module ZuoraConnect
|
|
303
302
|
private
|
304
303
|
def setup_instance_via_prod_mode
|
305
304
|
zuora_entity_id = request.headers['ZuoraCurrentEntity'] || cookies['ZuoraCurrentEntity']
|
306
|
-
|
307
|
-
|
305
|
+
|
308
306
|
if zuora_entity_id.present?
|
309
307
|
zuora_tenant_id = cookies['Zuora-Tenant-Id']
|
310
308
|
zuora_user_id = cookies['Zuora-User-Id']
|
@@ -638,7 +636,7 @@ module ZuoraConnect
|
|
638
636
|
(ZuoraConnect::AppInstance.all.where("id > #{min_instance_id}").order(id: :desc).limit(1).pluck(:id).first || min_instance_id) + 1
|
639
637
|
end
|
640
638
|
|
641
|
-
def new_instance(id, zuora_entity_id, rest_domain,
|
639
|
+
def new_instance(id, zuora_entity_id, rest_domain, task_data: nil, retry_count: 0)
|
642
640
|
app_instance = ZuoraConnect::AppInstance.new(
|
643
641
|
:id => id,
|
644
642
|
:api_token => generate_token,
|
@@ -648,8 +646,6 @@ module ZuoraConnect
|
|
648
646
|
:zuora_entity_ids => [zuora_entity_id]
|
649
647
|
)
|
650
648
|
|
651
|
-
app_instance[:zuora_tenant_ids] = [tenant_id.to_s] if tenant_id.present?
|
652
|
-
|
653
649
|
if task_data.nil?
|
654
650
|
# no encryption
|
655
651
|
app_instance['zuora_logins'] = task_data
|
@@ -681,30 +677,27 @@ module ZuoraConnect
|
|
681
677
|
|
682
678
|
def setup_instance_via_dev_mode
|
683
679
|
session["appInstance"] = ZuoraConnect.configuration.dev_mode_appinstance
|
684
|
-
|
685
|
-
|
686
|
-
values = {
|
687
|
-
|
688
|
-
access_token: ZuoraConnect.configuration.dev_mode_user,
|
689
|
-
refresh_token: ZuoraConnect.configuration.dev_mode_pass,
|
690
|
-
token: ZuoraConnect.configuration.dev_mode_pass+ZuoraConnect.configuration.dev_mode_pass,
|
691
|
-
api_token: ZuoraConnect.configuration.dev_mode_pass+ZuoraConnect.configuration.dev_mode_pass
|
692
|
-
}
|
693
|
-
|
694
|
-
@appinstance = ZuoraConnect::AppInstance.find_by(:id => ZuoraConnect.configuration.dev_mode_appinstance.to_i)
|
680
|
+
user = ZuoraConnect.configuration.dev_mode_user
|
681
|
+
key = ZuoraConnect.configuration.dev_mode_pass
|
682
|
+
values = {:user => user , :key => key, :appinstance => session["appInstance"]}
|
683
|
+
@appinstance = ZuoraConnect::AppInstance.find_by(:id => values[:appinstance].to_i)
|
695
684
|
ZuoraConnect::ZuoraUser.current_user_id = 0
|
696
685
|
if @appinstance.blank?
|
697
686
|
Apartment::Tenant.switch!("public")
|
698
687
|
begin
|
699
|
-
Apartment::Tenant.create(
|
688
|
+
Apartment::Tenant.create(values[:appinstance].to_s)
|
700
689
|
rescue Apartment::TenantExists => ex
|
701
|
-
Apartment::Tenant.drop(
|
690
|
+
Apartment::Tenant.drop(values[:appinstance].to_s)
|
702
691
|
retry
|
703
692
|
end
|
704
|
-
|
693
|
+
|
694
|
+
@appinstance = ZuoraConnect::AppInstance.new(:id => values[:appinstance].to_i, :access_token => values[:user], :refresh_token => values[:key], :token => "#{values[:key]}#{values[:key]}", :api_token => "#{values[:key]}#{values[:key]}")
|
695
|
+
@appinstance.save(:validate => false)
|
696
|
+
end
|
697
|
+
if @appinstance.access_token.blank? || @appinstance.refresh_token.blank? || @appinstance.token.blank? || @appinstance.api_token.blank?
|
698
|
+
@appinstance.update_attributes!(:access_token => values["user"], :refresh_token => values["key"], :token => "#{values[:key]}#{values[:key]}", :api_token => "#{values[:key]}#{values[:key]}")
|
705
699
|
end
|
706
|
-
@appinstance.
|
707
|
-
@appinstance.save(:validate => false)
|
700
|
+
session["#{@appinstance.id}::admin"] = ZuoraConnect.configuration.dev_mode_admin
|
708
701
|
end
|
709
702
|
end
|
710
703
|
end
|
@@ -5,6 +5,17 @@ require 'middleware/bad_multipart_form_data_sanitizer'
|
|
5
5
|
|
6
6
|
module ZuoraConnect
|
7
7
|
class Railtie < Rails::Railtie
|
8
|
+
REQUEST_HEADERS_TO_IGNORE = %W(
|
9
|
+
RAW_POST_DATA
|
10
|
+
REQUEST_METHOD
|
11
|
+
REQUEST_URI
|
12
|
+
REQUEST_PATH
|
13
|
+
PATH_INFO
|
14
|
+
CONTENT_TYPE
|
15
|
+
ORIGINAL_FULLPATH
|
16
|
+
QUERY_STRING
|
17
|
+
)
|
18
|
+
|
8
19
|
config.before_initialize do
|
9
20
|
version = Rails.version
|
10
21
|
if version >= "5.0.0"
|
@@ -32,5 +43,8 @@ module ZuoraConnect
|
|
32
43
|
app.config.middleware.use Rack::Deflater, if: ->(env, *) { env['PATH_INFO'] == '/connect/internal/metrics' }
|
33
44
|
end
|
34
45
|
end
|
46
|
+
|
47
|
+
# hook to process_action
|
48
|
+
ActiveSupport::Notifications.subscribe('process_action.action_controller', ZuoraConnect::PageRequest.new)
|
35
49
|
end
|
36
50
|
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: 3.0.
|
4
|
+
version: 3.0.0.pre.a
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Connect Team
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-11-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: apartment
|
@@ -56,40 +56,40 @@ dependencies:
|
|
56
56
|
name: zuora_api
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - "
|
59
|
+
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: 1.7.00
|
62
|
-
- - "
|
62
|
+
- - "~>"
|
63
63
|
- !ruby/object:Gem::Version
|
64
64
|
version: 1.7.00
|
65
65
|
type: :runtime
|
66
66
|
prerelease: false
|
67
67
|
version_requirements: !ruby/object:Gem::Requirement
|
68
68
|
requirements:
|
69
|
-
- - "
|
69
|
+
- - ">="
|
70
70
|
- !ruby/object:Gem::Version
|
71
71
|
version: 1.7.00
|
72
|
-
- - "
|
72
|
+
- - "~>"
|
73
73
|
- !ruby/object:Gem::Version
|
74
74
|
version: 1.7.00
|
75
75
|
- !ruby/object:Gem::Dependency
|
76
76
|
name: httparty
|
77
77
|
requirement: !ruby/object:Gem::Requirement
|
78
78
|
requirements:
|
79
|
-
- - "
|
79
|
+
- - ">="
|
80
80
|
- !ruby/object:Gem::Version
|
81
81
|
version: 0.16.4
|
82
|
-
- - "
|
82
|
+
- - "~>"
|
83
83
|
- !ruby/object:Gem::Version
|
84
84
|
version: 0.16.4
|
85
85
|
type: :runtime
|
86
86
|
prerelease: false
|
87
87
|
version_requirements: !ruby/object:Gem::Requirement
|
88
88
|
requirements:
|
89
|
-
- - "
|
89
|
+
- - ">="
|
90
90
|
- !ruby/object:Gem::Version
|
91
91
|
version: 0.16.4
|
92
|
-
- - "
|
92
|
+
- - "~>"
|
93
93
|
- !ruby/object:Gem::Version
|
94
94
|
version: 0.16.4
|
95
95
|
- !ruby/object:Gem::Dependency
|
@@ -186,16 +186,16 @@ dependencies:
|
|
186
186
|
name: zuora_observability
|
187
187
|
requirement: !ruby/object:Gem::Requirement
|
188
188
|
requirements:
|
189
|
-
- -
|
189
|
+
- - ">="
|
190
190
|
- !ruby/object:Gem::Version
|
191
|
-
version: 0
|
191
|
+
version: '0'
|
192
192
|
type: :runtime
|
193
193
|
prerelease: false
|
194
194
|
version_requirements: !ruby/object:Gem::Requirement
|
195
195
|
requirements:
|
196
|
-
- -
|
196
|
+
- - ">="
|
197
197
|
- !ruby/object:Gem::Version
|
198
|
-
version: 0
|
198
|
+
version: '0'
|
199
199
|
- !ruby/object:Gem::Dependency
|
200
200
|
name: rspec
|
201
201
|
requirement: !ruby/object:Gem::Requirement
|
@@ -210,20 +210,6 @@ dependencies:
|
|
210
210
|
- - "~>"
|
211
211
|
- !ruby/object:Gem::Version
|
212
212
|
version: '3.0'
|
213
|
-
- !ruby/object:Gem::Dependency
|
214
|
-
name: rspec_junit_formatter
|
215
|
-
requirement: !ruby/object:Gem::Requirement
|
216
|
-
requirements:
|
217
|
-
- - ">="
|
218
|
-
- !ruby/object:Gem::Version
|
219
|
-
version: '0'
|
220
|
-
type: :development
|
221
|
-
prerelease: false
|
222
|
-
version_requirements: !ruby/object:Gem::Requirement
|
223
|
-
requirements:
|
224
|
-
- - ">="
|
225
|
-
- !ruby/object:Gem::Version
|
226
|
-
version: '0'
|
227
213
|
- !ruby/object:Gem::Dependency
|
228
214
|
name: rspec-rails
|
229
215
|
requirement: !ruby/object:Gem::Requirement
|
@@ -252,34 +238,6 @@ dependencies:
|
|
252
238
|
- - ">="
|
253
239
|
- !ruby/object:Gem::Version
|
254
240
|
version: '0'
|
255
|
-
- !ruby/object:Gem::Dependency
|
256
|
-
name: simplecov
|
257
|
-
requirement: !ruby/object:Gem::Requirement
|
258
|
-
requirements:
|
259
|
-
- - ">="
|
260
|
-
- !ruby/object:Gem::Version
|
261
|
-
version: '0'
|
262
|
-
type: :development
|
263
|
-
prerelease: false
|
264
|
-
version_requirements: !ruby/object:Gem::Requirement
|
265
|
-
requirements:
|
266
|
-
- - ">="
|
267
|
-
- !ruby/object:Gem::Version
|
268
|
-
version: '0'
|
269
|
-
- !ruby/object:Gem::Dependency
|
270
|
-
name: simplecov-cobertura
|
271
|
-
requirement: !ruby/object:Gem::Requirement
|
272
|
-
requirements:
|
273
|
-
- - ">="
|
274
|
-
- !ruby/object:Gem::Version
|
275
|
-
version: '0'
|
276
|
-
type: :development
|
277
|
-
prerelease: false
|
278
|
-
version_requirements: !ruby/object:Gem::Requirement
|
279
|
-
requirements:
|
280
|
-
- - ">="
|
281
|
-
- !ruby/object:Gem::Version
|
282
|
-
version: '0'
|
283
241
|
- !ruby/object:Gem::Dependency
|
284
242
|
name: factory_bot
|
285
243
|
requirement: !ruby/object:Gem::Requirement
|
@@ -487,7 +445,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
487
445
|
- !ruby/object:Gem::Version
|
488
446
|
version: 1.3.1
|
489
447
|
requirements: []
|
490
|
-
rubygems_version: 3.
|
448
|
+
rubygems_version: 3.0.3
|
491
449
|
signing_key:
|
492
450
|
specification_version: 4
|
493
451
|
summary: Summary of Connect.
|