lib/r_range/active_support.ex

defmodule RRange.ActiveSupport do
  @moduledoc """
  Summarized all of List functions in Rails.ActiveSupport.
  If a function with the same name already exists in Elixir, that is not implemented.
  Defines all of here functions when `use RRange.ActiveSupport`.
  """
  @spec __using__(any) :: list
  defmacro __using__(_opts) do
    RUtils.define_all_functions!(__MODULE__)
  end

  # https://www.rubydoc.info/gems/activesupport/Range
  # [:as_json, :overlaps?, :sum]
  # |> RUtils.required_functions([Range, RRange.Ruby, REnum])
  # as_json
  # overlaps?

  @doc """
  Compare two ranges and see if they overlap each other.
  ## Examples
      iex> RList.overlaps?(1..5, 4..6)
      true

      iex> RList.overlaps?(1..5, 7..9)
      false
  """
  @spec overlaps?(Range.t(), Range.t()) :: boolean()
  def overlaps?(range1, range2) do
    range1
    |> Enum.any?(&(&1 in range2))
  end
end