module ActiveJob::Arguments
Experimental RBS support (using type sampling data from the type_fusion
project).
# sig/active_job/arguments.rbs module ActiveJob::Arguments def serialize_argument: ((Array[Array, String, String, Array, String, Array, String] | true | String) argument) -> (true | String) end
def _ruby2_keywords_hash(*args)
def _ruby2_keywords_hash(*args) args.last end
def convert_to_global_id_hash(argument)
def convert_to_global_id_hash(argument) { GLOBALID_KEY => argument.to_global_id.to_s } rescue URI::GID::MissingModelIdError raise SerializationError, "Unable to serialize #{argument.class} " \ "without an id. (Maybe you forgot to call save?)" end
def custom_serialized?(hash)
def custom_serialized?(hash) hash.key?(OBJECT_SERIALIZER_KEY) end
def deserialize(arguments)
deserialized element by element. All other types are deserialized using
deserialized without mutation are returned as-is. Arrays/Hashes are
Deserializes a set of arguments. Intrinsic types that can safely be
def deserialize(arguments) arguments.map { |argument| deserialize_argument(argument) } rescue raise DeserializationError end
def deserialize_argument(argument)
def deserialize_argument(argument) case argument when String argument when *PERMITTED_TYPES argument when Array argument.map { |arg| deserialize_argument(arg) } when Hash if serialized_global_id?(argument) deserialize_global_id argument elsif custom_serialized?(argument) Serializers.deserialize(argument) else deserialize_hash(argument) end else raise ArgumentError, "Can only deserialize primitive arguments: #{argument.inspect}" end end
def deserialize_global_id(hash)
def deserialize_global_id(hash) GlobalID::Locator.locate hash[GLOBALID_KEY] end
def deserialize_hash(serialized_hash)
def deserialize_hash(serialized_hash) result = serialized_hash.transform_values { |v| deserialize_argument(v) } if result.delete(WITH_INDIFFERENT_ACCESS_KEY) result = result.with_indifferent_access elsif symbol_keys = result.delete(SYMBOL_KEYS_KEY) result = transform_symbol_keys(result, symbol_keys) elsif symbol_keys = result.delete(RUBY2_KEYWORDS_KEY) result = transform_symbol_keys(result, symbol_keys) result = Hash.ruby2_keywords_hash(result) end result end
def ruby2_keywords_hash(hash)
def ruby2_keywords_hash(hash) _ruby2_keywords_hash(**hash) end
def ruby2_keywords_hash?(hash)
def ruby2_keywords_hash?(hash) !new(*[hash]).default.equal?(hash) end
def serialize(arguments)
serialized element by element. All other types are serialized using
serialized without mutation are returned as-is. Arrays/Hashes are
Serializes a set of arguments. Intrinsic types that can safely be
def serialize(arguments) arguments.map { |argument| serialize_argument(argument) } end
def serialize_argument(argument)
Experimental RBS support (using type sampling data from the type_fusion
project).
def serialize_argument: ((Array | String | String | String | true | String) argument) -> (true | String)
This signature was generated using 6 samples from 1 application.
def serialize_argument(argument) case argument when *PERMITTED_TYPES argument when GlobalID::Identification convert_to_global_id_hash(argument) when Array argument.map { |arg| serialize_argument(arg) } when ActiveSupport::HashWithIndifferentAccess serialize_indifferent_hash(argument) when Hash symbol_keys = argument.each_key.grep(Symbol).map!(&:to_s) aj_hash_key = if Hash.ruby2_keywords_hash?(argument) RUBY2_KEYWORDS_KEY else SYMBOL_KEYS_KEY end result = serialize_hash(argument) result[aj_hash_key] = symbol_keys result when -> (arg) { arg.respond_to?(:permitted?) && arg.respond_to?(:to_h) } serialize_indifferent_hash(argument.to_h) else Serializers.serialize(argument) end end
def serialize_hash(argument)
def serialize_hash(argument) argument.each_with_object({}) do |(key, value), hash| hash[serialize_hash_key(key)] = serialize_argument(value) end end
def serialize_hash_key(key)
def serialize_hash_key(key) case key when *RESERVED_KEYS raise SerializationError.new("Can't serialize a Hash with reserved key #{key.inspect}") when String, Symbol key.to_s else raise SerializationError.new("Only string and symbol hash keys may be serialized as job arguments, but #{key.inspect} is a #{key.class}") end end
def serialize_indifferent_hash(indifferent_hash)
def serialize_indifferent_hash(indifferent_hash) result = serialize_hash(indifferent_hash) result[WITH_INDIFFERENT_ACCESS_KEY] = serialize_argument(true) result end
def serialized_global_id?(hash)
def serialized_global_id?(hash) hash.size == 1 && hash.include?(GLOBALID_KEY) end
def transform_symbol_keys(hash, symbol_keys)
def transform_symbol_keys(hash, symbol_keys) # NOTE: HashWithIndifferentAccess#transform_keys always # returns stringified keys with indifferent access # so we call #to_h here to ensure keys are symbolized. hash.to_h.transform_keys do |key| if symbol_keys.include?(key) key.to_sym else key end end end