Ecto.Rut

Provides simple, sane and terse shortcuts for Ecto models.

Ecto.Rut is a wrapper around Ecto.Repo methods that usually require you to pass the module as the subject and sometimes even require you do extra work before hand, (as in the case of Repo.insert/3) to perform operations on your database. Ecto.Rut tries to reduce code repetition by following the “Convention over Configuration” ideology.

Installation

Add :ecto_rut as a dependency in your mix.exs file:

defp deps do
  [{:ecto_rut, "~> 1.0.2"}]
end

and run:

$ mix deps.get

Phoenix Projects

If you have an app built in Phoenix Framework, just add use Ecto.Rut in the models method in web/web.ex:

# web/web.ex

def model do
  quote do
    use Ecto.Schema
    use Ecto.Rut

    # Other stuff...
  end
end

That’s it! Ecto.Rut will automatically be loaded in all of your models. You can now relax!

Other Ecto Projects

If you’re not using Phoenix or you don’t want to use Ecto.Rut with all of your models (why wouldn’t you!?), you’ll have to manually add use Ecto.Rut:

defmodule YourApp.Post do
  use Ecto.Schema
  use Ecto.Rut

  # Schema, Changeset and other stuff...
end

Basic Usage

You can call normal Ecto.Repo methods directly on the Models:

Post.all
# instead of YourApp.Repo.all(Post)

Post.get(2)
# instead of YourApp.Repo.get(Post, 2)

Post.insert(title: "Awesome Post", slug: "awesome-post", category_id: 3)
# instead of:
# changeset = Post.changeset(%Post{}, %{title: "Awesome Post", slug: "awesome-post", category_id: 3})
# YourApp.Repo.insert(changeset)

Method Coverage

Ecto.Repo MethodsEcto.Rut MethodsAdditional Notes
Repo.aggregate
Repo.allModel.all
Repo.config
Repo.deleteModel.delete
Repo.delete!Model.delete!
Repo.delete_all
Repo.getModel.get
Repo.get!Model.get!
Repo.get_byModel.get_by
Repo.get_by!Model.get_by!
Repo.in_transaction?
Repo.insertModel.insertAccepts both Ecto changesets and Keyword lists
Repo.insert!Model.insert!Accepts both Ecto changesets and Keyword lists
Repo.insert_all
Repo.insert_or_update
Repo.insert_or_update!
Repo.one
Repo.one!
Repo.preload
Repo.query
Repo.query!
Repo.rollback
Repo.start_link
Repo.stop
Repo.transaction
Repo.update
Repo.update!
Repo.update_all

Roadmap

  • [ ] Write Tests
  • [ ] Write Documentation
  • [ ] Cover all main Ecto.Repo methods
  • [ ] Allow explicitly passing Application and Repo modules to the use Ecto.Rut statement
  • [ ] Introduce new wrapper methods that accept direct arguments (Such as Post.delete_by_id(3))

Contributing

  • Fork, Enhance, Send PR
  • Lock issues with any bugs or feature requests
  • Implement something from Roadmap
  • Spread the word

License

This package is available as open source under the terms of the MIT License.