lib/avromatic/model/message_decoder.rb in avromatic-0.12.0 vs lib/avromatic/model/message_decoder.rb in avromatic-0.13.0.rc0

- old
+ new

@@ -45,27 +45,45 @@ Avromatic.schema_registry || (registry_url && AvroTurf::SchemaRegistry.new(registry_url, logger: Avromatic.logger)) || Avromatic.build_schema_registry end - # If two arguments are specified then the first is interpreted as the - # message key and the second is the message value. If there is only one - # arg then it is used as the message value. # @return [Avromatic model] def decode(*args) - message_key, message_value = args.size > 1 ? args : [nil, args.first] - value_schema_name = schema_name_for_data(message_value) - key_schema_name = schema_name_for_data(message_key) if message_key - deserialize([key_schema_name, value_schema_name], message_key, message_value) + with_decode_args(*args) do |model, message_key, message_value| + model.avro_message_decode(message_key, message_value) + end end + # @return [Hash] + def decode_hash(*args) + with_decode_args(*args) do |model, message_key, message_value| + model.avro_message_attributes(message_key, message_value) + end + end + private attr_reader :schema_names_by_id, :model_map, :schema_registry - def deserialize(model_key, message_key, message_value) + def extract_key_and_value(*args) + args.size > 1 ? args.take(2) : [nil, args.first] + end + + def model_key_for_message(message_key, message_value) + value_schema_name = schema_name_for_data(message_value) + key_schema_name = schema_name_for_data(message_key) if message_key + [key_schema_name, value_schema_name] + end + + # If two arguments are specified then the first is interpreted as the + # message key and the second is the message value. If there is only one + # arg then it is used as the message value. + def with_decode_args(*args) + message_key, message_value = extract_key_and_value(*args) + model_key = model_key_for_message(message_key, message_value) raise UnexpectedKeyError.new(model_key) unless model_map.key?(model_key) - model_map[model_key].avro_message_decode(message_key, message_value) + yield(model_map[model_key], message_key, message_value) end def schema_name_for_data(data) validate_magic_byte!(data) schema_id = extract_schema_id(data)