Sha256: 54a2bccfc0aa0fc9723e5dd400d1236bafe0147123f754389bcab04d69320fe8

Contents?: true

Size: 1.23 KB

Versions: 1

Compression:

Stored size: 1.23 KB

Contents

# frozen_string_literal: true

require "rom/lint/linter"

module ROM
  module Lint
    # Ensures that a [ROM::EnumerableDataset] extension correctly yields
    # arrays and tuples
    #
    # @api public
    class EnumerableDataset < ROM::Lint::Linter
      # The linted subject
      #
      # @api public
      attr_reader :dataset

      # The expected data
      #
      # @api public
      attr_reader :data

      # Create a linter for EnumerableDataset
      #
      # @param [EnumerableDataset] dataset the linted subject
      # @param [Object] data the expected data
      #
      # @api public
      def initialize(dataset, data)
        @dataset = dataset
        @data = data
      end

      # Lint: Ensure that +dataset+ yield tuples via +each+
      #
      # @api public
      def lint_each
        result = []
        dataset.each do |tuple|
          result << tuple
        end
        return if result == data

        complain "#{dataset.class}#each must yield tuples"
      end

      # Lint: Ensure that +dataset+'s array equals to expected +data+
      #
      # @api public
      def lint_to_a
        return if dataset.to_a == data

        complain "#{dataset.class}#to_a must cast dataset to an array"
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rom-6.0.0.alpha1 lib/rom/lint/enumerable_dataset.rb