Skip to content

Commit

Permalink
Improved spacing and added documentation reference in README
Browse files Browse the repository at this point in the history
  • Loading branch information
szsoppa committed May 21, 2023
1 parent cf7ce7b commit d40dd8f
Showing 1 changed file with 45 additions and 0 deletions.
45 changes: 45 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
# Contexted

<br/>

<div>
<a href="https://github.com/curiosum-dev/contexted/actions/workflows/ci.yml">
<img alt="CI Status" src="https://github.com/curiosum-dev/contexted/actions/workflows/ci.yml/badge.svg">
Expand All @@ -12,18 +14,47 @@
</a>
</div>

<br/>

[Contexts](https://hexdocs.pm/phoenix/contexts.html) in Elixir & Phoenix are getting complicated over time.
Cross-referencing, big modules and repetitiveness are the most common reasons for this problem.

Contexted arms you with a set of tools to maintain contexts well.

<br/>

---

_Note: Official documentation for contexted library is [available on hexdocs][hexdoc]._

[hexdoc]: https://hexdocs.pm/contexted

---

<br/>

## Table of Contents

- [Features](#features)
- [Installation](#installation)
- [Step by step overview](#step-by-step-overview)
- [Keep contexts separate](#keep-contexts-separate)
- [Dividing each context into smaller parts](#dividing-each-context-into-smaller-parts)
- [Being able to access docs and specs in auto-delegated functions](#being-able-to-access-docs-and-specs-in-auto-delegated-functions)
- [Don't repeat yourself with CRUD operations](#dont-repeat-yourself-with-crud-operations)
- [Contributing](#contributing)
- [License](#license)

<br/>

## Features

- `Contexted.Tracer` - trace and enforce definite separation between specific context modules.
- `Contexted.Delegator` - divide the big context module into smaller parts and use delegations to build the final context.
- `Contexted.CRUD` - auto-generate the most common CRUD operations whenever needed.

<br/>

## Installation

Add the following to your `mix.exs` file:
Expand All @@ -38,6 +69,8 @@ end

Then run `mix deps.get`.

<br/>

## Step by step overview

To describe a sample usage of this library, let's assume that your project has three contexts:
Expand All @@ -50,6 +83,8 @@ Our goal, as the project grows, is to:
2. Divide each context into smaller parts so that it is easier to maintain. In this case, we'll refer to each of these parts as **Subcontext**. It's not a new term added to the Phoenix framework but rather a term proposed to emphasize that it's a subset of Context. For this to work, we'll use delegates.
3. Not repeat ourselves with common business logic operations. For this to work, we'll be using CRUD functions generator, since these are the most common.

<br/>

### Keep contexts separate

It's very easy to monitor cross-references between context modules with the `contexted` library.
Expand Down Expand Up @@ -80,6 +115,8 @@ And that's it. From now on, whenever you will cross-reference one context with a
** (RuntimeError) You can't reference App.Blog context within App.Accounts context.
```

<br/>

### Dividing each context into smaller parts

To divide big Context into smaller Subcontexts, we can use `delegate_all/1` macro from `Contexted.Delegator` module.
Expand Down Expand Up @@ -133,6 +170,8 @@ You will simply do:
App.Account.find_user(1)
```

<br/>

#### Being able to access docs and specs in auto-delegated functions

Both docs and specs are attached as metadata of module once it's compiled and saved as `.beam`. In reference to the example of `App.Account` context, it's possible that `App.Account.Users` will not be saved in `.beam` file before the `delegate_all` macro is executed. Therefore, first, all of the modules have to be compiled, and saved to `.beam` and only then we can create `@doc` and `@spec` of each delegated function.
Expand All @@ -145,6 +184,8 @@ config :contexted,

You may also want to enable it only for certain environments, like `dev`.

<br/>

### Don't repeat yourself with CRUD operations

In most web apps CRUD operations are very common. Most of these, have the same pattern. Why not autogenerate them?
Expand Down Expand Up @@ -180,10 +221,14 @@ iex> App.Accounts.Users.__info__(:functions)
]
```

<br/>

# Contributing

Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.

<br/>

# License

Distributed under the MIT License. See [LICENSE](LICENSE) for more information.

0 comments on commit d40dd8f

Please sign in to comment.