Sha256: 3ac4eb93df5908d975a0aac9cde3b08148ef47de0b0805d1cb627416a1069ebe

Contents?: true

Size: 1.49 KB

Versions: 12

Compression:

Stored size: 1.49 KB

Contents

# frozen_string_literal: true

require 'active_support/hash_with_indifferent_access'
require 'ostruct'

module EacCli
  class Speaker
    class List
      class << self
        def build(list)
          return List.new(hash_to_values(list)) if list.is_a?(::Hash)
          return List.new(array_to_values(list)) if list.is_a?(::Array)

          raise "Invalid list: #{list} (#{list.class})"
        end

        private

        def hash_to_values(list)
          list.map { |key, value| ::OpenStruct.new(key: key, label: key, value: value) } # rubocop:disable Style/OpenStructUse
        end

        def array_to_values(list)
          list.map { |value| ::OpenStruct.new(key: value, label: value, value: value) }  # rubocop:disable Style/OpenStructUse
        end
      end

      attr_reader :values

      def initialize(values)
        @values = values.map do |v|
          ::OpenStruct.new(key: to_key(v.key), label: to_label(v.label), value: v.value)  # rubocop:disable Style/OpenStructUse
        end
      end

      def valid_labels
        values.map(&:label)
      end

      def valid_value?(value)
        values.any? { |v| v.key == to_key(value) }
      end

      def to_key(value)
        to_label(value).downcase
      end

      def to_label(value)
        value.to_s.strip
      end

      def build_value(value)
        key = to_key(value)
        values.each do |v|
          return v.value if v.key == key
        end
        raise "Value not found: \"#{value}\" (#{values})"
      end
    end
  end
end

Version data entries

12 entries across 12 versions & 2 rubygems

Version Path
eac_cli-0.40.0 lib/eac_cli/speaker/list.rb
eac_cli-0.39.0 lib/eac_cli/speaker/list.rb
eac_cli-0.38.1 lib/eac_cli/speaker/list.rb
eac_tools-0.82.0 sub/eac_cli/lib/eac_cli/speaker/list.rb
eac_tools-0.81.0 sub/eac_cli/lib/eac_cli/speaker/list.rb
eac_tools-0.80.0 sub/eac_cli/lib/eac_cli/speaker/list.rb
eac_tools-0.79.0 sub/eac_cli/lib/eac_cli/speaker/list.rb
eac_tools-0.78.0 sub/eac_cli/lib/eac_cli/speaker/list.rb
eac_tools-0.77.1 sub/eac_cli/lib/eac_cli/speaker/list.rb
eac_tools-0.77.0 sub/eac_cli/lib/eac_cli/speaker/list.rb
eac_cli-0.38.0 lib/eac_cli/speaker/list.rb
eac_tools-0.76.1 sub/eac_cli/lib/eac_cli/speaker/list.rb