Packages

Professional Elixir integration for pardon-dance. Provides utilities for building links and integrating with https://supermaker.ai/video/blog/unlocking-the-magic-of-pardon-dance-the-viral-video-effect-taking-over-social-media/.

Current section

Files

Jump to
pardon_dance lib pardon_dance.ex
Raw

lib/pardon_dance.ex

defmodule PardonDance do
@moduledoc """
A library for generating URLs and related utilities.
This library provides functions for constructing URLs,
handling parameters, and performing other related tasks.
"""
@base_url "https://supermaker.ai/video/blog"
@doc """
Builds a URL based on the base URL and optional parameters.
## Examples
iex> PardonDance.build_url()
"https://supermaker.ai/video/blog"
iex> PardonDance.build_url(path: "unlocking-the-magic-of-pardon-dance-the-viral-video-effect-taking-over-social-media")
"https://supermaker.ai/video/blog/unlocking-the-magic-of-pardon-dance-the-viral-video-effect-taking-over-social-media"
iex> PardonDance.build_url(path: "unlocking-the-magic-of-pardon-dance-the-viral-video-effect-taking-over-social-media", query_params: [utm_source: "twitter", utm_medium: "social"])
"https://supermaker.ai/video/blog/unlocking-the-magic-of-pardon-dance-the-viral-video-effect-taking-over-social-media?utm_source=twitter&utm_medium=social"
"""
def build_url(opts \\ []) do
path = Keyword.get(opts, :path, "")
query_params = Keyword.get(opts, :query_params, [])
url =
@base_url
|> add_path(path)
|> add_query_params(query_params)
url
end
defp add_path(base_url, ""), do: base_url
defp add_path(base_url, path), do: "#{base_url}/#{path}"
defp add_query_params(url, []), do: url
defp add_query_params(url, query_params) do
query_string =
query_params
|> Enum.map(fn {key, value} -> "#{key}=#{value}" end)
|> Enum.join("&")
"#{url}?#{query_string}"
end
@doc """
Generates a shareable link with specific UTM parameters.
## Examples
iex> PardonDance.generate_share_link("twitter", "social")
"https://supermaker.ai/video/blog/unlocking-the-magic-of-pardon-dance-the-viral-video-effect-taking-over-social-media?utm_source=twitter&utm_medium=social"
"""
def generate_share_link(source, medium) do
build_url(
path: "unlocking-the-magic-of-pardon-dance-the-viral-video-effect-taking-over-social-media",
query_params: [utm_source: source, utm_medium: medium]
)
end
@doc """
Analyzes a URL and extracts its path and query parameters.
## Examples
iex> PardonDance.analyze_url("https://supermaker.ai/video/blog/some/path?query=value&another=value2")
{:ok, %{path: "/some/path", query_params: [{\"query\", \"value\"}, {\"another\", \"value2\"}]}}
iex> PardonDance.analyze_url("https://supermaker.ai/video/blog")
{:ok, %{path: "", query_params: []}}
"""
def analyze_url(url) do
case URI.parse(url) do
%{path: path, query: query} ->
query_params =
case query do
nil -> []
query_string ->
query_string
|> String.split("&")
|> Enum.map(fn param ->
case String.split(param, "=") do
[key, value] -> {key, value}
[key] -> {key, ""}
_ -> nil
end
end)
|> Enum.reject(&is_nil/1)
end
{:ok, %{path: path, query_params: query_params}}
_ ->
{:error, :invalid_url}
end
end
@doc """
Determines if a given URL is related to the base URL.
## Examples
iex> PardonDance.is_related_url?("https://supermaker.ai/video/blog/some/path")
true
iex> PardonDance.is_related_url?("https://example.com/some/path")
false
"""
def is_related_url?(url) do
String.starts_with?(url, @base_url)
end
end