Sha256: 1ff7fe92b9ee836fd20f309a149a441851625efa796fb3be13e6100d9543acef

Contents?: true

Size: 1.33 KB

Versions: 4

Compression:

Stored size: 1.33 KB

Contents

# frozen_string_literal: true

module Leftovers
  class ConfigLoader
    class StringEnumSchema < Schema
      class << self
        def value(value, aliases: nil)
          values << value
          Array(aliases).each do |alias_name|
            self.aliases[alias_name] = value
          end
        end

        def aliases
          @aliases ||= {}
        end

        def aliases_for(value)
          aliases.select { |_k, v| v == value }.keys
        end

        def values
          @values ||= []
        end

        def each_value(&block)
          @values.each(&block)
        end

        def to_ruby(node)
          aliases[node.to_sym] || node.to_sym
        end

        def validate(node)
          if node.string?
            node.error = error_message_with_suggestions(node) unless valid_value?(node.to_sym)
          else
            error(node, 'be a string')
          end

          super
        end

        private

        def valid_value?(val)
          values.include?(val) || aliases.key?(val)
        end

        def suggester
          @suggester ||= Suggester.new(values)
        end

        def error_message_with_suggestions(node)
          suggestions = suggester.suggest(node.to_ruby)

          "unrecognized value #{node} for #{node.name}\nDid you mean: #{suggestions.join(', ')}"
        end
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
leftovers-0.12.2 lib/leftovers/config_loader/string_enum_schema.rb
leftovers-0.12.1 lib/leftovers/config_loader/string_enum_schema.rb
leftovers-0.12.0 lib/leftovers/config_loader/string_enum_schema.rb
leftovers-0.11.2 lib/leftovers/config_loader/string_enum_schema.rb