activejob 5.2.8.1 → 6.1.6.1

Sign up to get free protection for your applications and to get access to all the features.
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