README.md

# Assigns

Assigns is a library that enables abbreviation of Phoenix LiveView `assign/3`, `assign_new/3` and `update/3` wrapper 
function definitions.

## Installation

```elixir
def deps do
  [
    { :assigns, "~> 0.2.0"}
  ]
end
```

Use the `Assigns` module in every module where you need it:

```elixir
defmodule MyAppWeb.MyLiveView do
  use MyAppWeb, :live_view
  
  use Assigns # insert this here, or better yet into `MyAppWeb.html_helpers/0`
  
  # ..
end
```

## Docs

The docs can be found at [HexDocs](https://hexdocs.pm/assigns).

## Sample usage

```elixir
defmodule MyAppWeb.MyLiveView do
  use MyAppWeb, :live_view
  use Assigns
  
  # ..
  
  defassign_newp [ :foo, :baz]
  defassignp [ :foo, :bar, :baz, :just_mounted?]
  defupdatep :bar  
end
```

The snippet above is an equivalent of (expands into) the following:

```elixir
defmodule MyAppWeb.MyLiveView do
  use MyAppWeb, :live_view
  use Assigns
  
  # ..

  defp assign_new_foo( socket_or_assigns, fun) do
    assign_new( socket_or_assigns, :foo, fun)
  end
  
  defp assign_new_baz( socket_or_assigns, fun) do
    assign_new( socket_or_assigns, :baz, fun)
  end
  
  defp assign_foo( socket_or_assigns, foo) do
    assign( socket_or_assigns, :foo, foo)
  end
  
  defp assign_bar( socket_or_assigns, bar) do
    assign( socket_or_assigns, :bar, bar)    
  end
  
  defp assign_baz( socket_or_assigns, baz) do
    assign( socket_or_assigns, :baz, baz)
  end
  
  defp assign_just_mounted( socket_or_assigns, just_mounted?) do
    assign( socket_or_assigns, :just_mounted?, just_mounted?)
  end
  
  defp update_bar( socket_or_assigns, updater) do
    assign( socket_or_assigns, :bar, updater)
  end
end
```

## Formatting

The source code formatting in this library diverges from the standard formatting practice based on using `mix format`
in so much that there's a leading space character inserted before each initial argument / element with an intention to
improve the code readability (subject to the author's personal perception).