activejob 5.2.1.1 → 5.2.2.rc1

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: 3dc514bd9f97da2bbe477eee38eb5bb3b21df663baba450c0a08df2e6ced0a2b
4
- data.tar.gz: d1ec4911647ab5d83071cad3af50bb4b70d2427498eba2944ad3b0598118006c
3
+ metadata.gz: 67232e1851713cf072bc96e4451b10930205933fcce173ac4101f056df36ccce
4
+ data.tar.gz: 9a3a46381e090c488ab44073e3413e6c2da119179d1bf4a3962c3dac50bb440b
5
5
  SHA512:
6
- metadata.gz: e376b5e32ccbd0b183b7f43c7103326bdb0ebdf32e83ea9e4b170df9b6f6fd0c6b51a98a56fb3a02c45df0a0e84f5e43da3d4b8b158d13c1d35a66cfa92b147a
7
- data.tar.gz: 027a340eca2bed0400ac5c785d0bc89b7b07cd91fdb564032a34037f617c845548fc1671ab6388adbaf9aa061e0642ad7814cfbb3f01f5f295c7fb3dcc248cc8
6
+ metadata.gz: 06b88781fd187207d998377c715f971fe7f42fee7a44995fec6ba34b3aa64642b4f7e9e747b3d237ce2749bab6183bf3d427a6313bf7bf55cfd54392c29f8428
7
+ data.tar.gz: 6b1827f4f4583812e1d997d1a0d938c844359c09844c42373480851ba0253f7f1eb557c4e7ccdf49a5a94ceab09a55911d98b7411eab4dae56b36b3f0cde4f9c
@@ -1,3 +1,30 @@
1
+ ## Rails 5.2.2.rc1 (November 28, 2018) ##
2
+
3
+ * Make sure `assert_enqueued_with()` & `assert_performed_with()` work reliably with hash arguments.
4
+
5
+ *Sharang Dashputre*
6
+
7
+ * Restore `ActionController::Parameters` support to `ActiveJob::Arguments.serialize`.
8
+
9
+ *Bernie Chiu*
10
+
11
+ * Restore `HashWithIndifferentAccess` support to `ActiveJob::Arguments.deserialize`.
12
+
13
+ *Gannon McGibbon*
14
+
15
+ * Include deserialized arguments in job instances returned from
16
+ `assert_enqueued_with` and `assert_performed_with`
17
+
18
+ *Alan Wu*
19
+
20
+ * Increment execution count before deserialize arguments.
21
+
22
+ Currently, the execution count increments after deserializes arguments.
23
+ Therefore, if an error occurs with deserialize, it retries indefinitely.
24
+
25
+ *Yuji Yaginuma*
26
+
27
+
1
28
  ## Rails 5.2.1.1 (November 27, 2018) ##
2
29
 
3
30
  * Do not deserialize GlobalID objects that were not generated by Active Job.
@@ -61,14 +61,14 @@ module ActiveJob
61
61
  when Array
62
62
  argument.map { |arg| serialize_argument(arg) }
63
63
  when ActiveSupport::HashWithIndifferentAccess
64
- result = serialize_hash(argument)
65
- result[WITH_INDIFFERENT_ACCESS_KEY] = serialize_argument(true)
66
- result
64
+ serialize_indifferent_hash(argument)
67
65
  when Hash
68
66
  symbol_keys = argument.each_key.grep(Symbol).map(&:to_s)
69
67
  result = serialize_hash(argument)
70
68
  result[SYMBOL_KEYS_KEY] = symbol_keys
71
69
  result
70
+ when -> (arg) { arg.respond_to?(:permitted?) }
71
+ serialize_indifferent_hash(argument.to_h)
72
72
  else
73
73
  raise SerializationError.new("Unsupported argument type: #{argument.class.name}")
74
74
  end
@@ -136,8 +136,17 @@ module ActiveJob
136
136
  end
137
137
  end
138
138
 
139
+ def serialize_indifferent_hash(indifferent_hash)
140
+ result = serialize_hash(indifferent_hash)
141
+ result[WITH_INDIFFERENT_ACCESS_KEY] = serialize_argument(true)
142
+ result
143
+ end
144
+
139
145
  def transform_symbol_keys(hash, symbol_keys)
140
- hash.transform_keys do |key|
146
+ # NOTE: HashWithIndifferentAccess#transform_keys always
147
+ # returns stringified keys with indifferent access
148
+ # so we call #to_h here to ensure keys are symbolized.
149
+ hash.to_h.transform_keys do |key|
141
150
  if symbol_keys.include?(key)
142
151
  key.to_sym
143
152
  else
@@ -31,11 +31,11 @@ module ActiveJob
31
31
  #
32
32
  # MyJob.new(*args).perform_now
33
33
  def perform_now
34
+ # Guard against jobs that were persisted before we started counting executions by zeroing out nil counters
35
+ self.executions = (executions || 0) + 1
36
+
34
37
  deserialize_arguments_if_needed
35
38
  run_callbacks :perform do
36
- # Guard against jobs that were persisted before we started counting executions by zeroing out nil counters
37
- self.executions = (executions || 0) + 1
38
-
39
39
  perform(*arguments)
