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

Version Path
dji_mqtt_connect-0.1.25.4 lib/dji_mqtt_connect/utils/message_schema_generator.rb
dji_mqtt_connect-0.1.25.3 lib/dji_mqtt_connect/utils/message_schema_generator.rb
dji_mqtt_connect-0.1.25.2 lib/dji_mqtt_connect/utils/message_schema_generator.rb
dji_mqtt_connect-0.1.25.1 lib/dji_mqtt_connect/utils/message_schema_generator.rb
dji_mqtt_connect-0.1.25 lib/dji_mqtt_connect/utils/message_schema_generator.rb
dji_mqtt_connect-0.1.24.1 lib/dji_mqtt_connect/utils/message_schema_generator.rb
dji_mqtt_connect-0.1.24 lib/dji_mqtt_connect/utils/message_schema_generator.rb
dji_mqtt_connect-0.1.23.3 lib/dji_mqtt_connect/utils/message_schema_generator.rb
dji_mqtt_connect-0.1.23.2 lib/dji_mqtt_connect/utils/message_schema_generator.rb
dji_mqtt_connect-0.1.23.1 lib/dji_mqtt_connect/utils/message_schema_generator.rb
dji_mqtt_connect-0.1.23 lib/dji_mqtt_connect/utils/message_schema_generator.rb
dji_mqtt_connect-0.1.22.2 lib/dji_mqtt_connect/utils/message_schema_generator.rb
dji_mqtt_connect-0.1.22.1 lib/dji_mqtt_connect/utils/message_schema_generator.rb
dji_mqtt_connect-0.1.22 lib/dji_mqtt_connect/utils/message_schema_generator.rb
dji_mqtt_connect-0.1.21 lib/dji_mqtt_connect/utils/message_schema_generator.rb
dji_mqtt_connect-0.1.20.1 lib/dji_mqtt_connect/utils/message_schema_generator.rb
dji_mqtt_connect-0.1.20 lib/dji_mqtt_connect/utils/message_schema_generator.rb
dji_mqtt_connect-0.1.19.2 lib/dji_mqtt_connect/utils/message_schema_generator.rb
dji_mqtt_connect-0.1.19.1 lib/dji_mqtt_connect/utils/message_schema_generator.rb
dji_mqtt_connect-0.1.19 lib/dji_mqtt_connect/utils/message_schema_generator.rb