Sha256: 762345748fd0b31031c5fb5f7ba887c55b3a62273d8ce7de1e9806558df87118

Contents?: true

Size: 1.01 KB

Versions: 8

Compression:

Stored size: 1.01 KB

Contents

# frozen_string_literal: true

module Leftovers
  class ConfigLoader
    class ArraySchema < Schema
      class << self
        def [](value_schema)
          new(value_schema)
        end
      end

      attr_reader :value_schema

      def initialize(value_schema)
        @value_schema = value_schema

        super()
      end

      def validate(node)
        validate_array(node) && validate_length(node) && validate_values(node)
      end

      def to_ruby(node)
        node.children.map do |value|
          value_schema.to_ruby(value)
        end
      end

      private

      def validate_array(node)
        self.class.error(node, 'be an array') unless node.array?

        node.valid?
      end

      def validate_length(node)
        self.class.error(node, 'not be empty') if node.children.empty?

        node.valid?
      end

      def validate_values(node)
        node.children.each do |value|
          value_schema.validate(value)
        end

        node.children.all?(&:valid?)
      end
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
leftovers-0.12.2 lib/leftovers/config_loader/array_schema.rb
leftovers-0.12.1 lib/leftovers/config_loader/array_schema.rb
leftovers-0.12.0 lib/leftovers/config_loader/array_schema.rb
leftovers-0.11.2 lib/leftovers/config_loader/array_schema.rb
leftovers-0.11.1 lib/leftovers/config_loader/array_schema.rb
leftovers-0.11.0 lib/leftovers/config_loader/array_schema.rb
leftovers-0.10.0 lib/leftovers/config_loader/array_schema.rb
leftovers-0.9.0 lib/leftovers/config_loader/array_schema.rb