/ecto_interface.ex

Creates a common set of interface APIs for Ecto Schemas

Primary LanguageElixirOtherNOASSERTION

EctoInterface

Creates a common set of interface APIs for ecto-based models. By including this functionality you can get a lot of free functionality, including (but not limited to):

  • list_.../0 returns all records for a schema
  • get_.../1 returns a singular record by it's primary key
  • create_.../1 inserts a new record into the database
  • random_.../ returns a random record for a schema

and many more.

All you need to do is use(EctoInterface) on your context modules:

defmodule Core.Users do
  use EctoInterface, source: Core.Users.Account, plural: :accounts, singular: :account
end

The first argument is the ecto Schema module, the second is the plural name for the record, and finally the singular.

Additionally if you have slugy installed you can use:

defmodule Core.Users do
  use EctoInterface, source: Core.Users.Account, plural: :accounts, singular: :account, slug: :username
end

which gives Core.Users.get_account_by_slug("kurtis-rainbolt-greene") (the slug is slugified on query so it doesn't need to be in slug form).

Also, we have a simple interface for tags:

defmodule Core.Users do
  use EctoInterface, source: Core.Users.Account, plural: :accounts, singular: :account, tagged: :tags
end

For useful functions like Core.Users.list_accounts_with_tags(["friendly", "sporty]).

Another interface is the PubSub interface:

defmodule Core.Users do
  use EctoInterface, source: Core.Users.Account, plural: :accounts, singular: :account, pubsub: true
end

For useful functions like Core.Users.broadcast_account_change(account) and Core.Users.subscribe_to_accounts().

Installation

If available in Hex, the package can be installed by adding ecto_interface to your list of dependencies in mix.exs:

def deps do
  [
    {:ecto_interface, "~> ..."}
  ]
end

And finally in your config/config.exs:

config :ecto_interface, default_repo: Core.Repo, default_pubsub: Core.PubSub

Documentation can be generated with ExDoc and published on HexDocs. Once published, the docs can be found at https://hexdocs.pm/ecto_interface.