rummage_ecto alternatives and similar packages
Based on the "Framework Components" category.
Alternatively, view rummage_ecto alternatives based on common mentions on social networks and blogs.
-
dayron
A repository `similar` to Ecto.Repo that maps to an underlying http client, sending requests to an external rest api instead of a database -
phoenix_token_auth
Token authentication solution for Phoenix. Useful for APIs for e.g. single page apps. -
rummage_phoenix
Full Phoenix Support for Rummage. It can be used for searching, sorting and paginating collections in phoenix. -
access pass
provides a full user authentication experience for an API. Includes login,logout,register,forgot password, forgot username, confirmation email and all that other good stuff. Includes plug for checking for authenticated users and macro for generating the required routes. -
Votex
Implements vote / like / follow functionality for Ecto models in Elixir. Inspired from Acts as Votable gem in Ruby on Rails -
plug_canonical_host
PlugCanonicalHost ensures that all requests are served by a single canonical host. -
trailing_format_plug
An elixir plug to support legacy APIs that use a rails-like trailing format: http://api.dev/resources.json -
phoenix_html_simplified_helpers
Some helpers for phoenix html( truncate, time_ago_in_words, number_with_delimiter, url_for, current_page? )
SaaSHub - Software Alternatives and Reviews
Do you think we are missing an alternative of rummage_ecto or a related project?
README
Rummage.Ecto
If you're looking for full Phoenix
support, Rummage.Phoenix
uses Rummage.Ecto
and adds HTML
and Controller
support
to it. You can check Rummage.Phoenix
out by clicking here
Please refer for [CHANGELOG](CHANGELOG.md) for version specific changes
Rummage.Ecto
is a light weight, but powerful framework that can be used to alter Ecto
queries with Search, Sort and Paginate operations.
It accomplishes the above operations by using Hooks
, which are modules that implement Rummage.Ecto.Hook
behavior.
Each operation: Search
, Sort
and Paginate
have their hooks defined in Rummage
. By doing this, Rummage
is completely
configurable.
For example, if you don't like one of the hooks of Rummage
, but you do like the other two, you can configure Rummage
to not use it and write your own custom
hook.
NOTE: Rummage
is not like Ransack
, and it doesn't intend to be like Ransack
. It doesn't define functions based on search parameters.
If you'd like to have something like that, you can always configure Rummage
to use your Search
module for that model. This
is why Rummage has been made configurable.
To see an example usage of rummage
, check this repository.
Installation
This package is available in Hex, and can be installed as:
Add
rummage_ecto
to your list of dependencies inmix.exs
:def deps do [{:rummage_ecto, "~> 2.0.0-rc.0"}] end
Blogs
Current Blogs:
Coming up next:
- Using Rummage.Phoenix: Part 2
- Using the Rummage Search hook
- Using the Rummage Sort hook
- Writing a Custom Rummage.Ecto Hook
- Writing a Custom Rummage.Phoenix HTML helper
Hooks
- Hooks are modules (that use
Rummage.Ecto.Hook
) and implement callbacks forRummage.Ecto.Hook
behaviour. Each ecto operation which can transform the query is defined by aHook
. Hooks haverun/2
function using which they can transform anEcto.Queryable
variable and haveformat_params/3
function using which they can transform params passed to them throughrummage_ecto
Configuration
- NOTE: This is Optional. If no configuration is provided,
Rummage
will use default hooks andAppName.Repo
as the repo If you want to override any of the
Rummage
default hooks, addrummage_ecto
config to your list of configs indev.exs
:config :rummage_ecto, Rummage.Ecto, search: MyApp.SearchModule
For configuring a repo:
config :rummage_ecto, Rummage.Ecto, repo: MyApp.Repo # This can be overridden per model basis, if need be.
Other config options are:
repo
,sort
,paginate
,per_page
Rummage.Ecto
can be configured globally with aper_page
value (which can be overridden for a model). If you want to set differentper_page
for different the models, add it tomodel.exs
file while usingRummage.Ecto
as shown in the Advanced Usage Section.
Usage
Rummage.Ecto
comes with a lot of powerful features which are available right away,
without writing a whole lot of code.
Below are the ways Rummage.Ecto
can be used:
Basic Usage:
- Add the
Repo
of your app and the desiredper_page
(if using Rummage's Pagination) to therummage_ecto
configuration inconfig.exs
:
config :rummage_ecto, Rummage.Ecto,
repo: MyApp.Repo,
per_page: 10
- And you should be able to use
Rummage.Ecto
with anyEcto
model.
Advanced Usage:
- If you'd like to override any of
Rummage
's default hooks with your custom hook, add theCustomHook
of your app with the desired operation to therummage_ecto
configuration inconfig.exs
:
config :rummage_ecto, Rummage.Ecto,
repo: MyApp.Repo,
search: MyApp.SearchModule,
paginate: MyApp.PaginateModule
- When using
Rummage.Ecto
with an app that has multipleRepo
s, or when there's a need to configureRepo
per model basis, it can be passed along with with the call toRummage.Ecto
. This overrides the default repo set in the configuration:
{queryable, rummage} = Product
|> Rummage.Ecto.rummage(rummage, repo: MyApp.Repo2)
- And you should be able to use
Rummage.Ecto
withProduct
model which is in a differentRepo
than the default one.
Examples
- Setting up the application above will allow us to do the following:
rummage = %{
search: %{field_1 => %{search_type: :like, search_term: "field_!"}},
sort: %{field: :field1, order: :asc},
paginate: %{per_page: 5, page: 1}
}
{queryable, rummage} = Product
|> Rummage.Ecto.rummage(rummage)
products = queryable
|> Product.another_operation # <-- Since `Rummage` is Ecto, we can pipe the result queryable into another queryable operation.
|> Repo.all
- Rummage responds to
params
with keys:search
,sort
and/orpaginate
. It doesn't need to have all the keys, or any keys for that matter. If invalid keys are passed, they won't alter any operations in rummage. Here's an example ofRummage
params:
rummage = %{
search: %{field_1 => %{search_type: :like, search_term: "field_!"}},
sort: %{field: :field1, order: :asc},
paginate: %{per_page: 5, page: 1}
}
*Note that all licence references and agreements mentioned in the rummage_ecto README section above
are relevant to that project's source code only.