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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b9a8f69b209e1762d0c1972e864b17330becc946114bd8c78313bf5221e7f4fc
4
- data.tar.gz: ff25b1fe4224b67bd2e8c387406a04237b9828e3e21adf3ed75ab282694f061d
3
+ metadata.gz: e63c10c8405375ad7cb2c28073c6181ed055266fb8d61e3ac5725e8f5b8ca8d5
4
+ data.tar.gz: c5124fe3590fd14c0acdad0cfe6e567997195eaa728245f620bfff5bbda285fe
5
5
  SHA512:
6
- metadata.gz: 13fb0d5ad358b91fa77a23fe72091482df39bf2dbd5acc846419666550d7f1d1078cf1e150444237c3554eebb1c8d6484beec541562ce1e5180507a1cbd8a6da
7
- data.tar.gz: 99007a267042763f665a2d195e160682a346d96388f081c548f26c6730a7c0ef6adc9633e9576f230ac4665e91e073289de110a212e9f41f66e964704e55e6f1
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("../spec/dummy/Rakefile", __FILE__)
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 FROM "#{self.id}".zuora_users ORDER BY zuora_users.updated_at DESC LIMIT 1;
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 !self.auto_deployed? && !skip_connect
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.set_backup_creds
367
- self.save(validate: false) if self.changed?
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.auto_deployed? && parsed_json['organization'].present?
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) && !Rails.env.development?
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
- job_start_log(args)
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) && !Rails.env.development?
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
- ZuoraConnect::ZuoraUser.current_user_id = nil
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, tenant_id: nil, task_data: nil, retry_count: 0)
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
- session["#{ZuoraConnect.configuration.dev_mode_appinstance}::admin"] = ZuoraConnect.configuration.dev_mode_admin
685
-
686
- values = {
687
- id: ZuoraConnect.configuration.dev_mode_appinstance,
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(ZuoraConnect.configuration.dev_mode_appinstance.to_s)
688
+ Apartment::Tenant.create(values[:appinstance].to_s)
700
689
  rescue Apartment::TenantExists => ex
701
- Apartment::Tenant.drop(ZuoraConnect.configuration.dev_mode_appinstance.to_s)
690
+ Apartment::Tenant.drop(values[:appinstance].to_s)
702
691
  retry
703
692
  end
704
- @appinstance = ZuoraConnect::AppInstance.new()
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.assign_attributes(values)
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
@@ -1,3 +1,3 @@
1
1
  module ZuoraConnect
2
- VERSION = "3.0.0l"
2
+ VERSION = "3.0.0-a"
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: 3.0.0l
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-12-11 00:00:00.000000000 Z
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.1.0.pre.b
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.1.0.pre.b
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.1.4
448
+ rubygems_version: 3.0.3
491
449
  signing_key:
492
450
  specification_version: 4
493
451
  summary: Summary of Connect.