From 1a341fdac33211f5eae1ad6e645fe1b9f39834bc Mon Sep 17 00:00:00 2001 From: rinpatch Date: Tue, 18 Jun 2019 13:07:14 +0300 Subject: [PATCH] Move checking for validate_tld to valid_tld? --- lib/auto_linker/parser.ex | 35 +++++++++++++++++++++-------------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/lib/auto_linker/parser.ex b/lib/auto_linker/parser.ex index ba0913e..2b84d26 100644 --- a/lib/auto_linker/parser.ex +++ b/lib/auto_linker/parser.ex @@ -318,30 +318,37 @@ defmodule AutoLinker.Parser do def url?(buffer, opts) do if opts[:scheme] do - valid_url?(buffer) && Regex.match?(@match_scheme, buffer) && - (!opts[:validate_tld] or opts[:validate_tld] == :no_scheme || valid_tld?(buffer)) + valid_url?(buffer) && Regex.match?(@match_scheme, buffer) && valid_tld?(buffer, opts) else - valid_url?(buffer) && Regex.match?(@match_url, buffer) && - (opts[:validate_tld] == false || valid_tld?(buffer)) + valid_url?(buffer) && Regex.match?(@match_url, buffer) && valid_tld?(buffer, opts) end end def email?(buffer) do - valid_url?(buffer) && Regex.match?(@match_email, buffer) && valid_tld?(buffer) + valid_url?(buffer) && Regex.match?(@match_email, buffer) && valid_tld?(buffer, []) end defp valid_url?(url), do: !Regex.match?(@invalid_url, url) - def valid_tld?(buffer) do - with [host] <- Regex.run(@match_hostname, buffer, capture: [:host]) do - if ip?(host) do + def valid_tld?(buffer, opts) do + cond do + opts[:validate_tld] == false -> true - else - tld = host |> String.split(".") |> List.last() - MapSet.member?(@tlds, tld) - end - else - _ -> false + + opts[:validate_tld] == :no_scheme && opts[:scheme] -> + true + + true -> + with [host] <- Regex.run(@match_hostname, buffer, capture: [:host]) do + if ip?(host) do + true + else + tld = host |> String.split(".") |> List.last() + MapSet.member?(@tlds, tld) + end + else + _ -> false + end end end