Sha256: d03283d4189f6730768ea4ddfc811ffea3be10239389d60643fecbf03691e12c

Contents?: true

Size: 1.49 KB

Versions: 161

Compression:

Stored size: 1.49 KB

Contents

# frozen_string_literal: true

require 'active_support/hash_with_indifferent_access'
require 'ostruct'

module EacRubyUtils
  module Console
    module 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|
            return v.value if v.key == key
          end
          raise "Value not found: \"#{value}\" (#{values})"
        end
      end
    end
  end
end

Version data entries

161 entries across 161 versions & 3 rubygems

Version Path
avm-tools-0.98.0 vendor/eac_ruby_utils/lib/eac_ruby_utils/console/speaker/list.rb
avm-tools-0.97.0 vendor/eac_ruby_utils/lib/eac_ruby_utils/console/speaker/list.rb
avm-tools-0.96.0 vendor/eac_ruby_utils/lib/eac_ruby_utils/console/speaker/list.rb
eac_ruby_utils-0.63.0 lib/eac_ruby_utils/console/speaker/list.rb
avm-tools-0.95.0 vendor/eac_ruby_utils/lib/eac_ruby_utils/console/speaker/list.rb
eac_ruby_utils-0.62.1 lib/eac_ruby_utils/console/speaker/list.rb
avm-tools-0.94.3 vendor/eac_ruby_utils/lib/eac_ruby_utils/console/speaker/list.rb
eac_ruby_utils-0.62.0 lib/eac_ruby_utils/console/speaker/list.rb
eac_ruby_utils-0.61.0 lib/eac_ruby_utils/console/speaker/list.rb
avm-tools-0.94.2 vendor/eac_ruby_utils/lib/eac_ruby_utils/console/speaker/list.rb
eac_ruby_utils-0.60.0 lib/eac_ruby_utils/console/speaker/list.rb
avm-tools-0.94.1 vendor/eac_ruby_utils/lib/eac_ruby_utils/console/speaker/list.rb
eac_ruby_utils-0.59.0 lib/eac_ruby_utils/console/speaker/list.rb
ehbrs-tools-0.20.0 vendor/eac_ruby_utils/lib/eac_ruby_utils/console/speaker/list.rb
avm-tools-0.94.0 vendor/eac_ruby_utils/lib/eac_ruby_utils/console/speaker/list.rb
avm-tools-0.93.0 vendor/eac_ruby_utils/lib/eac_ruby_utils/console/speaker/list.rb
avm-tools-0.92.0 vendor/eac_ruby_utils/lib/eac_ruby_utils/console/speaker/list.rb
avm-tools-0.91.0 vendor/eac_ruby_utils/lib/eac_ruby_utils/console/speaker/list.rb
avm-tools-0.90.0 vendor/eac_ruby_utils/lib/eac_ruby_utils/console/speaker/list.rb
avm-tools-0.89.0 vendor/eac_ruby_utils/lib/eac_ruby_utils/console/speaker/list.rb