defmodule Dust do @moduledoc """ Documentation for `Dust`. """ alias Dust.Requests.Result alias Dust.{Fetcher, HTML, Parsers, Requests} @doc """ Fetch given url with scripts, stylesheets and image assets """ @spec get(String.t(), Keyword.t()) :: Result.t() def get(url, options \\ []) def get(url, options) do {:ok, result, state} = Requests.get(url, options) options = [ headers: state.headers, proxy: state.proxy, options: state.proxy ] assets = result.content |> Parsers.parse() |> Fetcher.fetch(result.base_url, options) |> Fetcher.CSS.fetch(state) %Result{ result | full_content: [ HTML.inline(result.content, assets), HTML.Styles.inline(assets), HTML.Scripts.inline(assets), "" ], assets: assets } end @doc """ Save result to file """ def persist(contents, path) when is_list(contents) do with {:ok, file} <- File.open(path, [:write]) do IO.binwrite(file, contents) File.close(file) end end def persist(%Requests.Result{} = result, path) do persist(result.full_content, path) end end