Sha256: 170a6458c08bc476b59c6a9aecfb43610f58fcfd7eaa263c26595d6bcf679e68

Contents?: true

Size: 1.59 KB

Versions: 3

Compression:

Stored size: 1.59 KB

Contents

module Zaptec
  class Constants
    class << self
      def observation_state_id_to_name(state_id:, device_type:)
        device_type_observation_ids(device_type)
          .fetch(state_id)
      end

      def charger_operation_mode_to_name(operation_mode)
        constants
          .fetch("ChargerOperationModes")
          .detect { |_name, mode| mode == operation_mode }
          .then { |name, _mode| name }
      end

      def command_to_command_id(command)
        constants
          .fetch("Commands")
          .fetch(command.to_s) { raise "Unknown command '#{command}'" }
      end

      private

      def device_type_observation_ids(device_type)
        @device_type_observation_ids ||= {}

        @device_type_observation_ids[device_type] ||=
          begin
            global_observation_ids = constants.fetch("Observations").invert.transform_values(&:to_sym)

            device_specific_observations =
              constants
                .fetch("Schema")
                .fetch(device_type_to_name(device_type))
                .fetch("ObservationIds")
                .invert
                .transform_values(&:to_sym)

            global_observation_ids.merge(device_specific_observations)
          end
      end

      def device_type_to_name(device_type)
        constants
          .fetch("DeviceTypes")
          .detect { |_name, type| type == device_type }
          .then { |name, _type| name }
      end

      def constants
        @constants ||= JSON.parse(constants_file.read)
      end

      def constants_file = Pathname.new(__dir__).join("../../data/constants.json")
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
stekker_zaptec-1.1.0 lib/zaptec/constants.rb
stekker_zaptec-1.0.1 lib/zaptec/constants.rb
stekker_zaptec-1.0.0 lib/zaptec/constants.rb