Current section

Files

Jump to
url_fetcher lib url_fetcher site_data.ex
Raw

lib/url_fetcher/site_data.ex

defmodule UrlFetcher.SiteData do
@moduledoc """
Holds information about parsed site
"""
@enforce_keys [:links, :assets]
defstruct(
links: [],
assets: []
)
@type t :: %__MODULE__{links: list(String.t()), assets: list(String.t())}
@doc """
Create new site data struct
## Examples
iex> UrlFetcher.SiteData.new()
%UrlFetcher.SiteData{links: [], assets: []}
"""
@spec new :: UrlFetcher.SiteData.t()
def new do
%__MODULE__{links: [], assets: []}
end
@doc """
Adds links to site data
## Parameters
- links: list of url strings
## Examples
iex> UrlFetcher.SiteData.new()
...> |> UrlFetcher.SiteData.with_links(["https://gorka.io"])
%UrlFetcher.SiteData{links: ["https://gorka.io"], assets: []}
"""
@spec with_links(UrlFetcher.SiteData.t(), list(String.t())) :: UrlFetcher.SiteData.t()
def with_links(data, links) do
%__MODULE__{data | links: links}
end
@doc """
Adds assets to site data
## Parameters
- assets: list of asset url strings
## Examples
iex> UrlFetcher.SiteData.new()
...> |> UrlFetcher.SiteData.with_assets(["https://gorka.io/logo.svg"])
%UrlFetcher.SiteData{links: [], assets: ["https://gorka.io/logo.svg"]}
"""
@spec with_assets(UrlFetcher.SiteData.t(), list(String.t())) :: UrlFetcher.SiteData.t()
def with_assets(data, assets) do
%__MODULE__{data | assets: assets}
end
end