Sha256: 8d8e478fa0e7833242228c06c4bb16c5437d7182e97c16611912d45e6182fa0a

Contents?: true

Size: 1.26 KB

Versions: 2

Compression:

Stored size: 1.26 KB

Contents

module Senec
  module Local
    class State
      def initialize(connection:)
        @connection = connection
      end

      attr_reader :connection

      # Extract state names from JavaScript file, which is formatted like this:
      #
      # var system_state_name = {
      #   0: "FIRST STATE",
      #   1: "SECOND STATE",
      #   ...
      #  };
      def names(language: :de)
        response(language:).match(FILE_REGEX)[0].split("\n").each_with_object({}) do |line, hash|
          key, value = line.match(LINE_REGEX)&.captures
          next unless key && value

          hash[key.to_i] = value
        end
      end

      private

      FILE_REGEX = /var system_state_name = \{(.*?)\};/m
      LINE_REGEX = /(\d+)\s*:\s*"(.*)"/

      def response(language:)
        res = connection.get url(language:)
        raise Error, res.message unless res.success?

        res.body
      end

      # Use the JavaScript file containing English/German/Italian names from the SENEC web interface
      def url(language:)
        case language
        when :en
          '/js/EN-en.js'
        when :de
          '/js/DE-de.js'
        when :it
          '/js/IT-it.js'
        else
          raise Error, "Language #{language} not supported"
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
senec-0.15.0 lib/senec/local/state.rb
senec-0.14.0 lib/senec/local/state.rb