inst-jobs 2.4.2 → 2.4.6
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/db/migrate/20210812210128_add_singleton_column.rb +0 -3
- data/db/migrate/20210917232626_add_delete_conflicting_singletons_before_unlock_trigger.rb +27 -0
- data/lib/delayed/backend/active_record.rb +19 -4
- data/lib/delayed/backend/base.rb +1 -1
- data/lib/delayed/message_sending.rb +1 -1
- data/lib/delayed/performable_method.rb +1 -1
- data/lib/delayed/periodic.rb +7 -1
- data/lib/delayed/pool.rb +1 -1
- data/lib/delayed/settings.rb +1 -1
- data/lib/delayed/version.rb +1 -1
- data/lib/delayed/work_queue/parent_process/server.rb +11 -6
- data/lib/delayed/worker/health_check.rb +1 -8
- data/spec/active_record_job_spec.rb +1 -1
- data/spec/delayed/worker/health_check_spec.rb +1 -1
- data/spec/shared/shared_backend.rb +13 -0
- data/spec/spec_helper.rb +3 -1
- metadata +17 -12
- data/spec/gemfiles/52.gemfile +0 -9
- data/spec/gemfiles/52.gemfile.lock +0 -240
- data/spec/gemfiles/60.gemfile +0 -9
- data/spec/gemfiles/60.gemfile.lock +0 -246
- data/spec/gemfiles/61.gemfile +0 -9
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: ba509dbe247e504537397a8482595ee6dbeac623c69141a24aa56f753343484f
|
|
4
|
+
data.tar.gz: 69502011608a6ac485012dd8ebc5ed9e616b8643ed92a297778100f9ddf51e15
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: bba4b9a818f3ce3f0cae2f9d77a556c2d9770a47730328d7b3d6de5c8e5bc338ab24da4a4c5006d68375c9b8c24f24af04a0e711ee71d57b17526c0ca401e275
|
|
7
|
+
data.tar.gz: 8ccc1674c9d7f7b1caa27d759a34b9670bc298ece8d85472ba23b83e03cb672cff7372547a84d8c13363aa93447ff0249255f02e5353458d252ef77e1bc89b35
|
|
@@ -90,7 +90,6 @@ class AddSingletonColumn < ActiveRecord::Migration[5.2]
|
|
|
90
90
|
execute(<<~SQL)
|
|
91
91
|
CREATE OR REPLACE FUNCTION delayed_jobs_before_insert_row_tr_fn () RETURNS trigger AS $$
|
|
92
92
|
BEGIN
|
|
93
|
-
RAISE NOTICE 'inserting job';
|
|
94
93
|
IF NEW.strand IS NOT NULL THEN
|
|
95
94
|
PERFORM pg_advisory_xact_lock(half_md5_as_bigint(NEW.strand));
|
|
96
95
|
IF (SELECT COUNT(*) FROM (
|
|
@@ -100,10 +99,8 @@ class AddSingletonColumn < ActiveRecord::Migration[5.2]
|
|
|
100
99
|
END IF;
|
|
101
100
|
END IF;
|
|
102
101
|
IF NEW.singleton IS NOT NULL THEN
|
|
103
|
-
RAISE NOTICE 'inserting job that is a singleton';
|
|
104
102
|
PERFORM 1 FROM delayed_jobs WHERE singleton = NEW.singleton;
|
|
105
103
|
IF FOUND THEN
|
|
106
|
-
RAISE NOTICE 'and not first';
|
|
107
104
|
NEW.next_in_strand := false;
|
|
108
105
|
END IF;
|
|
109
106
|
END IF;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
class AddDeleteConflictingSingletonsBeforeUnlockTrigger < ActiveRecord::Migration[5.2]
|
|
4
|
+
def up
|
|
5
|
+
execute(<<~SQL)
|
|
6
|
+
CREATE FUNCTION delayed_jobs_before_unlock_delete_conflicting_singletons_row_fn () RETURNS trigger AS $$
|
|
7
|
+
BEGIN
|
|
8
|
+
IF EXISTS (SELECT 1 FROM delayed_jobs j2 WHERE j2.singleton=OLD.singleton) THEN
|
|
9
|
+
DELETE FROM delayed_jobs WHERE id<>OLD.id AND singleton=OLD.singleton;
|
|
10
|
+
END IF;
|
|
11
|
+
RETURN NEW;
|
|
12
|
+
END;
|
|
13
|
+
$$ LANGUAGE plpgsql;
|
|
14
|
+
SQL
|
|
15
|
+
execute(<<~SQL)
|
|
16
|
+
CREATE TRIGGER delayed_jobs_before_unlock_delete_conflicting_singletons_row_tr BEFORE UPDATE ON delayed_jobs FOR EACH ROW WHEN (
|
|
17
|
+
OLD.singleton IS NOT NULL AND
|
|
18
|
+
OLD.singleton=NEW.singleton AND
|
|
19
|
+
OLD.locked_by IS NOT NULL AND
|
|
20
|
+
NEW.locked_by IS NULL) EXECUTE PROCEDURE delayed_jobs_before_unlock_delete_conflicting_singletons_row_fn();
|
|
21
|
+
SQL
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def down
|
|
25
|
+
execute("DROP FUNCTION delayed_jobs_before_unlock_delete_conflicting_singletons_row_tr_fn()")
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -38,6 +38,11 @@ module Delayed
|
|
|
38
38
|
job = new(attributes, &block)
|
|
39
39
|
job.single_step_create(on_conflict: on_conflict)
|
|
40
40
|
end
|
|
41
|
+
|
|
42
|
+
def attempt_advisory_lock(lock_name)
|
|
43
|
+
fn_name = connection.quote_table_name("half_md5_as_bigint")
|
|
44
|
+
connection.select_value("SELECT pg_try_advisory_xact_lock(#{fn_name}('#{lock_name}'));")
|
|
45
|
+
end
|
|
41
46
|
end
|
|
42
47
|
|
|
43
48
|
def single_step_create(on_conflict: nil)
|
|
@@ -98,11 +103,11 @@ module Delayed
|
|
|
98
103
|
fn_name = connection.quote_table_name("half_md5_as_bigint")
|
|
99
104
|
sql = "SELECT pg_advisory_xact_lock(#{fn_name}(#{connection.quote(values['strand'])})); #{sql}"
|
|
100
105
|
end
|
|
101
|
-
result = connection.execute(sql, "#{self} Create")
|
|
106
|
+
result = connection.execute(sql, "#{self.class} Create")
|
|
102
107
|
self.id = result.values.first&.first
|
|
103
108
|
result.clear
|
|
104
109
|
else
|
|
105
|
-
result = connection.exec_query(sql, "#{self} Create", binds)
|
|
110
|
+
result = connection.exec_query(sql, "#{self.class} Create", binds)
|
|
106
111
|
self.id = connection.send(:last_inserted_id, result)
|
|
107
112
|
end
|
|
108
113
|
|
|
@@ -458,9 +463,19 @@ module Delayed
|
|
|
458
463
|
where("locked_by LIKE ?", "#{name}:%").pluck(:locked_by).map { |locked_by| locked_by.split(":").last.to_i }
|
|
459
464
|
end
|
|
460
465
|
|
|
466
|
+
def self.prefetch_jobs_lock_name
|
|
467
|
+
"Delayed::Job.unlock_orphaned_prefetched_jobs"
|
|
468
|
+
end
|
|
469
|
+
|
|
461
470
|
def self.unlock_orphaned_prefetched_jobs
|
|
462
|
-
|
|
463
|
-
|
|
471
|
+
transaction do
|
|
472
|
+
# for db performance reasons, we only need one process doing this at a time
|
|
473
|
+
# so if we can't get an advisory lock, just abort. we'll try again soon
|
|
474
|
+
return unless attempt_advisory_lock(prefetch_jobs_lock_name)
|
|
475
|
+
|
|
476
|
+
horizon = db_time_now - (Settings.parent_process[:prefetched_jobs_timeout] * 4)
|
|
477
|
+
where("locked_by LIKE 'prefetch:%' AND locked_at<?", horizon).update_all(locked_at: nil, locked_by: nil)
|
|
478
|
+
end
|
|
464
479
|
end
|
|
465
480
|
|
|
466
481
|
def self.unlock(jobs)
|
data/lib/delayed/backend/base.rb
CHANGED
|
@@ -148,7 +148,7 @@ module Delayed
|
|
|
148
148
|
end
|
|
149
149
|
|
|
150
150
|
def unlock_orphaned_prefetched_jobs
|
|
151
|
-
horizon = db_time_now - Settings.parent_process[:prefetched_jobs_timeout] * 4
|
|
151
|
+
horizon = db_time_now - (Settings.parent_process[:prefetched_jobs_timeout] * 4)
|
|
152
152
|
orphaned_jobs = running_jobs.select do |job|
|
|
153
153
|
job.locked_by.start_with?("prefetch:") && job.locked_at < horizon
|
|
154
154
|
end
|
|
@@ -31,7 +31,7 @@ module Delayed
|
|
|
31
31
|
end
|
|
32
32
|
|
|
33
33
|
if @synchronous
|
|
34
|
-
if @sender.nil? || sender_is_object || sender_is_class && @object.protected_methods.include?(method)
|
|
34
|
+
if @sender.nil? || sender_is_object || (sender_is_class && @object.protected_methods.include?(method))
|
|
35
35
|
return @object.send(method, *args) if kwargs.empty?
|
|
36
36
|
|
|
37
37
|
return @object.send(method, *args, **kwargs)
|
|
@@ -35,7 +35,7 @@ module Delayed
|
|
|
35
35
|
sender_is_object = sender == object
|
|
36
36
|
sender_is_class = sender.is_a?(object.class)
|
|
37
37
|
|
|
38
|
-
if sender.nil? || sender_is_object || sender_is_class && object.protected_methods.include?(method)
|
|
38
|
+
if sender.nil? || sender_is_object || (sender_is_class && object.protected_methods.include?(method))
|
|
39
39
|
if kwargs.empty?
|
|
40
40
|
object.send(method, *args)
|
|
41
41
|
else
|
data/lib/delayed/periodic.rb
CHANGED
|
@@ -33,7 +33,13 @@ module Delayed
|
|
|
33
33
|
# we used to queue up a job in a strand here, and perform the audit inside that job
|
|
34
34
|
# however, now that we're using singletons for scheduling periodic jobs,
|
|
35
35
|
# it's fine to just do the audit in-line here without risk of creating duplicates
|
|
36
|
-
|
|
36
|
+
Delayed::Job.transaction do
|
|
37
|
+
# for db performance reasons, we only need one process doing this at a time
|
|
38
|
+
# so if we can't get an advisory lock, just abort. we'll try again soon
|
|
39
|
+
return unless Delayed::Job.attempt_advisory_lock("Delayed::Periodic#audit_queue")
|
|
40
|
+
|
|
41
|
+
perform_audit!
|
|
42
|
+
end
|
|
37
43
|
end
|
|
38
44
|
|
|
39
45
|
# make sure all periodic jobs are scheduled for their next run in the job queue
|
data/lib/delayed/pool.rb
CHANGED
data/lib/delayed/settings.rb
CHANGED
|
@@ -101,7 +101,7 @@ module Delayed
|
|
|
101
101
|
# Expands rails-relative paths, without depending on rails being loaded.
|
|
102
102
|
def expand_rails_path(path)
|
|
103
103
|
root = if defined?(Rails) && Rails.root
|
|
104
|
-
|
|
104
|
+
Rails.root.join("Gemfile")
|
|
105
105
|
else
|
|
106
106
|
ENV.fetch("BUNDLE_GEMFILE", "#{Dir.pwd}/Gemfile")
|
|
107
107
|
end
|
data/lib/delayed/version.rb
CHANGED
|
@@ -49,7 +49,7 @@ module Delayed
|
|
|
49
49
|
last_orphaned_prefetched_jobs_purge = Job.db_time_now - rand(15 * 60)
|
|
50
50
|
until exit?
|
|
51
51
|
run_once
|
|
52
|
-
if last_orphaned_prefetched_jobs_purge + 15 * 60 < Job.db_time_now
|
|
52
|
+
if last_orphaned_prefetched_jobs_purge + (15 * 60) < Job.db_time_now
|
|
53
53
|
Job.unlock_orphaned_prefetched_jobs
|
|
54
54
|
last_orphaned_prefetched_jobs_purge = Job.db_time_now
|
|
55
55
|
end
|
|
@@ -68,7 +68,7 @@ module Delayed
|
|
|
68
68
|
# if they're not keeping up, the jobs will slip back in time, and suddenly we'll become
|
|
69
69
|
# active and quickly pick up all the jobs we can. The latency is calculated to ensure that
|
|
70
70
|
# an active worker is guaranteed to have attempted to fetch new jobs in the meantime
|
|
71
|
-
forced_latency = Settings.sleep_delay + Settings.sleep_delay_stagger * 2 if all_workers_idle?
|
|
71
|
+
forced_latency = Settings.sleep_delay + (Settings.sleep_delay_stagger * 2) if all_workers_idle?
|
|
72
72
|
timeout = Settings.sleep_delay + (rand * Settings.sleep_delay_stagger)
|
|
73
73
|
readable, = IO.select(handles, nil, nil, timeout)
|
|
74
74
|
readable&.each { |s| handle_read(s) }
|
|
@@ -156,7 +156,7 @@ module Delayed
|
|
|
156
156
|
worker_config[:queue],
|
|
157
157
|
worker_config[:min_priority],
|
|
158
158
|
worker_config[:max_priority],
|
|
159
|
-
prefetch: Settings.fetch_batch_size * (worker_config[:workers] || 1) - recipients.length,
|
|
159
|
+
prefetch: (Settings.fetch_batch_size * (worker_config[:workers] || 1)) - recipients.length,
|
|
160
160
|
prefetch_owner: prefetch_owner,
|
|
161
161
|
forced_latency: forced_latency
|
|
162
162
|
)
|
|
@@ -195,11 +195,13 @@ module Delayed
|
|
|
195
195
|
def unlock_timed_out_prefetched_jobs
|
|
196
196
|
@prefetched_jobs.each do |(worker_config, jobs)|
|
|
197
197
|
next if jobs.empty?
|
|
198
|
+
next unless jobs.first.locked_at < Time.now.utc - Settings.parent_process[:prefetched_jobs_timeout]
|
|
198
199
|
|
|
199
|
-
|
|
200
|
+
Delayed::Job.transaction do
|
|
201
|
+
Delayed::Job.connection.execute("SELECT pg_advisory_xact_lock('#{Delayed::Job.prefetch_jobs_lock_name}')")
|
|
200
202
|
Delayed::Job.unlock(jobs)
|
|
201
|
-
@prefetched_jobs[worker_config] = []
|
|
202
203
|
end
|
|
204
|
+
@prefetched_jobs[worker_config] = []
|
|
203
205
|
end
|
|
204
206
|
end
|
|
205
207
|
|
|
@@ -207,7 +209,10 @@ module Delayed
|
|
|
207
209
|
@prefetched_jobs.each do |(_worker_config, jobs)|
|
|
208
210
|
next if jobs.empty?
|
|
209
211
|
|
|
210
|
-
Delayed::Job.
|
|
212
|
+
Delayed::Job.transaction do
|
|
213
|
+
Delayed::Job.connection.execute("SELECT pg_advisory_xact_lock('#{Delayed::Job.prefetch_jobs_lock_name}')")
|
|
214
|
+
Delayed::Job.unlock(jobs)
|
|
215
|
+
end
|
|
211
216
|
end
|
|
212
217
|
@prefetched_jobs = {}
|
|
213
218
|
end
|
|
@@ -33,7 +33,7 @@ module Delayed
|
|
|
33
33
|
# and we try to get an advisory lock when it runs. If we succeed,
|
|
34
34
|
# no other worker is trying to do this right now (and if we abandon the
|
|
35
35
|
# operation, the transaction will end, releasing the advisory lock).
|
|
36
|
-
result = attempt_advisory_lock
|
|
36
|
+
result = Delayed::Job.attempt_advisory_lock("Delayed::Worker::HealthCheck#reschedule_abandoned_jobs")
|
|
37
37
|
return unless result
|
|
38
38
|
|
|
39
39
|
checker = Worker::HealthCheck.build(
|
|
@@ -65,13 +65,6 @@ module Delayed
|
|
|
65
65
|
end
|
|
66
66
|
end
|
|
67
67
|
end
|
|
68
|
-
|
|
69
|
-
def attempt_advisory_lock
|
|
70
|
-
lock_name = "Delayed::Worker::HealthCheck#reschedule_abandoned_jobs"
|
|
71
|
-
conn = ActiveRecord::Base.connection
|
|
72
|
-
fn_name = conn.quote_table_name("half_md5_as_bigint")
|
|
73
|
-
conn.select_value("SELECT pg_try_advisory_xact_lock(#{fn_name}('#{lock_name}'));")
|
|
74
|
-
end
|
|
75
68
|
end
|
|
76
69
|
|
|
77
70
|
attr_accessor :config, :worker_name
|
|
@@ -207,7 +207,7 @@ describe "Delayed::Backed::ActiveRecord::Job" do
|
|
|
207
207
|
job2 = Delayed::Job.new(tag: "tag")
|
|
208
208
|
|
|
209
209
|
job1.create_and_lock!("prefetch:a")
|
|
210
|
-
job1.locked_at = Delayed::Job.db_time_now - 15 * 60
|
|
210
|
+
job1.locked_at = Delayed::Job.db_time_now - (15 * 60)
|
|
211
211
|
job1.save!
|
|
212
212
|
job2.create_and_lock!("prefetch:a")
|
|
213
213
|
|
|
@@ -111,7 +111,7 @@ RSpec.describe Delayed::Worker::HealthCheck do
|
|
|
111
111
|
end
|
|
112
112
|
|
|
113
113
|
it "bails immediately if advisory lock already taken" do
|
|
114
|
-
allow(
|
|
114
|
+
allow(Delayed::Job).to receive(:attempt_advisory_lock).and_return(false)
|
|
115
115
|
described_class.reschedule_abandoned_jobs
|
|
116
116
|
@dead_job.reload
|
|
117
117
|
expect(@dead_job.run_at.to_i).to eq(initial_run_at.to_i)
|
|
@@ -491,6 +491,19 @@ shared_examples_for "a backend" do
|
|
|
491
491
|
expect(@job2).to be_new_record
|
|
492
492
|
end
|
|
493
493
|
end
|
|
494
|
+
|
|
495
|
+
context "when unlocking with another singleton pending" do
|
|
496
|
+
it "deletes the pending singleton" do
|
|
497
|
+
@job1 = create_job(singleton: "myjobs", max_attempts: 2)
|
|
498
|
+
expect(Delayed::Job.get_and_lock_next_available("w1")).to eq(@job1)
|
|
499
|
+
|
|
500
|
+
@job2 = create_job(singleton: "myjobs", max_attempts: 2)
|
|
501
|
+
|
|
502
|
+
@job1.reload.reschedule
|
|
503
|
+
expect { @job1.reload }.not_to raise_error
|
|
504
|
+
expect { @job2.reload }.to raise_error(ActiveRecord::RecordNotFound)
|
|
505
|
+
end
|
|
506
|
+
end
|
|
494
507
|
end
|
|
495
508
|
end
|
|
496
509
|
|
data/spec/spec_helper.rb
CHANGED
|
@@ -4,6 +4,7 @@ require "delayed_job"
|
|
|
4
4
|
require "delayed/testing"
|
|
5
5
|
|
|
6
6
|
require "database_cleaner"
|
|
7
|
+
require "fileutils"
|
|
7
8
|
require "rack/test"
|
|
8
9
|
require "timecop"
|
|
9
10
|
require "webmock/rspec"
|
|
@@ -80,7 +81,8 @@ Delayed::Backend::ActiveRecord::Job.reset_column_information
|
|
|
80
81
|
Delayed::Backend::ActiveRecord::Job::Failed.reset_column_information
|
|
81
82
|
|
|
82
83
|
Time.zone = "UTC" # rubocop:disable Rails/TimeZoneAssignment
|
|
83
|
-
|
|
84
|
+
FileUtils.mkdir_p("tmp")
|
|
85
|
+
ActiveRecord::Base.logger = Rails.logger = Logger.new("tmp/test.log")
|
|
84
86
|
|
|
85
87
|
# Purely useful for test cases...
|
|
86
88
|
class Story < ActiveRecord::Base
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: inst-jobs
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.4.
|
|
4
|
+
version: 2.4.6
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Tobias Luetke
|
|
@@ -9,7 +9,7 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: exe
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2021-09-
|
|
12
|
+
date: 2021-09-21 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: activerecord
|
|
@@ -101,6 +101,20 @@ dependencies:
|
|
|
101
101
|
- - ">="
|
|
102
102
|
- !ruby/object:Gem::Version
|
|
103
103
|
version: '5.2'
|
|
104
|
+
- !ruby/object:Gem::Dependency
|
|
105
|
+
name: appraisal
|
|
106
|
+
requirement: !ruby/object:Gem::Requirement
|
|
107
|
+
requirements:
|
|
108
|
+
- - "~>"
|
|
109
|
+
- !ruby/object:Gem::Version
|
|
110
|
+
version: '2.4'
|
|
111
|
+
type: :development
|
|
112
|
+
prerelease: false
|
|
113
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
114
|
+
requirements:
|
|
115
|
+
- - "~>"
|
|
116
|
+
- !ruby/object:Gem::Version
|
|
117
|
+
version: '2.4'
|
|
104
118
|
- !ruby/object:Gem::Dependency
|
|
105
119
|
name: bump
|
|
106
120
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -417,6 +431,7 @@ files:
|
|
|
417
431
|
- db/migrate/20200825011002_add_strand_order_override.rb
|
|
418
432
|
- db/migrate/20210809145804_add_n_strand_index.rb
|
|
419
433
|
- db/migrate/20210812210128_add_singleton_column.rb
|
|
434
|
+
- db/migrate/20210917232626_add_delete_conflicting_singletons_before_unlock_trigger.rb
|
|
420
435
|
- exe/inst_jobs
|
|
421
436
|
- lib/delayed/backend/active_record.rb
|
|
422
437
|
- lib/delayed/backend/base.rb
|
|
@@ -469,11 +484,6 @@ files:
|
|
|
469
484
|
- spec/delayed/worker/consul_health_check_spec.rb
|
|
470
485
|
- spec/delayed/worker/health_check_spec.rb
|
|
471
486
|
- spec/delayed/worker_spec.rb
|
|
472
|
-
- spec/gemfiles/52.gemfile
|
|
473
|
-
- spec/gemfiles/52.gemfile.lock
|
|
474
|
-
- spec/gemfiles/60.gemfile
|
|
475
|
-
- spec/gemfiles/60.gemfile.lock
|
|
476
|
-
- spec/gemfiles/61.gemfile
|
|
477
487
|
- spec/migrate/20140924140513_add_story_table.rb
|
|
478
488
|
- spec/sample_jobs.rb
|
|
479
489
|
- spec/shared/delayed_batch.rb
|
|
@@ -509,11 +519,6 @@ summary: Instructure-maintained fork of delayed_job
|
|
|
509
519
|
test_files:
|
|
510
520
|
- spec/sample_jobs.rb
|
|
511
521
|
- spec/spec_helper.rb
|
|
512
|
-
- spec/gemfiles/60.gemfile.lock
|
|
513
|
-
- spec/gemfiles/61.gemfile
|
|
514
|
-
- spec/gemfiles/60.gemfile
|
|
515
|
-
- spec/gemfiles/52.gemfile
|
|
516
|
-
- spec/gemfiles/52.gemfile.lock
|
|
517
522
|
- spec/shared_jobs_specs.rb
|
|
518
523
|
- spec/shared/performable_method.rb
|
|
519
524
|
- spec/shared/testing.rb
|
data/spec/gemfiles/52.gemfile
DELETED
|
@@ -1,240 +0,0 @@
|
|
|
1
|
-
PATH
|
|
2
|
-
remote: ../..
|
|
3
|
-
specs:
|
|
4
|
-
inst-jobs (2.3.3)
|
|
5
|
-
activerecord (>= 5.2)
|
|
6
|
-
activesupport (>= 5.2)
|
|
7
|
-
after_transaction_commit (>= 1.0, < 3)
|
|
8
|
-
debug_inspector (~> 1.0)
|
|
9
|
-
fugit (~> 1.3)
|
|
10
|
-
railties (>= 5.2)
|
|
11
|
-
redis (> 3.0)
|
|
12
|
-
redis-scripting (~> 1.0.1)
|
|
13
|
-
|
|
14
|
-
GEM
|
|
15
|
-
remote: https://rubygems.org/
|
|
16
|
-
specs:
|
|
17
|
-
actioncable (5.2.6)
|
|
18
|
-
actionpack (= 5.2.6)
|
|
19
|
-
nio4r (~> 2.0)
|
|
20
|
-
websocket-driver (>= 0.6.1)
|
|
21
|
-
actionmailer (5.2.6)
|
|
22
|
-
actionpack (= 5.2.6)
|
|
23
|
-
actionview (= 5.2.6)
|
|
24
|
-
activejob (= 5.2.6)
|
|
25
|
-
mail (~> 2.5, >= 2.5.4)
|
|
26
|
-
rails-dom-testing (~> 2.0)
|
|
27
|
-
actionpack (5.2.6)
|
|
28
|
-
actionview (= 5.2.6)
|
|
29
|
-
activesupport (= 5.2.6)
|
|
30
|
-
rack (~> 2.0, >= 2.0.8)
|
|
31
|
-
rack-test (>= 0.6.3)
|
|
32
|
-
rails-dom-testing (~> 2.0)
|
|
33
|
-
rails-html-sanitizer (~> 1.0, >= 1.0.2)
|
|
34
|
-
actionview (5.2.6)
|
|
35
|
-
activesupport (= 5.2.6)
|
|
36
|
-
builder (~> 3.1)
|
|
37
|
-
erubi (~> 1.4)
|
|
38
|
-
rails-dom-testing (~> 2.0)
|
|
39
|
-
rails-html-sanitizer (~> 1.0, >= 1.0.3)
|
|
40
|
-
activejob (5.2.6)
|
|
41
|
-
activesupport (= 5.2.6)
|
|
42
|
-
globalid (>= 0.3.6)
|
|
43
|
-
activemodel (5.2.6)
|
|
44
|
-
activesupport (= 5.2.6)
|
|
45
|
-
activerecord (5.2.6)
|
|
46
|
-
activemodel (= 5.2.6)
|
|
47
|
-
activesupport (= 5.2.6)
|
|
48
|
-
arel (>= 9.0)
|
|
49
|
-
activestorage (5.2.6)
|
|
50
|
-
actionpack (= 5.2.6)
|
|
51
|
-
activerecord (= 5.2.6)
|
|
52
|
-
marcel (~> 1.0.0)
|
|
53
|
-
activesupport (5.2.6)
|
|
54
|
-
concurrent-ruby (~> 1.0, >= 1.0.2)
|
|
55
|
-
i18n (>= 0.7, < 2)
|
|
56
|
-
minitest (~> 5.1)
|
|
57
|
-
tzinfo (~> 1.1)
|
|
58
|
-
addressable (2.8.0)
|
|
59
|
-
public_suffix (>= 2.0.2, < 5.0)
|
|
60
|
-
after_transaction_commit (2.2.2)
|
|
61
|
-
activerecord (>= 5.2)
|
|
62
|
-
arel (9.0.0)
|
|
63
|
-
builder (3.2.4)
|
|
64
|
-
bump (0.10.0)
|
|
65
|
-
byebug (11.1.3)
|
|
66
|
-
coderay (1.1.3)
|
|
67
|
-
concurrent-ruby (1.1.9)
|
|
68
|
-
crack (0.4.5)
|
|
69
|
-
rexml
|
|
70
|
-
crass (1.0.6)
|
|
71
|
-
database_cleaner (2.0.1)
|
|
72
|
-
database_cleaner-active_record (~> 2.0.0)
|
|
73
|
-
database_cleaner-active_record (2.0.1)
|
|
74
|
-
activerecord (>= 5.a)
|
|
75
|
-
database_cleaner-core (~> 2.0.0)
|
|
76
|
-
database_cleaner-core (2.0.1)
|
|
77
|
-
debug_inspector (1.1.0)
|
|
78
|
-
deep_merge (1.2.1)
|
|
79
|
-
diff-lcs (1.4.4)
|
|
80
|
-
diplomat (2.5.1)
|
|
81
|
-
deep_merge (~> 1.2)
|
|
82
|
-
faraday (>= 0.9)
|
|
83
|
-
erubi (1.10.0)
|
|
84
|
-
et-orbi (1.2.4)
|
|
85
|
-
tzinfo
|
|
86
|
-
faraday (1.7.0)
|
|
87
|
-
faraday-em_http (~> 1.0)
|
|
88
|
-
faraday-em_synchrony (~> 1.0)
|
|
89
|
-
faraday-excon (~> 1.1)
|
|
90
|
-
faraday-httpclient (~> 1.0.1)
|
|
91
|
-
faraday-net_http (~> 1.0)
|
|
92
|
-
faraday-net_http_persistent (~> 1.1)
|
|
93
|
-
faraday-patron (~> 1.0)
|
|
94
|
-
faraday-rack (~> 1.0)
|
|
95
|
-
multipart-post (>= 1.2, < 3)
|
|
96
|
-
ruby2_keywords (>= 0.0.4)
|
|
97
|
-
faraday-em_http (1.0.0)
|
|
98
|
-
faraday-em_synchrony (1.0.0)
|
|
99
|
-
faraday-excon (1.1.0)
|
|
100
|
-
faraday-httpclient (1.0.1)
|
|
101
|
-
faraday-net_http (1.0.1)
|
|
102
|
-
faraday-net_http_persistent (1.2.0)
|
|
103
|
-
faraday-patron (1.0.0)
|
|
104
|
-
faraday-rack (1.0.0)
|
|
105
|
-
fugit (1.5.0)
|
|
106
|
-
et-orbi (~> 1.1, >= 1.1.8)
|
|
107
|
-
raabro (~> 1.4)
|
|
108
|
-
globalid (0.5.2)
|
|
109
|
-
activesupport (>= 5.0)
|
|
110
|
-
hashdiff (1.0.1)
|
|
111
|
-
i18n (1.8.10)
|
|
112
|
-
concurrent-ruby (~> 1.0)
|
|
113
|
-
loofah (2.12.0)
|
|
114
|
-
crass (~> 1.0.2)
|
|
115
|
-
nokogiri (>= 1.5.9)
|
|
116
|
-
mail (2.7.1)
|
|
117
|
-
mini_mime (>= 0.1.1)
|
|
118
|
-
marcel (1.0.1)
|
|
119
|
-
method_source (1.0.0)
|
|
120
|
-
mini_mime (1.1.0)
|
|
121
|
-
minitest (5.14.4)
|
|
122
|
-
multi_json (1.15.0)
|
|
123
|
-
multipart-post (2.1.1)
|
|
124
|
-
mustermann (1.1.1)
|
|
125
|
-
ruby2_keywords (~> 0.0.1)
|
|
126
|
-
nio4r (2.5.8)
|
|
127
|
-
nokogiri (1.12.3-x86_64-darwin)
|
|
128
|
-
racc (~> 1.4)
|
|
129
|
-
pg (1.2.3)
|
|
130
|
-
pry (0.14.1)
|
|
131
|
-
coderay (~> 1.1)
|
|
132
|
-
method_source (~> 1.0)
|
|
133
|
-
public_suffix (4.0.6)
|
|
134
|
-
raabro (1.4.0)
|
|
135
|
-
racc (1.5.2)
|
|
136
|
-
rack (2.2.3)
|
|
137
|
-
rack-protection (2.1.0)
|
|
138
|
-
rack
|
|
139
|
-
rack-test (1.1.0)
|
|
140
|
-
rack (>= 1.0, < 3)
|
|
141
|
-
rails (5.2.6)
|
|
142
|
-
actioncable (= 5.2.6)
|
|
143
|
-
actionmailer (= 5.2.6)
|
|
144
|
-
actionpack (= 5.2.6)
|
|
145
|
-
actionview (= 5.2.6)
|
|
146
|
-
activejob (= 5.2.6)
|
|
147
|
-
activemodel (= 5.2.6)
|
|
148
|
-
activerecord (= 5.2.6)
|
|
149
|
-
activestorage (= 5.2.6)
|
|
150
|
-
activesupport (= 5.2.6)
|
|
151
|
-
bundler (>= 1.3.0)
|
|
152
|
-
railties (= 5.2.6)
|
|
153
|
-
sprockets-rails (>= 2.0.0)
|
|
154
|
-
rails-dom-testing (2.0.3)
|
|
155
|
-
activesupport (>= 4.2.0)
|
|
156
|
-
nokogiri (>= 1.6)
|
|
157
|
-
rails-html-sanitizer (1.3.0)
|
|
158
|
-
loofah (~> 2.3)
|
|
159
|
-
railties (5.2.6)
|
|
160
|
-
actionpack (= 5.2.6)
|
|
161
|
-
activesupport (= 5.2.6)
|
|
162
|
-
method_source
|
|
163
|
-
rake (>= 0.8.7)
|
|
164
|
-
thor (>= 0.19.0, < 2.0)
|
|
165
|
-
rake (13.0.6)
|
|
166
|
-
redis (4.4.0)
|
|
167
|
-
redis-scripting (1.0.1)
|
|
168
|
-
redis (>= 3.0)
|
|
169
|
-
rexml (3.2.5)
|
|
170
|
-
rspec (3.10.0)
|
|
171
|
-
rspec-core (~> 3.10.0)
|
|
172
|
-
rspec-expectations (~> 3.10.0)
|
|
173
|
-
rspec-mocks (~> 3.10.0)
|
|
174
|
-
rspec-core (3.10.1)
|
|
175
|
-
rspec-support (~> 3.10.0)
|
|
176
|
-
rspec-expectations (3.10.1)
|
|
177
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
|
178
|
-
rspec-support (~> 3.10.0)
|
|
179
|
-
rspec-mocks (3.10.2)
|
|
180
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
|
181
|
-
rspec-support (~> 3.10.0)
|
|
182
|
-
rspec-support (3.10.2)
|
|
183
|
-
ruby2_keywords (0.0.5)
|
|
184
|
-
sinatra (2.1.0)
|
|
185
|
-
mustermann (~> 1.0)
|
|
186
|
-
rack (~> 2.2)
|
|
187
|
-
rack-protection (= 2.1.0)
|
|
188
|
-
tilt (~> 2.0)
|
|
189
|
-
sinatra-contrib (2.1.0)
|
|
190
|
-
multi_json
|
|
191
|
-
mustermann (~> 1.0)
|
|
192
|
-
rack-protection (= 2.1.0)
|
|
193
|
-
sinatra (= 2.1.0)
|
|
194
|
-
tilt (~> 2.0)
|
|
195
|
-
sprockets (4.0.2)
|
|
196
|
-
concurrent-ruby (~> 1.0)
|
|
197
|
-
rack (> 1, < 3)
|
|
198
|
-
sprockets-rails (3.2.2)
|
|
199
|
-
actionpack (>= 4.0)
|
|
200
|
-
activesupport (>= 4.0)
|
|
201
|
-
sprockets (>= 3.0.0)
|
|
202
|
-
thor (1.1.0)
|
|
203
|
-
thread_safe (0.3.6)
|
|
204
|
-
tilt (2.0.10)
|
|
205
|
-
timecop (0.9.4)
|
|
206
|
-
tzinfo (1.2.9)
|
|
207
|
-
thread_safe (~> 0.1)
|
|
208
|
-
webmock (3.14.0)
|
|
209
|
-
addressable (>= 2.8.0)
|
|
210
|
-
crack (>= 0.3.2)
|
|
211
|
-
hashdiff (>= 0.4.0, < 2.0.0)
|
|
212
|
-
websocket-driver (0.7.5)
|
|
213
|
-
websocket-extensions (>= 0.1.0)
|
|
214
|
-
websocket-extensions (0.1.5)
|
|
215
|
-
wwtd (1.4.1)
|
|
216
|
-
|
|
217
|
-
PLATFORMS
|
|
218
|
-
x86_64-darwin-20
|
|
219
|
-
|
|
220
|
-
DEPENDENCIES
|
|
221
|
-
bump
|
|
222
|
-
byebug
|
|
223
|
-
database_cleaner (~> 2.0)
|
|
224
|
-
database_cleaner-active_record (~> 2.0)
|
|
225
|
-
diplomat (~> 2.5.1)
|
|
226
|
-
inst-jobs!
|
|
227
|
-
pg
|
|
228
|
-
pry
|
|
229
|
-
rack-test
|
|
230
|
-
rails (~> 5.2.0)
|
|
231
|
-
rake
|
|
232
|
-
rspec (~> 3.10)
|
|
233
|
-
sinatra (~> 2.0)
|
|
234
|
-
sinatra-contrib (~> 2.0)
|
|
235
|
-
timecop (= 0.9.4)
|
|
236
|
-
webmock
|
|
237
|
-
wwtd (~> 1.4.0)
|
|
238
|
-
|
|
239
|
-
BUNDLED WITH
|
|
240
|
-
2.2.24
|
data/spec/gemfiles/60.gemfile
DELETED
|
@@ -1,246 +0,0 @@
|
|
|
1
|
-
PATH
|
|
2
|
-
remote: ../..
|
|
3
|
-
specs:
|
|
4
|
-
inst-jobs (2.3.3)
|
|
5
|
-
activerecord (>= 5.2)
|
|
6
|
-
activesupport (>= 5.2)
|
|
7
|
-
after_transaction_commit (>= 1.0, < 3)
|
|
8
|
-
debug_inspector (~> 1.0)
|
|
9
|
-
fugit (~> 1.3)
|
|
10
|
-
railties (>= 5.2)
|
|
11
|
-
redis (> 3.0)
|
|
12
|
-
redis-scripting (~> 1.0.1)
|
|
13
|
-
|
|
14
|
-
GEM
|
|
15
|
-
remote: https://rubygems.org/
|
|
16
|
-
specs:
|
|
17
|
-
actioncable (6.0.3.7)
|
|
18
|
-
actionpack (= 6.0.3.7)
|
|
19
|
-
nio4r (~> 2.0)
|
|
20
|
-
websocket-driver (>= 0.6.1)
|
|
21
|
-
actionmailbox (6.0.3.7)
|
|
22
|
-
actionpack (= 6.0.3.7)
|
|
23
|
-
activejob (= 6.0.3.7)
|
|
24
|
-
activerecord (= 6.0.3.7)
|
|
25
|
-
activestorage (= 6.0.3.7)
|
|
26
|
-
activesupport (= 6.0.3.7)
|
|
27
|
-
mail (>= 2.7.1)
|
|
28
|
-
actionmailer (6.0.3.7)
|
|
29
|
-
actionpack (= 6.0.3.7)
|
|
30
|
-
actionview (= 6.0.3.7)
|
|
31
|
-
activejob (= 6.0.3.7)
|
|
32
|
-
mail (~> 2.5, >= 2.5.4)
|
|
33
|
-
rails-dom-testing (~> 2.0)
|
|
34
|
-
actionpack (6.0.3.7)
|
|
35
|
-
actionview (= 6.0.3.7)
|
|
36
|
-
activesupport (= 6.0.3.7)
|
|
37
|
-
rack (~> 2.0, >= 2.0.8)
|
|
38
|
-
rack-test (>= 0.6.3)
|
|
39
|
-
rails-dom-testing (~> 2.0)
|
|
40
|
-
rails-html-sanitizer (~> 1.0, >= 1.2.0)
|
|
41
|
-
actiontext (6.0.3.7)
|
|
42
|
-
actionpack (= 6.0.3.7)
|
|
43
|
-
activerecord (= 6.0.3.7)
|
|
44
|
-
activestorage (= 6.0.3.7)
|
|
45
|
-
activesupport (= 6.0.3.7)
|
|
46
|
-
nokogiri (>= 1.8.5)
|
|
47
|
-
actionview (6.0.3.7)
|
|
48
|
-
activesupport (= 6.0.3.7)
|
|
49
|
-
builder (~> 3.1)
|
|
50
|
-
erubi (~> 1.4)
|
|
51
|
-
rails-dom-testing (~> 2.0)
|
|
52
|
-
rails-html-sanitizer (~> 1.1, >= 1.2.0)
|
|
53
|
-
activejob (6.0.3.7)
|
|
54
|
-
activesupport (= 6.0.3.7)
|
|
55
|
-
globalid (>= 0.3.6)
|
|
56
|
-
activemodel (6.0.3.7)
|
|
57
|
-
activesupport (= 6.0.3.7)
|
|
58
|
-
activerecord (6.0.3.7)
|
|
59
|
-
activemodel (= 6.0.3.7)
|
|
60
|
-
activesupport (= 6.0.3.7)
|
|
61
|
-
activestorage (6.0.3.7)
|
|
62
|
-
actionpack (= 6.0.3.7)
|
|
63
|
-
activejob (= 6.0.3.7)
|
|
64
|
-
activerecord (= 6.0.3.7)
|
|
65
|
-
marcel (~> 1.0.0)
|
|
66
|
-
activesupport (6.0.3.7)
|
|
67
|
-
concurrent-ruby (~> 1.0, >= 1.0.2)
|
|
68
|
-
i18n (>= 0.7, < 2)
|
|
69
|
-
minitest (~> 5.1)
|
|
70
|
-
tzinfo (~> 1.1)
|
|
71
|
-
zeitwerk (~> 2.2, >= 2.2.2)
|
|
72
|
-
addressable (2.7.0)
|
|
73
|
-
public_suffix (>= 2.0.2, < 5.0)
|
|
74
|
-
after_transaction_commit (2.2.2)
|
|
75
|
-
activerecord (>= 5.2)
|
|
76
|
-
builder (3.2.4)
|
|
77
|
-
bump (0.10.0)
|
|
78
|
-
byebug (11.1.3)
|
|
79
|
-
coderay (1.1.3)
|
|
80
|
-
concurrent-ruby (1.1.9)
|
|
81
|
-
crack (0.4.5)
|
|
82
|
-
rexml
|
|
83
|
-
crass (1.0.6)
|
|
84
|
-
database_cleaner (2.0.1)
|
|
85
|
-
database_cleaner-active_record (~> 2.0.0)
|
|
86
|
-
database_cleaner-active_record (2.0.0)
|
|
87
|
-
activerecord (>= 5.a)
|
|
88
|
-
database_cleaner-core (~> 2.0.0)
|
|
89
|
-
database_cleaner-core (2.0.1)
|
|
90
|
-
debug_inspector (1.1.0)
|
|
91
|
-
deep_merge (1.2.1)
|
|
92
|
-
diff-lcs (1.4.4)
|
|
93
|
-
diplomat (2.5.1)
|
|
94
|
-
deep_merge (~> 1.2)
|
|
95
|
-
faraday (>= 0.9)
|
|
96
|
-
erubi (1.10.0)
|
|
97
|
-
et-orbi (1.2.4)
|
|
98
|
-
tzinfo
|
|
99
|
-
faraday (1.4.1)
|
|
100
|
-
faraday-excon (~> 1.1)
|
|
101
|
-
faraday-net_http (~> 1.0)
|
|
102
|
-
faraday-net_http_persistent (~> 1.1)
|
|
103
|
-
multipart-post (>= 1.2, < 3)
|
|
104
|
-
ruby2_keywords (>= 0.0.4)
|
|
105
|
-
faraday-excon (1.1.0)
|
|
106
|
-
faraday-net_http (1.0.1)
|
|
107
|
-
faraday-net_http_persistent (1.1.0)
|
|
108
|
-
fugit (1.4.5)
|
|
109
|
-
et-orbi (~> 1.1, >= 1.1.8)
|
|
110
|
-
raabro (~> 1.4)
|
|
111
|
-
globalid (0.4.2)
|
|
112
|
-
activesupport (>= 4.2.0)
|
|
113
|
-
hashdiff (1.0.1)
|
|
114
|
-
i18n (1.8.10)
|
|
115
|
-
concurrent-ruby (~> 1.0)
|
|
116
|
-
loofah (2.10.0)
|
|
117
|
-
crass (~> 1.0.2)
|
|
118
|
-
nokogiri (>= 1.5.9)
|
|
119
|
-
mail (2.7.1)
|
|
120
|
-
mini_mime (>= 0.1.1)
|
|
121
|
-
marcel (1.0.1)
|
|
122
|
-
method_source (1.0.0)
|
|
123
|
-
mini_mime (1.1.0)
|
|
124
|
-
minitest (5.14.4)
|
|
125
|
-
multi_json (1.15.0)
|
|
126
|
-
multipart-post (2.1.1)
|
|
127
|
-
mustermann (1.1.1)
|
|
128
|
-
ruby2_keywords (~> 0.0.1)
|
|
129
|
-
nio4r (2.5.7)
|
|
130
|
-
nokogiri (1.11.7-x86_64-darwin)
|
|
131
|
-
racc (~> 1.4)
|
|
132
|
-
pg (1.2.3)
|
|
133
|
-
pry (0.14.1)
|
|
134
|
-
coderay (~> 1.1)
|
|
135
|
-
method_source (~> 1.0)
|
|
136
|
-
public_suffix (4.0.6)
|
|
137
|
-
raabro (1.4.0)
|
|
138
|
-
racc (1.5.2)
|
|
139
|
-
rack (2.2.3)
|
|
140
|
-
rack-protection (2.1.0)
|
|
141
|
-
rack
|
|
142
|
-
rack-test (1.1.0)
|
|
143
|
-
rack (>= 1.0, < 3)
|
|
144
|
-
rails (6.0.3.7)
|
|
145
|
-
actioncable (= 6.0.3.7)
|
|
146
|
-
actionmailbox (= 6.0.3.7)
|
|
147
|
-
actionmailer (= 6.0.3.7)
|
|
148
|
-
actionpack (= 6.0.3.7)
|
|
149
|
-
actiontext (= 6.0.3.7)
|
|
150
|
-
actionview (= 6.0.3.7)
|
|
151
|
-
activejob (= 6.0.3.7)
|
|
152
|
-
activemodel (= 6.0.3.7)
|
|
153
|
-
activerecord (= 6.0.3.7)
|
|
154
|
-
activestorage (= 6.0.3.7)
|
|
155
|
-
activesupport (= 6.0.3.7)
|
|
156
|
-
bundler (>= 1.3.0)
|
|
157
|
-
railties (= 6.0.3.7)
|
|
158
|
-
sprockets-rails (>= 2.0.0)
|
|
159
|
-
rails-dom-testing (2.0.3)
|
|
160
|
-
activesupport (>= 4.2.0)
|
|
161
|
-
nokogiri (>= 1.6)
|
|
162
|
-
rails-html-sanitizer (1.3.0)
|
|
163
|
-
loofah (~> 2.3)
|
|
164
|
-
railties (6.0.3.7)
|
|
165
|
-
actionpack (= 6.0.3.7)
|
|
166
|
-
activesupport (= 6.0.3.7)
|
|
167
|
-
method_source
|
|
168
|
-
rake (>= 0.8.7)
|
|
169
|
-
thor (>= 0.20.3, < 2.0)
|
|
170
|
-
rake (13.0.3)
|
|
171
|
-
redis (4.2.5)
|
|
172
|
-
redis-scripting (1.0.1)
|
|
173
|
-
redis (>= 3.0)
|
|
174
|
-
rexml (3.2.5)
|
|
175
|
-
rspec (3.10.0)
|
|
176
|
-
rspec-core (~> 3.10.0)
|
|
177
|
-
rspec-expectations (~> 3.10.0)
|
|
178
|
-
rspec-mocks (~> 3.10.0)
|
|
179
|
-
rspec-core (3.10.1)
|
|
180
|
-
rspec-support (~> 3.10.0)
|
|
181
|
-
rspec-expectations (3.10.1)
|
|
182
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
|
183
|
-
rspec-support (~> 3.10.0)
|
|
184
|
-
rspec-mocks (3.10.2)
|
|
185
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
|
186
|
-
rspec-support (~> 3.10.0)
|
|
187
|
-
rspec-support (3.10.2)
|
|
188
|
-
ruby2_keywords (0.0.4)
|
|
189
|
-
sinatra (2.1.0)
|
|
190
|
-
mustermann (~> 1.0)
|
|
191
|
-
rack (~> 2.2)
|
|
192
|
-
rack-protection (= 2.1.0)
|
|
193
|
-
tilt (~> 2.0)
|
|
194
|
-
sinatra-contrib (2.1.0)
|
|
195
|
-
multi_json
|
|
196
|
-
mustermann (~> 1.0)
|
|
197
|
-
rack-protection (= 2.1.0)
|
|
198
|
-
sinatra (= 2.1.0)
|
|
199
|
-
tilt (~> 2.0)
|
|
200
|
-
sprockets (4.0.2)
|
|
201
|
-
concurrent-ruby (~> 1.0)
|
|
202
|
-
rack (> 1, < 3)
|
|
203
|
-
sprockets-rails (3.2.2)
|
|
204
|
-
actionpack (>= 4.0)
|
|
205
|
-
activesupport (>= 4.0)
|
|
206
|
-
sprockets (>= 3.0.0)
|
|
207
|
-
thor (1.1.0)
|
|
208
|
-
thread_safe (0.3.6)
|
|
209
|
-
tilt (2.0.10)
|
|
210
|
-
timecop (0.9.4)
|
|
211
|
-
tzinfo (1.2.9)
|
|
212
|
-
thread_safe (~> 0.1)
|
|
213
|
-
webmock (3.13.0)
|
|
214
|
-
addressable (>= 2.3.6)
|
|
215
|
-
crack (>= 0.3.2)
|
|
216
|
-
hashdiff (>= 0.4.0, < 2.0.0)
|
|
217
|
-
websocket-driver (0.7.5)
|
|
218
|
-
websocket-extensions (>= 0.1.0)
|
|
219
|
-
websocket-extensions (0.1.5)
|
|
220
|
-
wwtd (1.4.1)
|
|
221
|
-
zeitwerk (2.4.2)
|
|
222
|
-
|
|
223
|
-
PLATFORMS
|
|
224
|
-
x86_64-darwin-20
|
|
225
|
-
|
|
226
|
-
DEPENDENCIES
|
|
227
|
-
bump
|
|
228
|
-
byebug
|
|
229
|
-
database_cleaner (~> 2.0)
|
|
230
|
-
database_cleaner-active_record (~> 2.0)
|
|
231
|
-
diplomat (~> 2.5.1)
|
|
232
|
-
inst-jobs!
|
|
233
|
-
pg
|
|
234
|
-
pry
|
|
235
|
-
rack-test
|
|
236
|
-
rails (~> 6.0.0)
|
|
237
|
-
rake
|
|
238
|
-
rspec (~> 3.10)
|
|
239
|
-
sinatra (~> 2.0)
|
|
240
|
-
sinatra-contrib (~> 2.0)
|
|
241
|
-
timecop (= 0.9.4)
|
|
242
|
-
webmock
|
|
243
|
-
wwtd (~> 1.4.0)
|
|
244
|
-
|
|
245
|
-
BUNDLED WITH
|
|
246
|
-
2.2.17
|