Sha256: 5ccb269cb2d6881aef4438c6e8a55611013c70c250f0b9fcb88431985d7ad79d

Contents?: true

Size: 1.42 KB

Versions: 195

Compression:

Stored size: 1.42 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) }
        end

        def array_to_values(list)
          list.map { |value| ::OpenStruct.new(key: value, label: value, value: value) }
        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)
        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| # rubocop:disable Style/HashEachMethods
          return v.value if v.key == key
        end
        raise "Value not found: \"#{value}\" (#{values})"
      end
    end
  end
end

Version data entries

195 entries across 195 versions & 4 rubygems

Version Path
eac_tools-0.76.0 sub/eac_cli/lib/eac_cli/speaker/list.rb
eac_tools-0.75.2 sub/eac_cli/lib/eac_cli/speaker/list.rb
eac_cli-0.37.0 lib/eac_cli/speaker/list.rb
eac_tools-0.75.1 sub/eac_cli/lib/eac_cli/speaker/list.rb
eac_tools-0.75.0 sub/eac_cli/lib/eac_cli/speaker/list.rb
eac_tools-0.74.1 sub/eac_cli/lib/eac_cli/speaker/list.rb
eac_tools-0.74.0 sub/eac_cli/lib/eac_cli/speaker/list.rb
eac_cli-0.36.0 lib/eac_cli/speaker/list.rb
eac_tools-0.73.0 sub/eac_cli/lib/eac_cli/speaker/list.rb
eac_tools-0.72.0 sub/eac_cli/lib/eac_cli/speaker/list.rb
eac_tools-0.70.1 sub/eac_cli/lib/eac_cli/speaker/list.rb
eac_tools-0.70.0 sub/eac_cli/lib/eac_cli/speaker/list.rb
eac_tools-0.69.1 sub/eac_cli/lib/eac_cli/speaker/list.rb
eac_tools-0.69.0 sub/eac_cli/lib/eac_cli/speaker/list.rb
eac_cli-0.35.1 lib/eac_cli/speaker/list.rb
eac_cli-0.34.1 lib/eac_cli/speaker/list.rb
eac_tools-0.68.0 sub/eac_cli/lib/eac_cli/speaker/list.rb
eac_tools-0.67.1 sub/eac_cli/lib/eac_cli/speaker/list.rb
eac_cli-0.35.0 lib/eac_cli/speaker/list.rb
eac_tools-0.67.0 sub/eac_cli/lib/eac_cli/speaker/list.rb