activejob 5.2.8.1 → 6.1.6.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.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +118 -57
  3. data/MIT-LICENSE +1 -2
  4. data/README.md +18 -13
  5. data/lib/active_job/arguments.rb +80 -30
  6. data/lib/active_job/base.rb +6 -1
  7. data/lib/active_job/callbacks.rb +46 -3
  8. data/lib/active_job/configured_job.rb +2 -0
  9. data/lib/active_job/core.rb +40 -21
  10. data/lib/active_job/enqueuing.rb +20 -7
  11. data/lib/active_job/exceptions.rb +60 -28
  12. data/lib/active_job/execution.rb +11 -2
  13. data/lib/active_job/gem_version.rb +3 -3
  14. data/lib/active_job/instrumentation.rb +40 -0
  15. data/lib/active_job/log_subscriber.rb +140 -0
  16. data/lib/active_job/logging.rb +3 -101
  17. data/lib/active_job/queue_adapter.rb +5 -0
  18. data/lib/active_job/queue_adapters/async_adapter.rb +1 -1
  19. data/lib/active_job/queue_adapters/backburner_adapter.rb +2 -2
  20. data/lib/active_job/queue_adapters/inline_adapter.rb +1 -1
  21. data/lib/active_job/queue_adapters/que_adapter.rb +2 -2
  22. data/lib/active_job/queue_adapters/sidekiq_adapter.rb +2 -2
  23. data/lib/active_job/queue_adapters/sucker_punch_adapter.rb +1 -1
  24. data/lib/active_job/queue_adapters/test_adapter.rb +32 -14
  25. data/lib/active_job/queue_adapters.rb +13 -11
  26. data/lib/active_job/queue_name.rb +23 -3
  27. data/lib/active_job/railtie.rb +20 -1
  28. data/lib/active_job/serializers/date_serializer.rb +20 -0
  29. data/lib/active_job/serializers/date_time_serializer.rb +16 -0
  30. data/lib/active_job/serializers/duration_serializer.rb +23 -0
  31. data/lib/active_job/serializers/module_serializer.rb +20 -0
  32. data/lib/active_job/serializers/object_serializer.rb +53 -0
  33. data/lib/active_job/serializers/symbol_serializer.rb +20 -0
  34. data/lib/active_job/serializers/time_object_serializer.rb +13 -0
  35. data/lib/active_job/serializers/time_serializer.rb +16 -0
  36. data/lib/active_job/serializers/time_with_zone_serializer.rb +16 -0
  37. data/lib/active_job/serializers.rb +66 -0
  38. data/lib/active_job/test_helper.rb +317 -68
  39. data/lib/active_job/timezones.rb +13 -0
  40. data/lib/active_job/translation.rb +1 -1
  41. data/lib/active_job.rb +2 -1
  42. data/lib/rails/generators/job/job_generator.rb +4 -0
  43. metadata +25 -9
  44. data/lib/active_job/queue_adapters/qu_adapter.rb +0 -46
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ActiveJob
4
+ module Serializers
5
+ class TimeWithZoneSerializer < TimeObjectSerializer # :nodoc:
6
+ def deserialize(hash)
7
+ Time.iso8601(hash["value"]).in_time_zone
8
+ end
9
+
10
+ private
11
+ def klass
12
+ ActiveSupport::TimeWithZone
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,66 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "set"
4
+
5
+ module ActiveJob
6
+ # The <tt>ActiveJob::Serializers</tt> module is used to store a list of known serializers
7
+ # and to add new ones. It also has helpers to serialize/deserialize objects.
8
+ module Serializers # :nodoc:
9
+ extend ActiveSupport::Autoload
10
+
11
+ autoload :ObjectSerializer
12
+ autoload :TimeObjectSerializer
13
+ autoload :SymbolSerializer
14
+ autoload :DurationSerializer
15
+ autoload :DateTimeSerializer
16
+ autoload :DateSerializer
17
+ autoload :TimeWithZoneSerializer
18
+ autoload :TimeSerializer
19
+ autoload :ModuleSerializer
20
+
21
+ mattr_accessor :_additional_serializers
22
+ self._additional_serializers = Set.new
23
+
24
+ class << self
25
+ # Returns serialized representative of the passed object.
26
+ # Will look up through all known serializers.
27
+ # Raises <tt>ActiveJob::SerializationError</tt> if it can't find a proper serializer.
28
+ def serialize(argument)
29
+ serializer = serializers.detect { |s| s.serialize?(argument) }
30
+ raise SerializationError.new("Unsupported argument type: #{argument.class.name}") unless serializer
31
+ serializer.serialize(argument)
32
+ end
33
+
34
+ # Returns deserialized object.
35
+ # Will look up through all known serializers.
36
+ # If no serializer found will raise <tt>ArgumentError</tt>.
37
+ def deserialize(argument)
38
+ serializer_name = argument[Arguments::OBJECT_SERIALIZER_KEY]
39
+ raise ArgumentError, "Serializer name is not present in the argument: #{argument.inspect}" unless serializer_name
40
+
41
+ serializer = serializer_name.safe_constantize
42
+ raise ArgumentError, "Serializer #{serializer_name} is not known" unless serializer
43
+
44
+ serializer.deserialize(argument)
45
+ end
46
+
47
+ # Returns list of known serializers.
48
+ def serializers
49
+ self._additional_serializers
50
+ end
51
+
52
+ # Adds new serializers to a list of known serializers.
53
+ def add_serializers(*new_serializers)
54
+ self._additional_serializers += new_serializers.flatten
55
+ end
56
+ end
57
+
58
+ add_serializers SymbolSerializer,
59
+ DurationSerializer,
60
+ DateTimeSerializer,
61
+ DateSerializer,
62
+ TimeWithZoneSerializer,
63
+ TimeSerializer,
64
+ ModuleSerializer
65
+ end
66
+ end