sidekiq-unique-jobs 8.0.3 → 8.0.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +148 -1
  3. data/README.md +2 -4
  4. data/lib/sidekiq_unique_jobs/batch_delete.rb +1 -1
  5. data/lib/sidekiq_unique_jobs/changelog.rb +1 -1
  6. data/lib/sidekiq_unique_jobs/config.rb +4 -4
  7. data/lib/sidekiq_unique_jobs/constants.rb +1 -0
  8. data/lib/sidekiq_unique_jobs/digests.rb +46 -13
  9. data/lib/sidekiq_unique_jobs/job.rb +4 -4
  10. data/lib/sidekiq_unique_jobs/lock/base_lock.rb +1 -1
  11. data/lib/sidekiq_unique_jobs/lock/while_executing.rb +3 -0
  12. data/lib/sidekiq_unique_jobs/lock.rb +14 -11
  13. data/lib/sidekiq_unique_jobs/lock_config.rb +10 -4
  14. data/lib/sidekiq_unique_jobs/locksmith.rb +3 -3
  15. data/lib/sidekiq_unique_jobs/lua/unlock.lua +16 -9
  16. data/lib/sidekiq_unique_jobs/middleware/client.rb +1 -1
  17. data/lib/sidekiq_unique_jobs/middleware/server.rb +1 -1
  18. data/lib/sidekiq_unique_jobs/middleware.rb +5 -5
  19. data/lib/sidekiq_unique_jobs/on_conflict/replace.rb +1 -1
  20. data/lib/sidekiq_unique_jobs/on_conflict/reschedule.rb +5 -1
  21. data/lib/sidekiq_unique_jobs/orphans/manager.rb +8 -7
  22. data/lib/sidekiq_unique_jobs/orphans/reaper.rb +2 -1
  23. data/lib/sidekiq_unique_jobs/orphans/ruby_reaper.rb +26 -7
  24. data/lib/sidekiq_unique_jobs/redis/sorted_set.rb +12 -3
  25. data/lib/sidekiq_unique_jobs/script/caller.rb +1 -1
  26. data/lib/sidekiq_unique_jobs/script/client.rb +94 -0
  27. data/lib/sidekiq_unique_jobs/script/config.rb +68 -0
  28. data/lib/sidekiq_unique_jobs/script/dsl.rb +60 -0
  29. data/lib/sidekiq_unique_jobs/script/logging.rb +95 -0
  30. data/lib/sidekiq_unique_jobs/script/lua_error.rb +96 -0
  31. data/lib/sidekiq_unique_jobs/script/script.rb +75 -0
  32. data/lib/sidekiq_unique_jobs/script/scripts.rb +123 -0
  33. data/lib/sidekiq_unique_jobs/script/template.rb +41 -0
  34. data/lib/sidekiq_unique_jobs/script/timing.rb +35 -0
  35. data/lib/sidekiq_unique_jobs/script.rb +32 -1
  36. data/lib/sidekiq_unique_jobs/server.rb +2 -0
  37. data/lib/sidekiq_unique_jobs/sidekiq_unique_ext.rb +13 -35
  38. data/lib/sidekiq_unique_jobs/sidekiq_unique_jobs.rb +4 -4
  39. data/lib/sidekiq_unique_jobs/sidekiq_worker_methods.rb +3 -3
  40. data/lib/sidekiq_unique_jobs/testing.rb +4 -4
  41. data/lib/sidekiq_unique_jobs/version.rb +1 -1
  42. data/lib/sidekiq_unique_jobs/web/helpers.rb +3 -3
  43. data/lib/sidekiq_unique_jobs/web/views/changelogs.erb +1 -1
  44. data/lib/sidekiq_unique_jobs/web/views/lock.erb +2 -2
  45. data/lib/sidekiq_unique_jobs/web/views/locks.erb +1 -1
  46. data/lib/sidekiq_unique_jobs/web.rb +18 -17
  47. data/lib/sidekiq_unique_jobs.rb +5 -4
  48. metadata +12 -23
