chained_job 0.2.1 → 0.5.1

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: e59d24afbe0706189e4aa949ddfd933362169d2a8e46373215d90819d45b682e
4
- data.tar.gz: 9c8e01d6e4cb6dc4bf1b16caaa9ee05c41f918dba948869f81e4baa710da67ef
3
+ metadata.gz: a8dd16e4b32b2941483694d35cd08b943be16d52f6277d8037276533f5d63825
4
+ data.tar.gz: c082fbc66b7272971fac822d28a7eb45b68fed500094d085e5c7e1c877c375a2
5
5
  SHA512:
6
- metadata.gz: fb8630ff6f668a721122208a3598ea62afb2d1693927997565ca35fef8dcc46a239c973cc9cfa5e164c372628486330d815b7c6dc0cacfbfd40cc15892af08c2
7
- data.tar.gz: cf03d517b71d0896772062a7f1319b0ad66cd3b125eea56fd1a89da6f2346eb7f78798924d40eedca723f8e512cf84b94f00f38c1d64c89a2949a03e2c71ba35
6
+ metadata.gz: 8dc323a9997040b42a8dd15f787bbc0785a7410c52e3061e13b9c1013e4526d08d597563a6b41e5663f7cb0b8941eb653116856a569b4c80f36e03a5340db624
7
+ data.tar.gz: 7f3751cd2dbb44aa22646ed90434fb21e5a06e348cd575e0cbacc3525d705cab3ec7d6ebdfedd0694b21450f477813019eb590217ab7ebd4f1fc4cc59214cd2f
@@ -12,6 +12,8 @@ module ChainedJob
12
12
  :arguments_queue_expiration,
13
13
  :around_start_chains,
14
14
  :around_chain_process,
15
+ :around_array_of_job_arguments,
16
+ :after_worker_finished,
15
17
  :debug,
16
18
  :logger,
17
19
  :redis,
@@ -26,6 +28,8 @@ module ChainedJob
26
28
 
27
29
  self.around_start_chains = ->(_options, &block) { block.call }
28
30
  self.around_chain_process = ->(_options, &block) { block.call }
31
+ self.around_array_of_job_arguments = ->(_options, &block) { block.call }
32
+ self.after_worker_finished = ->(_options) {}
29
33
 
30
34
  self.debug = true
31
35
  end
@@ -13,10 +13,15 @@ module ChainedJob
13
13
  if worker_id
14
14
  ChainedJob::Process.run(self, worker_id, tag)
15
15
  else
16
- ChainedJob::StartChains.run(self.class, array_of_job_arguments, parallelism)
16
+ ChainedJob::StartChains.run(self.class, arguments_array, parallelism)
17
17
  end
18
18
  end
19
19
 
20
+ def arguments_array
21
+ options = { job_class: self.class }
22
+ ChainedJob.config.around_array_of_job_arguments.call(options) { array_of_job_arguments }
23
+ end
24
+
20
25
  def array_of_job_arguments
21
26
  raise NoMethodError, 'undefined method array_of_job_arguments'
22
27
  end
@@ -18,7 +18,7 @@ module ChainedJob
18
18
 
19
19
  def run
20
20
  with_hooks do
21
- return log_finished_worker unless argument
21
+ return finished_worker unless argument
22
22
 
23
23
  job_instance.process(argument)
24
24
  job_instance.class.perform_later(worker_id, job_tag)
@@ -32,7 +32,13 @@ module ChainedJob
32
32
  end
33
33
 
34
34
  def options
35
- { job_class: job_instance.class, worker_id: worker_id }
35
+ @options ||= { job_class: job_instance.class, worker_id: worker_id }
36
+ end
37
+
38
+ def finished_worker
39
+ log_finished_worker
40
+
41
+ ChainedJob.config.after_worker_finished&.call(options)
36
42
  end
37
43
 
38
44
  def log_finished_worker
@@ -42,7 +48,19 @@ module ChainedJob
42
48
  end
43
49
 
44
50
  def argument
45
- @argument ||= ChainedJob.redis.lpop(redis_key)
51
+ @argument ||= deserialized_argument
52
+ end
53
+
54
+ def deserialized_argument
55
+ return unless serialized_argument
56
+
57
+ Marshal.load(serialized_argument)
58
+ end
59
+
60
+ def serialized_argument
61
+ return @serialized_argument if defined?(@serialized_argument)
62
+
63
+ @serialized_argument = ChainedJob.redis.lpop(redis_key)
46
64
  end
47
65
 
48
66
  def redis_key
@@ -20,7 +20,7 @@ module ChainedJob
20
20
  set_tag_list
21
21
 
22
22
  array_of_job_arguments.each_slice(config.arguments_batch_size) do |sublist|
23
- ChainedJob.redis.rpush(redis_key, sublist)
23
+ ChainedJob.redis.rpush(redis_key, serialize(sublist))
24
24
  end
25
25
 
26
26
  ChainedJob.redis.expire(redis_key, config.arguments_queue_expiration)
@@ -44,6 +44,10 @@ module ChainedJob
44
44
  @job_key ||= Helpers.job_key(job_class)
45
45
  end
46
46
 
47
+ def serialize(arguments)
48
+ arguments.map { |argument| Marshal.dump(argument) }
49
+ end
50
+
47
51
  def config
48
52
  ChainedJob.config
49
53
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ChainedJob
4
- VERSION = '0.2.1'
4
+ VERSION = '0.5.1'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chained_job
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mantas Kūjalis
@@ -9,22 +9,22 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2020-09-17 00:00:00.000000000 Z
12
+ date: 2021-05-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
- - - "~>"
18
+ - - ">="
19
19
  - !ruby/object:Gem::Version
20
- version: '1.17'
20
+ version: '0'
21
21
  type: :development
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
- - - "~>"
25
+ - - ">="
26
26
  - !ruby/object:Gem::Version
27
- version: '1.17'
27
+ version: '0'
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: minitest
30
30
  requirement: !ruby/object:Gem::Requirement
@@ -53,25 +53,10 @@ dependencies:
53
53
  - - "~>"
54
54
  - !ruby/object:Gem::Version
55
55
  version: '12.0'
56
- - !ruby/object:Gem::Dependency
57
- name: rubocop-vinted
58
- requirement: !ruby/object:Gem::Requirement
59
- requirements:
60
- - - "~>"
61
- - !ruby/object:Gem::Version
62
- version: '0.3'
63
- type: :development
64
- prerelease: false
65
- version_requirements: !ruby/object:Gem::Requirement
66
- requirements:
67
- - - "~>"
68
- - !ruby/object:Gem::Version
69
- version: '0.3'
70
56
  description: Chained job allows you to define an array of queued jobs that should
71
57
  be run in sequence after the main job has been executed successfully.
72
58
  email:
73
- - mantas.kujalis@vinted.com
74
- - titas@vinted.com
59
+ - backend@vinted.com
75
60
  executables: []
76
61
  extensions: []
77
62
  extra_rdoc_files: []
@@ -104,7 +89,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
104
89
  - !ruby/object:Gem::Version
105
90
  version: '0'
106
91
  requirements: []
107
- rubygems_version: 3.0.3
92
+ rubygems_version: 3.1.4
108
93
  signing_key:
109
94
  specification_version: 4
110
95
  summary: Chained job helper