EctoShorts
Ecto Shorts is a library focused around making Ecto easier to use in an application and helping to write shorter code
Installation
Documentation can be found at https://hexdocs.pm/ecto_shorts.
def deps do
[
{:ecto_shorts, "~> 0.1.0"}
]
endUsage
There are 3 main modules to EctoShorts. SchemaHelpers, CommonFilters, CommonChanges and Actions
Actions
This module takes a schema and filter paramters and runs them through CommonFilters, esentially a wrapper around Repo. For more info on filter options take a look at Common Filters
Common Changes
This module is responsible for determining put/cast assoc as well as creating and updating model relations
Extra Magic
If you pass a many to many relation only a list of id’s it will count that as a member_update and remove or add members to the relations list
E.G. User many_to_many Fruit
This would update the user to have only fruits with id 1 and 3
CommonChanges.put_or_cast_assoc(change(user, fruits: [%{id: 1}, %{id: 3}]), :fruits)SchemaHelpers
This module contains helpers to check schema data
Common Filters
This module creates query from filter paramters like
CommonFilters.convert_params_to_filter(User, %{id: 5})is the same as
from u in User, where: id == 5This allows for filters to be constructed from data such as
CommonFilters.convert_params_to_filter(User, %{
favorite_food: "curry",
age: %{gte: 18, lte: 50},
name: %{ilike: "steven"},
preload: [:address],
last: 5
})which the equivelent would be
from u in User,
preload: [:address],
limit: 5,
where: u.favorite_food == "curry" and
u.age >= 18 and u.age <= 50 and
ilike(u.name, "%steven%")List of common filters
preload- Preloads fields onto the query resultsstart_date- Query for items inserted after this dateend_date- Query for items inserted before this datebefore- Get items with ID’s before this valueafter- Get items with ID’s after this valueids- Get items with a list of idsfirst- Gets the first n itemslast- Gets the last n itemssearch- Warning: This requires schemas using this to have a&by_search(query, val)function