@@ -0,0 +1,123 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SidekiqUniqueJobs
4
+ module Script
5
+ # Interface to dealing with .lua files
6
+ #
7
+ # @author Mikael Henriksson <mikael@mhenrixon.com>
8
+ class Scripts
9
+ #
10
+ # @return [Concurrent::Map] a map with configured script paths
11
+ SCRIPT_PATHS = Concurrent::Map.new
12
+
13
+ #
14
+ # Fetch a scripts configuration for path
15
+ #
16
+ # @param [Pathname] root_path the path to scripts
17
+ #
18
+ # @return [Scripts] a collection of scripts
19
+ #
20
+ def self.fetch(root_path)
21
+ if (scripts = SCRIPT_PATHS.get(root_path))
22
+ return scripts
23
+ end
24
+
25
+ create(root_path)
26
+ end
27
+
28
+ #
29
+ # Create a new scripts collection based on path
30
+ #
31
+ # @param [Pathname] root_path the path to scripts
32
+ #
33
+ # @return [Scripts] a collection of scripts
34
+ #
35
+ def self.create(root_path)
36
+ scripts = new(root_path)
37
+ store(scripts)
38
+ end
39
+
40
+ #
41
+ # Store the scripts collection in memory
42
+ #
43
+ # @param [Scripts] scripts the path to scripts
44
+ #
45
+ # @return [Scripts] the scripts instance that was stored
46
+ #
47
+ def self.store(scripts)
48
+ SCRIPT_PATHS.put(scripts.root_path, scripts)
49
+ scripts
50
+ end
51
+
52
+ #
53
+ # @!attribute [r] scripts
54
+ # @return [Concurrent::Map] a collection of loaded scripts
55
+ attr_reader :scripts
56
+
57
+ #
58
+ # @!attribute [r] root_path
59
+ # @return [Pathname] the path to the directory with lua scripts
60
+ attr_reader :root_path
61
+
62
+ def initialize(path)
63
+ raise ArgumentError, "path needs to be a Pathname" unless path.is_a?(Pathname)
64
+
65
+ @scripts = Concurrent::Map.new
66
+ @root_path = path
67
+ end
68
+
69
+ def fetch(name, conn)
70
+ if (script = scripts.get(name.to_sym))
71
+ return script
72
+ end
73
+
74
+ load(name, conn)
75
+ end
76
+
77
+ def load(name, conn)
78
+ script = Script.load(name, root_path, conn)
79
+ scripts.put(name.to_sym, script)
80
+
81
+ script
82
+ end
83
+
84
+ def delete(script)
85
+ if script.is_a?(Script)
86
+ scripts.delete(script.name)
87
+ else
88
+ scripts.delete(script.to_sym)
89
+ end
90
+ end
91
+
92
+ def kill(conn)
93
+ if conn.respond_to?(:namespace)
94
+ conn.redis.script(:kill)
95
+ else
96
+ conn.script(:kill)
97
+ end
98
+ end
99
+
100
+ #
101
+ # Execute a lua script with given name
102
+ #
103
+ # @note this method is recursive if we need to load a lua script
104
+ # that wasn't previously loaded.
105
+ #
106
+ # @param [Symbol] name the name of the script to execute
107
+ # @param [Redis] conn the redis connection to use for execution
108
+ # @param [Array<String>] keys script keys
109
+ # @param [Array<Object>] argv script arguments
110
+ #
111
+ # @return value from script
112
+ #
113
+ def execute(name, conn, keys: [], argv: [])
114
+ script = fetch(name, conn)
115
+ conn.evalsha(script.sha, keys, argv)
116
+ end
117
+
118
+ def count
119
+ scripts.keys.size
120
+ end
121
+ end
122
+ end
123
+ end
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SidekiqUniqueJobs
4
+ # Interface to dealing with .lua files
5
+ #
6
+ # @author Mikael Henriksson <mikael@mhenrixon.com>
7
+ module Script
8
+ #
9
+ # Class Template provides LUA script partial template rendering
10
+ #
11
+ # @author Mikael Henriksson <mikael@mhenrixon.com>
12
+ #
13
+ class Template
14
+ def initialize(script_path)
15
+ @script_path = script_path
16
+ end
17
+
18
+ #
19
+ # Renders a Lua script and includes any partials in that file
20
+ # all `<%= include_partial '' %>` replaced with the actual contents of the partial
21
+ #
22
+ # @param [Pathname] pathname the path to the
23
+ #
24
+ # @return [String] the rendered Luascript
25
+ #
26
+ def render(pathname)
27
+ @partial_templates ||= {}
28
+ ::ERB.new(File.read(pathname)).result(binding)
29
+ end
30
+
31
+ # helper method to include a lua partial within another lua script
32
+ #
33
+ def include_partial(relative_path)
34
+ return if @partial_templates.key?(relative_path)
35
+
36
+ @partial_templates[relative_path] = nil
37
+ render(Pathname.new("#{@script_path}/#{relative_path}"))
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SidekiqUniqueJobs
4
+ module Script
5
+ # Handles timing> of things
6
+ #
7
+ # @author Mikael Henriksson <mikael@mhenrixon.com>
8
+ module Timing
9
+ module_function
10
+
11
+ #
12
+ # Used for timing method calls
13
+ #
14
+ #
15
+ # @return [yield return, Float]
16
+ #
17
+ def timed
18
+ start_time = now
19
+
20
+ [yield, now - start_time]
21
+ end
22
+
23
+ #
24
+ # Returns a float representation of the current time.
25
+ # Either from Process or Time
26
+ #
27
+ #
28
+ # @return [Float]
29
+ #
30
+ def now
31
+ (Process.clock_gettime(Process::CLOCK_MONOTONIC) * 1000).to_i
32
+ end
33
+ end
34
+ end
35
+ end
@@ -1,15 +1,46 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "sidekiq_unique_jobs/script/template"
4
+ require "sidekiq_unique_jobs/script/lua_error"
5
+ require "sidekiq_unique_jobs/script/script"
6
+ require "sidekiq_unique_jobs/script/scripts"
7
+ require "sidekiq_unique_jobs/script/config"
8
+ require "sidekiq_unique_jobs/script/timing"
9
+ require "sidekiq_unique_jobs/script/logging"
10
+ require "sidekiq_unique_jobs/script/dsl"
11
+ require "sidekiq_unique_jobs/script/client"
12
+
3
13
  module SidekiqUniqueJobs
