Sha256: 7c6c950878e075c82f6c63e512c7281ebdafd1033249df638c4226149c5f4a6a

Contents?: true

Size: 1.14 KB

Versions: 3

Compression:

Stored size: 1.14 KB

Contents

# frozen_string_literal: true

# Functions for detecting an enum.
module EnumModule
  def enum?(back_card)
    return false unless valid?(back_card)

    return true if ordered_or_headered?(back_card)

    return false if detect_non_ol(back_card) || !same_prefix?(back_card)

    true
  end

  def ordered?(back_card)
    back_card.each_with_index do |item, index|
      return false unless item.start_with?("#{index + 1}. ")
    end

    true
  end

  private

  def valid?(back_card)
    back_card.is_a?(Array) && back_card.any?
  end

  def ordered_or_headered?(back_card)
    ordered?(back_card) || enum_with_header?(back_card)
  end

  def detect_non_ol(back_card)
    back_card.each { |element| return true unless element[/^[-+*]\s.*/] }

    false
  end

  def enum_with_header?(back_card)
    return false if back_card.first[/^[-+*]\s.*/]

    back_card[1..back_card.size].each do |element|
      return false unless element[/^[-+*]\s.*/]
    end

    true
  end

  def same_prefix?(back_card)
    prefix = back_card.first[0, 2]
    back_card_rest = back_card - [back_card.first]
    back_card_rest.all? { |list_item| list_item.start_with?(prefix) }
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
rast-1.0.0 examples/enum_module.rb
rast-0.19.1 examples/enum_module.rb
rast-0.19.0 examples/enum_module.rb