Rummage.Ecto and Rummage.Phoenix provide ways to perform Searching, Sorting and Pagination over Ecto queries and Phoenix collections.
For more details visit this blog
Here’s a little demo:
Rummage.Ecto and Rummage.Phoenix provide ways to perform Searching, Sorting and Pagination over Ecto queries and Phoenix collections.
For more details visit this blog
Here’s a little demo:
Hi everyone!
I wrote a library which provides ways to perform Searching, Sorting and Pagination over Ecto
queries and Phoenix
collections: Rummage
. Rummage
has been split into two libraries: Rummage.Ecto
and Rummage.Phoenix
.
Rummage
is a Ransack
-like library, which is designed in the Elixir way. Which means no defining functions on the models, transparency and configurability!
Rummage
comes with a lot of powerful features which are available right away, without writing a bunch of code. Here are a few blogs that talk about how to use Rummage
in a Phoenix
or an Ecto
application:
Rummage
demo & basicsRummage.Ecto
Rummage.Phoenix
(Rummage.Ecto
with HTML
)Let me know if you have any thoughts on Rummage!
Thank you!
Here’s a little demo:
Very interesting! I agree with the implementation problems with offset, however I question the cost of adding it to Rummage.Ecto
vs the benefits it will provide. However, it would be fun to implement a custom hook for that. This is precisely why I made Rummage.Ecto
configurable, which means you can write a simple pagination hook to do what you’re saying, while using its Search and Sort hooks with all the HTML support.
This looks like a great project - it has several issues, though (I’m speaking only about the ecto part - haven’t looked at others yet).
It injects a lot of code and functions inside __using__/1
- it is considered a bad practice. This leads to multiple issues - including slower compilation and inferior debugging experience.
It also couples schema to the repo module, which is something ecto actively avoids.
As an alternative, I could easily imagine a pure function-based interface, for example:
Rummage.Ecto.paginate(query, MyApp.Repo)
# instead of
MySchema.rummage(query)
The schema can be easily extracted from the query:
query = Ecto.Queryable.to_query(query)
{_source, schema} = query.from
One thing to note, though is that the schema can be nil
, since it’s not required, but I also don’t see really a reason why it would be needed.
That’s a great suggestion! It will be great to not have a lot of code in __using__/1
. I guess I have some work to do over this week. Thanks for your input!
Are you still working on an API that avoids hardcoding the Repo in the config? I’d like to use Rummage in an admin framework for Phoenix, but being limited to a single repo which one must specify in the config is a big NO…
Does Rummage.Phoenix support phoenix 1.3?
Doesn’t look like it supports Phoenix 1.3 (or 1.4):
https://github.com/annkissam/rummage_phoenix/issues/68
I am new to Elixir Phoenix, I tried to implement Rummage.ecto but failed to make it work in Phoenix v1.6. Is there an available demo of this library that runs in Phoenix v1.6?