4
14
  # Interface to dealing with .lua files
5
15
  #
6
16
  # @author Mikael Henriksson <mikael@mhenrixon.com>
7
17
  module Script
8
- include Brpoplpush::RedisScript::DSL
18
+ include SidekiqUniqueJobs::Script::DSL
9
19
 
10
20
  configure do |config|
11
21
  config.scripts_path = Pathname.new(__FILE__).dirname.join("lua")
12
22
  config.logger = Sidekiq.logger # TODO: This becomes a little weird
13
23
  end
24
+
25
+ #
26
+ # The current logger
27
+ #
28
+ #
29
+ # @return [Logger] the configured logger
30
+ #
31
+ def self.logger
32
+ config.logger
33
+ end
34
+
35
+ #
36
+ # Set a new logger
37
+ #
38
+ # @param [Logger] other another logger
39
+ #
40
+ # @return [Logger] the new logger
41
+ #
42
+ def self.logger=(other)
43
+ config.logger = other
44
+ end
14
45
  end
15
46
  end
@@ -5,6 +5,8 @@ module SidekiqUniqueJobs
5
5
  #
6
6
  # @author Mikael Henriksson <mikael@mhenrixon.com>
7
7
  class Server
8
+ #
9
+ # @return [Proc] returns a default death handler for the gem to cleanup dead locks
8
10
  DEATH_HANDLER = (lambda do |job, _ex|
9
11
  return unless (digest = job["lock_digest"])
10
12
 
@@ -68,46 +68,24 @@ module Sidekiq
68
68
  prepend UniqueExtension
69
69
  end
70
70
 
71
- if Sidekiq.const_defined?(:JobRecord)
72
- # See Sidekiq::Api
73
- class JobRecord
74
- #
75
- # Provides extensions for unlocking jobs that are removed and deleted
71
+ # See Sidekiq::Api
72
+ class JobRecord
73
+ #
74
+ # Provides extensions for unlocking jobs that are removed and deleted
75
+ #
76
+ # @author Mikael Henriksson <mikael@mhenrixon.com>
77
+ #
78
+ module UniqueExtension
76
79
  #
77
- # @author Mikael Henriksson <mikael@mhenrixon.com>
80
+ # Wraps the original method to ensure locks for the job are deleted
78
81
  #
79
- module UniqueExtension
80
- #
81
- # Wraps the original method to ensure locks for the job are deleted
82
- #
83
- def delete
84
- SidekiqUniqueJobs::Unlockable.delete!(item)
85
- super
86
- end
82
+ def delete
83
+ SidekiqUniqueJobs::Unlockable.delete!(item)
84
+ super
87
85
  end
88
-
89
- prepend UniqueExtension
90
86
  end
91
- else
92
- # See Sidekiq::Api
93
- class Job
94
- #
95
- # Provides extensions for unlocking jobs that are removed and deleted
96
- #
97
- # @author Mikael Henriksson <mikael@mhenrixon.com>
98
- #
99
- module UniqueExtension
100
- #
101
- # Wraps the original method to ensure locks for the job are deleted
102
- #
103
- def delete
104
- SidekiqUniqueJobs::Unlockable.delete!(item)
105
- super
106
- end
107
- end
108
87
 
109
- prepend UniqueExtension
110
- end
88
+ prepend UniqueExtension
111
89
  end
112
90
 
113
91
  # See Sidekiq::Api
@@ -186,7 +186,7 @@ module SidekiqUniqueJobs # rubocop:disable Metrics/ModuleLength
186
186
  yield config
187
187
  else
188
188
  options.each do |key, val|
189
- config.send("#{key}=", val)
189
+ config.send(:"#{key}=", val)
190
190
  end
191
191
  end
192
192
  end
@@ -250,9 +250,9 @@ module SidekiqUniqueJobs # rubocop:disable Metrics/ModuleLength
250
250
  # Attempt to constantize a string worker_class argument, always
251
251
  # failing back to the original argument when the constant can't be found
252
252
  #
253
- # @return [Sidekiq::Worker]
253
+ # @return [Sidekiq::Job]
254
254
  def constantize(str)
255
- return str.class if str.is_a?(Sidekiq::Worker) # sidekiq v6.x
255
+ return str.class if str.is_a?(Sidekiq::Job) # sidekiq v6.x
256
256
  return str unless str.is_a?(String)
257
257
  return Object.const_get(str) unless str.include?("::")
258
258
 
@@ -269,7 +269,7 @@ module SidekiqUniqueJobs # rubocop:disable Metrics/ModuleLength
269
269
  # Attempt to constantize a string worker_class argument, always
270
270
  # failing back to the original argument when the constant can't be found
271
271
  #
272
- # @return [Sidekiq::Worker, String]
272
+ # @return [Sidekiq::Job, String]
273
273
  def safe_constantize(str)
274
274
  constantize(str)
275
275
  rescue NameError => ex
@@ -1,13 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SidekiqUniqueJobs
4
- # Module with convenience methods for the Sidekiq::Worker class
4
+ # Module with convenience methods for the Sidekiq::Job class
5
5
  #
6
6
  # @author Mikael Henriksson <mikael@mhenrixon.com>
7
7
  module SidekiqWorkerMethods
8
8
  #
9
9
  # @!attribute [r] job_class
10
- # @return [Sidekiq::Worker] The Sidekiq::Worker implementation
10
+ # @return [Sidekiq::Job] The Sidekiq::Job implementation
11
11
  attr_reader :job_class
12
12
 
13
13
  # Avoids duplicating worker_class.respond_to? in multiple places
@@ -62,7 +62,7 @@ module SidekiqUniqueJobs
62
62
  # Attempt to constantize a string worker_class argument, always
63
63
  # failing back to the original argument when the constant can't be found
64
64
  #
65
- # @return [Sidekiq::Worker]
65
+ # @return [Sidekiq::Job]
66
66
  def job_class_constantize(klazz = @job_class)
67
67
  SidekiqUniqueJobs.safe_constantize(klazz)
68
68
  end
@@ -42,11 +42,11 @@ module Sidekiq
42
42
  end
43
43
 
44
44
  #
45
- # See Sidekiq::Worker in Sidekiq gem for more details
45
+ # See Sidekiq::Job in Sidekiq gem for more details
46
46
  #
47
47
  module Worker
48
48
  #
49
- # Adds class methods to Sidekiq::Worker
49
+ # Adds class methods to Sidekiq::Job
50
50
  #
51
51
  module ClassMethods
52
52
  #
@@ -110,14 +110,14 @@ module Sidekiq
110
110
  prepend Overrides
111
111
 
112
112
  #
113
- # Prepends methods to Sidekiq::Worker
113
+ # Prepends methods to Sidekiq::Job
114
114
  #
115
115
  module ClassMethods
116
116
  prepend Overrides::ClassMethods
117
117
  end
118
118
 
119
119
  #
120
- # Prepends singleton methods to Sidekiq::Worker
120
+ # Prepends singleton methods to Sidekiq::Job
121
121
  #
122
122
  module SignletonOverrides
123
123
  #
@@ -3,5 +3,5 @@
3
3
  module SidekiqUniqueJobs
4
4
  #
5
5
  # @return [String] the current SidekiqUniqueJobs version
6
- VERSION = "8.0.3"
6
+ VERSION = "8.0.9"
7
7
  end
@@ -133,7 +133,7 @@ module SidekiqUniqueJobs
133
133
  #
134
134
  # @return [String] a html safe string with relative time information
135
135
  #
136
- def relative_time(time)
136
+ def _relative_time(time)
137
137
  stamp = time.getutc.iso8601
138
138
  %(<time class="ltr" dir="ltr" title="#{stamp}" datetime="#{stamp}">#{time}</time>)
139
139
  end
@@ -145,12 +145,12 @@ module SidekiqUniqueJobs
145
145
  #
146
146
  # @return [String] a html safe string with relative time information
147
147
  #
148
- def safe_relative_time(time)
148
+ def _safe_relative_time(time)
149
149
  return unless time
150
150
 
151
151
  time = parse_time(time)
152
152
 
153
- relative_time(time)
153
+ _relative_time(time)
154
154
  end
155
155
 
156
156
  #
@@ -42,7 +42,7 @@
42
42
  <tbody>
43
43
  <% @changelogs.each do |changelog| %>
44
44
  <tr class="changelog-row">
45
- <td><%= safe_relative_time(changelog['time']) || "bogus" %></td>
45
+ <td><%= _safe_relative_time(changelog['time']) || "bogus" %></td>
46
46
  <td><%= changelog["digest"] %></td>
47
47
  <td><%= changelog["script"] %></td>
48
48
  <td><%= changelog["job_id"] %></td>
@@ -65,7 +65,7 @@
65
65
  <% @lock.locked_jids(with_values: true).each do |job_id, time| %>
66
66
  <tr>
67
67
  <td><%= job_id %></td>
68
- <td><%= safe_relative_time(time.to_f) %></td>
68
+ <td><%= _safe_relative_time(time.to_f) %></td>
69
69
  <td>
70
70
  <form action="<%= root_path %>locks/<%= @lock.key %>/jobs/<%= job_id %>/delete" method="get">
71
71
  <%= csrf_tag %>
@@ -92,7 +92,7 @@
92
92
  <tbody>
93
93
  <% @lock.changelogs.each do |entry| %>
94
94
  <tr>
95
- <td scope="row"><%= safe_relative_time(entry["time"].to_f) %></td>
95
+ <td scope="row"><%= _safe_relative_time(entry["time"].to_f) %></td>
96
96
  <td><%= entry["job_id"] %></td>
97
97
  <td><%= entry["message"] %></td>
98
98
  <td><%= entry["script"] %></td>
@@ -46,7 +46,7 @@
46
46
  <td><a href="<%= root_path %>locks/<%= lock.key %>"><%= lock.key %></a></td>
47
47
  <td><%= lock.info["lock"] %></td>
48
48
  <td><%= lock.locked.count %></td>
49
- <td><%= safe_relative_time(lock.created_at) %></td>
49
+ <td><%= _safe_relative_time(lock.created_at) %></td>
50
50
  </tr>
51
51
  </tbody>
52
52
  <% end %>
@@ -13,11 +13,11 @@ module SidekiqUniqueJobs
13
13
  end
14
14
 
15
15
  app.get "/changelogs" do
16
- @filter = params[:filter] || "*"
16
+ @filter = h(params[:filter] || "*")
17
17
  @filter = "*" if @filter == ""
18
- @count = (params[:count] || 100).to_i
19
- @current_cursor = params[:cursor].to_i
20
- @prev_cursor = params[:prev_cursor].to_i
18
+ @count = h(params[:count] || 100).to_i
19
+ @current_cursor = h(params[:cursor]).to_i
20
+ @prev_cursor = h(params[:prev_cursor]).to_i
21
21
  @total_size, @next_cursor, @changelogs = changelog.page(
22
22
  cursor: @current_cursor,
23
23
  pattern: @filter,
@@ -33,11 +33,11 @@ module SidekiqUniqueJobs
33
33
  end
34
34
 
35
35
  app.get "/locks" do
36
- @filter = params[:filter] || "*"
36
+ @filter = h(params[:filter]) || "*"
37
37
  @filter = "*" if @filter == ""
38
- @count = (params[:count] || 100).to_i
39
- @current_cursor = params[:cursor].to_i
40
- @prev_cursor = params[:prev_cursor].to_i
38
+ @count = h(params[:count] || 100).to_i
39
+ @current_cursor = h(params[:cursor]).to_i
40
+ @prev_cursor = h(params[:prev_cursor]).to_i
41
41
 
42
42
  @total_size, @next_cursor, @locks = digests.page(
43
43
  cursor: @current_cursor,
@@ -49,11 +49,11 @@ module SidekiqUniqueJobs
49
49
  end
50
50
 
51
51
  app.get "/expiring_locks" do
52
- @filter = params[:filter] || "*"
52
+ @filter = h(params[:filter]) || "*"
53
53
  @filter = "*" if @filter == ""
54
- @count = (params[:count] || 100).to_i
55
- @current_cursor = params[:cursor].to_i
56
- @prev_cursor = params[:prev_cursor].to_i
54
+ @count = h(params[:count] || 100).to_i
55
+ @current_cursor = h(params[:cursor]).to_i
56
+ @prev_cursor = h(params[:prev_cursor]).to_i
57
57
 
58
58
  @total_size, @next_cursor, @locks = expiring_digests.page(
59
59
  cursor: @current_cursor,
@@ -71,22 +71,23 @@ module SidekiqUniqueJobs
71
71
  end
72
72
 
73
73
  app.get "/locks/:digest" do
74
- @digest = params[:digest]
74
+ @digest = h(params[:digest])
75
75
  @lock = SidekiqUniqueJobs::Lock.new(@digest)
76
76
 
77
77
  erb(unique_template(:lock))
78
78
  end
79
79
 
80
80
  app.get "/locks/:digest/delete" do
81
- digests.delete_by_digest(params[:digest])
82
- expiring_digests.delete_by_digest(params[:digest])
81
+ digests.delete_by_digest(h(params[:digest]))
82
+ expiring_digests.delete_by_digest(h(params[:digest]))
83
83
  redirect_to :locks
84
84
  end
85
85
 
86
86
  app.get "/locks/:digest/jobs/:job_id/delete" do
87
- @digest = params[:digest]
87
+ @digest = h(params[:digest])
88
+ @job_id = h(params[:job_id])
88
89
  @lock = SidekiqUniqueJobs::Lock.new(@digest)
89
- @lock.unlock(params[:job_id])
90
+ @lock.unlock(@job_id)
90
91
 
91
92
  redirect_to "locks/#{@lock.key}"
92
93
  end
@@ -1,20 +1,22 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "brpoplpush/redis_script"
3
+ require "concurrent/executor/ruby_single_thread_executor"
4
4
  require "concurrent/future"
5
- require "concurrent/promises"
6
5
  require "concurrent/map"
7
6
  require "concurrent/mutable_struct"
7
+ require "concurrent/promises"
8
8
  require "concurrent/timer_task"
9
- require "concurrent/executor/ruby_single_thread_executor"
10
9
  require "digest"
11
10
  require "digest/sha1"
12
11
  require "erb"
13
12
  require "forwardable"
14
13
  require "json"
15
14
  require "pathname"
15
+ require "redis_client"
16
16
  require "sidekiq"
17
17
 
18
+ require "sidekiq_unique_jobs/script"
19
+
18
20
  require "sidekiq_unique_jobs/deprecation"
19
21
  require "sidekiq_unique_jobs/reflections"
20
22
  require "sidekiq_unique_jobs/reflectable"
@@ -29,7 +31,6 @@ require "sidekiq_unique_jobs/timing"
29
31
  require "sidekiq_unique_jobs/sidekiq_worker_methods"
30
32
  require "sidekiq_unique_jobs/connection"
31
33
  require "sidekiq_unique_jobs/exceptions"
32
- require "sidekiq_unique_jobs/script"
33
34
  require "sidekiq_unique_jobs/script/caller"
34
35
  require "sidekiq_unique_jobs/normalizer"
35
36
  require "sidekiq_unique_jobs/job"
metadata CHANGED
@@ -1,35 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sidekiq-unique-jobs
3
3
  version: !ruby/object:Gem::Version
4
- version: 8.0.3
4
+ version: 8.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mikael Henriksson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-07-10 00:00:00.000000000 Z
11
+ date: 2024-02-12 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: brpoplpush-redis_script
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ">"
18
- - !ruby/object:Gem::Version
19
- version: 0.1.1
20
- - - "<="
21
- - !ruby/object:Gem::Version
22
- version: 2.0.0
23
- type: :runtime
24
- prerelease: false
25
- version_requirements: !ruby/object:Gem::Requirement
26
- requirements:
27
- - - ">"
28
- - !ruby/object:Gem::Version
29
- version: 0.1.1
30
- - - "<="
31
- - !ruby/object:Gem::Version
32
- version: 2.0.0
33
13
  - !ruby/object:Gem::Dependency
34
14
  name: concurrent-ruby
35
15
  requirement: !ruby/object:Gem::Requirement
@@ -195,6 +175,15 @@ files:
195
175
  - lib/sidekiq_unique_jobs/rspec/matchers/have_valid_sidekiq_options.rb
196
176
  - lib/sidekiq_unique_jobs/script.rb
197
177
  - lib/sidekiq_unique_jobs/script/caller.rb
178
+ - lib/sidekiq_unique_jobs/script/client.rb
179
+ - lib/sidekiq_unique_jobs/script/config.rb
180
+ - lib/sidekiq_unique_jobs/script/dsl.rb
181
+ - lib/sidekiq_unique_jobs/script/logging.rb
182
+ - lib/sidekiq_unique_jobs/script/lua_error.rb
183
+ - lib/sidekiq_unique_jobs/script/script.rb
184
+ - lib/sidekiq_unique_jobs/script/scripts.rb
185
+ - lib/sidekiq_unique_jobs/script/template.rb
186
+ - lib/sidekiq_unique_jobs/script/timing.rb
198
187
  - lib/sidekiq_unique_jobs/server.rb
199
188
  - lib/sidekiq_unique_jobs/sidekiq_unique_ext.rb
200
189
  - lib/sidekiq_unique_jobs/sidekiq_unique_jobs.rb
@@ -234,7 +223,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
234
223
  - !ruby/object:Gem::Version
235
224
  version: '0'
236
225
  requirements: []
237
- rubygems_version: 3.4.15
226
+ rubygems_version: 3.5.6
238
227
  signing_key:
239
228
  specification_version: 4
240
229
  summary: Sidekiq middleware that prevents duplicates jobs