inst-jobs 2.4.0 → 2.4.4

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: 02cb2ab5274e3a6616a74bb75cc8c74cd767c850cfb5451931e08ff582096238
4
- data.tar.gz: 045a1caa153d01bb8f9ec756bb53777efe564597822d71e58652ef4a86e6a2d5
3
+ metadata.gz: 90e78e46299d111959e7e48f25fe4e05a7939c6fb54fcd423deff4b960e79e6c
4
+ data.tar.gz: 20963910cd2cb1856f73cabbdc1547131a0d5096e26f7cc444f0a6e7d26b0ded
5
5
  SHA512:
6
- metadata.gz: 5be013e7266ffad6f13bfb0020adf1f8c1b7cae8041bcb03e2840f1c9073de265f61ed2054434faa8abcb33f0ce3c89e800b941fa6c107f005a254a1cdf4fc3b
7
- data.tar.gz: 49b689debce5e7bb40313905ded5af1b7232c4a2224e2e42f1637902d66c9e4ddadd64139d48593a78a54afbe539451f16708df43067efcabd1997c433ecd7e5
6
+ metadata.gz: 22155dba3fd9f1201e67930be8a3cc488da21b02b2066b59fe9a0f28f5670393534ddbb87a937979df356ba602c23a27e97f7650463fa2eb7c53e76647df5f02
7
+ data.tar.gz: 41a6bec7f263657aac33b62eeb8169db1898dfdcdbfadc32d91a985f54cb037a5691d75f02dff80b9c80ea57387a746fa70e6710545fe6b9c12724dde9f8f720
@@ -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
@@ -98,11 +98,11 @@ module Delayed
98
98
  fn_name = connection.quote_table_name("half_md5_as_bigint")
99
99
  sql = "SELECT pg_advisory_xact_lock(#{fn_name}(#{connection.quote(values['strand'])})); #{sql}"
100
100
  end
101
- result = connection.execute(sql, "#{self} Create")
102
- self.id = result.values.first.first
101
+ result = connection.execute(sql, "#{self.class} Create")
102
+ self.id = result.values.first&.first
103
103
  result.clear
104
104
  else
105
- result = connection.exec_query(sql, "#{self} Create", binds)
105
+ result = connection.exec_query(sql, "#{self.class} Create", binds)
106
106
  self.id = connection.send(:last_inserted_id, result)
107
107
  end
108
108
 
@@ -459,7 +459,7 @@ module Delayed
459
459
  end
460
460
 
461
461
  def self.unlock_orphaned_prefetched_jobs
462
- horizon = db_time_now - Settings.parent_process[:prefetched_jobs_timeout] * 4
462
+ horizon = db_time_now - (Settings.parent_process[:prefetched_jobs_timeout] * 4)
463
463
  where("locked_by LIKE 'prefetch:%' AND locked_at<?", horizon).update_all(locked_at: nil, locked_by: nil)
464
464
  end
465
465
 
@@ -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)
@@ -39,7 +39,7 @@ module Delayed
39
39
 
40
40
  return @object.public_send(method, *args) if kwargs.empty?
41
41
 
42
- @object.public_send(method, *args, **kwargs)
42
+ return @object.public_send(method, *args, **kwargs)
43
43
  end
44
44
 
45
45
  ignore_transaction = @enqueue_args.delete(:ignore_transaction)
@@ -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/pool.rb CHANGED
@@ -188,7 +188,7 @@ module Delayed
188
188
  end
189
189
 
190
190
  def pool_sleep
191
- IO.select([@self_pipe[0]], nil, nil, POOL_SLEEP_PERIOD)
191
+ @self_pipe[0].wait_readable(POOL_SLEEP_PERIOD)
192
192
  @self_pipe[0].read_nonblock(11, exception: false)
193
193
  end
194
194
 
@@ -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
- "#{Rails.root}Gemfile".to_s
104
+ Rails.root.join("Gemfile")
105
105
  else
106
106
  ENV.fetch("BUNDLE_GEMFILE", "#{Dir.pwd}/Gemfile")
107
107
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Delayed
4
- VERSION = "2.4.0"
4
+ VERSION = "2.4.4"
5
5
  end
@@ -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
  )
@@ -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
 
@@ -20,6 +20,10 @@ RSpec.describe Delayed::MessageSending do
20
20
  other.delay(**enqueue_args).protected_method
21
21
  end
22
22
 
23
+ def call_public(**_kwargs)
24
+ 42
25
+ end
26
+
23
27
  private
24
28
 
25
29
  def private_method; end
@@ -74,6 +78,10 @@ RSpec.describe Delayed::MessageSending do
74
78
  klass.new.call_protected(synchronous: true)
75
79
  end
76
80
 
81
+ it "directly calls a public method on an object with kwargs" do
82
+ expect(klass.new.delay(synchronous: true).call_public(kwarg: 10)).to eq 42
83
+ end
84
+
77
85
  it "warns about directly sending a protected message asynchronously" do
78
86
  expect { klass.new.delay.protected_method }.to raise_error(NoMethodError)
79
87
  end
@@ -474,6 +474,36 @@ shared_examples_for "a backend" do
474
474
  expect(Delayed::Job.get_and_lock_next_available("w1")).to be_nil
475
475
  end
476
476
  end
477
+
478
+ context "with on_conflict: loose and strand-inferred-from-singleton" do
479
+ around do |example|
480
+ Delayed::Settings.infer_strand_from_singleton = true
481
+ example.call
482
+ ensure
483
+ Delayed::Settings.infer_strand_from_singleton = false
484
+ end
485
+
486
+ it "does not create if there's another non-running job on the strand" do
487
+ @job = create_job(singleton: "myjobs", on_conflict: :loose)
488
+ expect(@job).to be_present
489
+
490
+ @job2 = create_job(singleton: "myjobs", on_conflict: :loose)
491
+ expect(@job2).to be_new_record
492
+ end
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
477
507
  end
478
508
  end
479
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
- Rails.logger = Logger.new(nil)
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.0
4
+ version: 2.4.4
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-03 00:00:00.000000000 Z
12
+ date: 2021-09-18 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
@@ -1,9 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- source "https://rubygems.org"
4
-
5
- gemspec path: "../../"
6
-
7
- gem "rails", "~> 5.2.0"
8
- gem "sinatra", "~> 2.0"
9
- gem "sinatra-contrib", "~> 2.0"
@@ -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
@@ -1,9 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- source "https://rubygems.org"
4
-
5
- gemspec path: "../../"
6
-
7
- gem "rails", "~> 6.0.0"
8
- gem "sinatra", "~> 2.0"
9
- gem "sinatra-contrib", "~> 2.0"
@@ -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
@@ -1,9 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- source "https://rubygems.org"
4
-
5
- gemspec path: "../../"
6
-
7
- gem "rails", "~> 6.1.0"
8
- gem "sinatra", "~> 2.0"
9
- gem "sinatra-contrib", "~> 2.0"