Sha256: 7400d1059f0375b57f14f3eb8e853b319a0d2607f23eb099dcaf1939d11d66f5
Contents?: true
Size: 1.08 KB
Versions: 46
Compression:
Stored size: 1.08 KB
Contents
# frozen_string_literal: true require "active_support/core_ext/array/wrap" module DjiMqttConnect module Utils # Generates a simple message schema from a mqtt message # # Schema is simply the class name of any element that is not a Hash or Array class MessageSchemaGenerator def initialize(retain_attributes: []) @retain_attributes = Array.wrap(retain_attributes) end def generate(message) case message when Hash retain_values = retain_attributes.each_with_object({}) do |attribute, hash| next unless message.key?(attribute) attribute_value = message[attribute] next if attribute_value.is_a?(Hash) || attribute_value.is_a?(Array) hash[attribute] = "#{attribute_value.class.name}:#{attribute_value}" end message.transform_values { |v| generate(v) }.merge(retain_values) when Array message.map { |v| generate(v) } else message.class.name end end private attr_reader :retain_attributes end end end
Version data entries
46 entries across 46 versions & 1 rubygems