lib/naiveical/comparator.ex

defmodule CalendarClient.Naiveical.Comparator do
  @moduledoc """
  Compares icalendar texts.
  """

  alias Naiveical.Helpers

  def equal?(ical_text_1, ical_text_2, exclude_tags \\ []) do
    ical_text_1_sorted =
      ical_text_1
      |> Helpers.unfold()
      |> String.split("\n")
      |> Enum.reject(fn str ->
        Enum.any?(exclude_tags, fn exclude ->
          String.contains?(String.downcase(str), String.downcase(exclude))
        end)
      end)
      |> Enum.sort()
      |> Enum.join("\n")

    ical_text_2_sorted =
      ical_text_2
      |> Helpers.unfold()
      |> String.split("\n")
      |> Enum.reject(fn str ->
        Enum.any?(exclude_tags, fn exclude ->
          String.contains?(String.downcase(str), String.downcase(exclude))
        end)
      end)
      |> Enum.sort()
      |> Enum.join("\n")

    ical_text_1_sorted == ical_text_2_sorted
  end
end