40
40
  end
41
41
  rescue => exception
@@ -9,8 +9,8 @@ module ActiveJob
9
9
  module VERSION
10
10
  MAJOR = 5
11
11
  MINOR = 2
12
- TINY = 1
13
- PRE = "1"
12
+ TINY = 2
13
+ PRE = "rc1"
14
14
 
15
15
  STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
16
16
  end
@@ -300,11 +300,12 @@ module ActiveJob
300
300
  def assert_enqueued_with(job: nil, args: nil, at: nil, queue: nil)
301
301
  original_enqueued_jobs_count = enqueued_jobs.count
302
302
  expected = { job: job, args: args, at: at, queue: queue }.compact
303
- serialized_args = serialize_args_for_assertion(expected)
303
+ expected_args = prepare_args_for_assertion(expected)
304
304
  yield
305
305
  in_block_jobs = enqueued_jobs.drop(original_enqueued_jobs_count)
306
306
  matching_job = in_block_jobs.find do |in_block_job|
307
- serialized_args.all? { |key, value| value == in_block_job[key] }
307
+ deserialized_job = deserialize_args_for_assertion(in_block_job)
308
+ expected_args.all? { |key, value| value == deserialized_job[key] }
308
309
  end
309
310
  assert matching_job, "No enqueued job found with #{expected}"
310
311
  instantiate_job(matching_job)
@@ -324,11 +325,12 @@ module ActiveJob
324
325
  def assert_performed_with(job: nil, args: nil, at: nil, queue: nil)
325
326
  original_performed_jobs_count = performed_jobs.count
326
327
  expected = { job: job, args: args, at: at, queue: queue }.compact
327
- serialized_args = serialize_args_for_assertion(expected)
328
+ expected_args = prepare_args_for_assertion(expected)
328
329
  perform_enqueued_jobs { yield }
329
330
  in_block_jobs = performed_jobs.drop(original_performed_jobs_count)
330
331
  matching_job = in_block_jobs.find do |in_block_job|
331
- serialized_args.all? { |key, value| value == in_block_job[key] }
332
+ deserialized_job = deserialize_args_for_assertion(in_block_job)
333
+ expected_args.all? { |key, value| value == deserialized_job[key] }
332
334
  end
333
335
  assert matching_job, "No performed job found with #{expected}"
334
336
  instantiate_job(matching_job)
@@ -420,15 +422,21 @@ module ActiveJob
420
422
  end
421
423
  end
422
424
 
423
- def serialize_args_for_assertion(args)
424
- args.dup.tap do |serialized_args|
425
- serialized_args[:args] = ActiveJob::Arguments.serialize(serialized_args[:args]) if serialized_args[:args]
426
- serialized_args[:at] = serialized_args[:at].to_f if serialized_args[:at]
425
+ def prepare_args_for_assertion(args)
426
+ args.dup.tap do |arguments|
427
+ arguments[:at] = arguments[:at].to_f if arguments[:at]
428
+ end
429
+ end
430
+
431
+ def deserialize_args_for_assertion(job)
432
+ job.dup.tap do |new_job|
433
+ new_job[:args] = ActiveJob::Arguments.deserialize(new_job[:args]) if new_job[:args]
427
434
  end
428
435
  end
429
436
 
430
437
  def instantiate_job(payload)
431
- job = payload[:job].new(*payload[:args])
438
+ args = ActiveJob::Arguments.deserialize(payload[:args])
439
+ job = payload[:job].new(*args)
432
440
  job.scheduled_at = Time.at(payload[:at]) if payload.key?(:at)
433
441
  job.queue_name = payload[:queue]
434
442
  job
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activejob
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.2.1.1
4
+ version: 5.2.2.rc1
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Heinemeier Hansson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-11-27 00:00:00.000000000 Z
11
+ date: 2018-11-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 5.2.1.1
19
+ version: 5.2.2.rc1
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
- version: 5.2.1.1
26
+ version: 5.2.2.rc1
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: globalid
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -86,8 +86,8 @@ homepage: http://rubyonrails.org
86
86
  licenses:
87
87
  - MIT
88
88
  metadata:
89
- source_code_uri: https://github.com/rails/rails/tree/v5.2.1.1/activejob
90
- changelog_uri: https://github.com/rails/rails/blob/v5.2.1.1/activejob/CHANGELOG.md
89
+ source_code_uri: https://github.com/rails/rails/tree/v5.2.2.rc1/activejob
90
+ changelog_uri: https://github.com/rails/rails/blob/v5.2.2.rc1/activejob/CHANGELOG.md
91
91
  post_install_message:
92
92
  rdoc_options: []
93
93
  require_paths:
@@ -99,9 +99,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
99
99
  version: 2.2.2
100
100
  required_rubygems_version: !ruby/object:Gem::Requirement
101
101
  requirements:
102
- - - ">="
102
+ - - ">"
103
103
  - !ruby/object:Gem::Version
104
- version: '0'
104
+ version: 1.3.1
105
105
  requirements: []
106
106
  rubyforge_project:
107
107
  rubygems_version: 2.7.6