defmodule Thesis.Store do @moduledoc """ Thesis.Store is an Elixir "behaviour" that defines the public function interface necessary for Thesis to use a particular store module. There are currently four required functions, as described below. """ @doc """ Returns a Thesis.Page struct with the given slug (aka request_path). """ @callback page(String.t) :: Thesis.Page.t @doc """ Returns a list of related Thesis.PageContent structs both for the given Thesis.Page struct and global content areas. This is generally used to populate the page content using the Thesis.View.content/4 function. """ @callback page_contents(Thesis.Page.t) :: [Thesis.PageContent.t] @doc """ Updates the given page (identified by its slug) with the given map of string keys and Thesis.PageContent structs. Returns `{:ok, page}` or ``{:error, changeset}``. update(%{"slug" => "/"}, %{"Heading" => "My Heading Content"}) """ @callback update(%{String.t => String.t}, map) :: {atom, any} @doc """ Deletes the given page (identified by its slug). Returns `{:ok, page}` or `{:error, changeset}`. delete(%{"slug" => "/asdf"}) """ @callback delete(%{String.t => String.t}) :: {atom, any} @doc """ Retrieves a given backup (identified by its id). Returns the backup. restore(backup_id) """ @callback restore(Integer.t) :: Thesis.Backup.t @doc """ Retrieves all backups for a given slug. Returns the backup. backups(slug) """ @callback backups(String.t) :: [Thesis.Backup.t] end