Method: PlainText::Util.positive_array_index

Defined in:
lib/plain_text/util.rb

.positive_array_index(i, ary) ⇒ Integer, NilClass

Returns a non-negative Array index for self

If positive or zero, it returns i. If the negative index is out of range, it returns nil.

Parameters:

  • i (Integer)
  • ary (Array)

    Reference Array.

Returns:

  • (Integer, NilClass)

    nil if out of range to the negative. Note in most cases in Ruby default, it raises IndexError. See the code of #positive_array_index_checked

Raises:

  • (TypeError)

    if non-integer is specified.

  • (ArgumentError)

    if ary is not an Array, or more specifically, it does not have size method or ary.size does not return Integer or similar.



43
44
45
46
47
48
# File 'lib/plain_text/util.rb', line 43

def positive_array_index(i, ary)
  i2 = i.to_int rescue (raise TypeError, sprintf("no implicit conversion of #{i.class} into Integer"))
  return i2 if i2 >= 0
  ret = ary.size + i2 rescue (raise ArgumentError, "argument is not an array.")
  (ret < 0) ? nil : ret
end