Packages

A full support library for phoenix that allows us to search, sort and paginate phoenix ecto models.

Current section

Files

Jump to
rummage_phoenix lib rummage_phoenix.ex
Raw

lib/rummage_phoenix.ex

defmodule Rummage.Phoenix do
@moduledoc """
`Rummage.Phoenix` is a support framework for `Phoenix` that can be used to manipulate
`Phoenix` collections and `Ecto` models with Search, Sort and Paginate operations.
It accomplishes the above operations by using `Rummage.Ecto`, to paginate `Ecto`
queries and adds Phoenix and HTML support to views and controllers.
Each operation: Search, Sort and Paginate have their hooks defined in `Rummage.Ecto`
and is configurable.
The best part about rummage is that all the three operations: `Search`, `Sort` and
`Paginate` integrate seamlessly and can be configured separately. To check out their
seamless integration, please check the information below.
If you want to check a sample application that uses Rummage, please check
[this link](https://github.com/Excipients/rummage_phoenix_example).
"""
@doc """
`:default_per_page` can also be set at run time
in the `config.exs` file
## Examples
Returns default `per_page` set in the config
(2 in `Rummage.Phoenix`'s test env):
iex> alias Rummage.Phoenix
iex> Phoenix.default_per_page
2
"""
def default_per_page do
config(:default_per_page, Rummage.Ecto.Config.per_page())
end
@doc """
`:default_helpers` can also be set at run time
in the `config.exs` file
## Examples
Returns default `helpers` set in the config
(Rummage.Phoenix.Router.Helpers in `Rummage.Phoenix`'s test env):
iex> alias Rummage.Phoenix
iex> Phoenix.default_helpers
Rummage.Phoenix.Router.Helpers
"""
def default_helpers do
config(:default_helpers, nil)
end
@doc """
`:default_theme` can also be set at run time
in the `config.exs` file
## Examples
Returns default `theme` set in the config
(:bootstrap in `Rummage.Phoenix`'s test env):
iex> alias Rummage.Phoenix
iex> Phoenix.default_theme
:bootstrap
"""
def default_theme do
config(:default_theme, :bootstrap)
end
@doc """
`:default_max_page_links` can also be set at run time
in the `config.exs` file
## Examples
Returns default `default_max_page_links` set in the config
(5 in `Rummage.Phoenix`'s test env):
iex> alias Rummage.Phoenix
iex> Phoenix.default_max_page_links
5
"""
def default_max_page_links do
config(:default_max_page_links, 5)
end
@doc false
defp config do
Application.get_env(:rummage_phoenix, Rummage.Phoenix, [])
end
@doc """
`config` returns the value associated with the given `key` and returns `default` if
the value is `nil`.
## Examples
Returns value corresponding to config or returns the default value:
iex> alias Rummage.Phoenix
iex> Phoenix.config(:x, "default")
"default"
"""
def config(key, default \\ nil) do
config()
|> Keyword.get(key, default)
|> resolve_config(default)
end
@doc """
`resolve_system_config` returns a system variable set up or returns the
specified default value
## Examples
Returns value corresponding to a system variable config or returns the default value:
iex> alias Rummage.Phoenix
iex> Phoenix.resolve_system_config({:system, "some random config"}, "default")
"default"
"""
@spec resolve_system_config(Tuple.t(), term) :: {term}
def resolve_system_config({:system, var_name}, default) do
System.get_env(var_name) || default
end
defp resolve_config(value, _default), do: value
end