Skip to content

Commit

Permalink
add create_performer function. release 0.5.0
Browse files Browse the repository at this point in the history
  • Loading branch information
elielhaouzi committed Jul 10, 2020
1 parent 1ec2af3 commit f5e4d3f
Show file tree
Hide file tree
Showing 7 changed files with 31 additions and 4 deletions.
9 changes: 8 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ Annacl is published on [Hex](https://hex.pm/packages/annacl). The package can be
```elixir
def deps do
[
{:annacl, "~> 0.4.1"}
{:annacl, "~> 0.5.0"}
]
end
```
Expand Down Expand Up @@ -82,7 +82,14 @@ end
Annacl.grant_permission_to_role(user_role, posts_list)
Annacl.grant_permission_to_role(user_role, posts_read)

# Create a performer for each user
performer = Annacl.create_performer()

my_user
|> Ecto.Changeset.change(%{performer_id: performer.id})
|> Repo.update!()

# How to assign role to users
superadmin = MyApp.Accounts.assign_role!(%MyApp.Accounts.User{performer_id: "00000000-0000-0000-0000-000000000000"}, "superadmin")

user = MyApp.Accounts.assign_role!(%MyApp.Accounts.User{performer_id: "00000000-0000-0000-0000-000000000001"}, "user")
Expand Down
5 changes: 4 additions & 1 deletion lib/annacl.ex
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ defmodule Annacl do
alias Annacl.Permissions.Permission
alias Annacl.PermissionsRoles.PermissionRole
alias Annacl.Performers
alias Annacl.Performers.{PerformerRole, PerformerPermission}
alias Annacl.Performers.{Performer, PerformerRole, PerformerPermission}

defmacro __using__(_opts) do
quote do
Expand Down Expand Up @@ -85,6 +85,9 @@ defmodule Annacl do
@spec role_can?(Role.t(), Permission.t()) :: boolean
defdelegate role_can?(role, permission), to: Roles, as: :can?

@spec create_performer :: {:ok, Performer.t()} | {:error, Ecto.Changeset.t()}
defdelegate create_performer, to: Performers

@spec assign_role!(%{performer_id: binary()}, binary()) ::
{:ok, PerformerRole.t()} | {:error, Ecto.Changeset.t()}
def assign_role!(%{performer_id: performer_id}, role_name) do
Expand Down
3 changes: 3 additions & 0 deletions lib/annacl/behaviours/role_and_permission.ex
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ defmodule Annacl.Behaviour.RoleAndPermission do
alias Annacl.Roles.Role
alias Annacl.Permissions.Permission
alias Annacl.PermissionsRoles.PermissionRole
alias Annacl.Performers.Performer

@callback create_permission(binary()) :: {:ok, Permission.t()} | {:error, Ecto.Changeset.t()}
@callback get_permission!(binary()) :: Permission.t()
Expand All @@ -18,4 +19,6 @@ defmodule Annacl.Behaviour.RoleAndPermission do
@callback revoke_permission_from_role(Role.t(), Permission.t()) ::
{:ok, PermissionRole.t()} | {:error, Ecto.Changeset.t()}
@callback role_can?(Role.t(), Permission.t()) :: boolean

@callback create_performer() :: {:ok, Performer.t()} | {:error, Ecto.Changeset.t()}
end
7 changes: 7 additions & 0 deletions lib/annacl/performers/performers.ex
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,13 @@ defmodule Annacl.Performers do
|> repo().get!(id)
end

@spec create_performer() :: {:ok, Performer.t()} | {:error, Ecto.Changeset.t()}
def create_performer() do
%Performer{}
|> Ecto.Changeset.change(%{})
|> repo().insert()
end

@spec assign_role(Performer.t(), Role.t() | [Role.t()]) ::
{:ok, PerformerRole.t() | [PerformerRole.t()]} | {:error, Ecto.Changeset.t()}
def assign_role(%Performer{} = performer, %Role{} = role) do
Expand Down
2 changes: 1 addition & 1 deletion mix.exs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ defmodule Annacl.MixProject do
def project do
[
app: :annacl,
version: "0.4.1",
version: "0.5.0",
elixir: "~> 1.8",
start_permanent: Mix.env() == :prod,
description: description(),
Expand Down
6 changes: 6 additions & 0 deletions test/annacl/performers/performers_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,12 @@ defmodule Annacl.PerformersTest do
1 => "00000000-0000-0000-0000-000000000001"
}

describe "create_performer/0" do
test "creates the performer" do
assert {:ok, %Performer{}} = Performers.create_performer()
end
end

describe "get_performer!/1" do
test "when the performer does not exist, raise an Ecto.NoResultsError" do
assert_raise Ecto.NoResultsError, fn ->
Expand Down
3 changes: 2 additions & 1 deletion test/annacl/permissions/permissions_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,8 @@ defmodule Annacl.PermissionsTest do
test "when data is valid, creates the api_key" do
permission_params = params_for(:permission)

assert {:ok, %Permission{} = api_key} = Permissions.create_permission(permission_params)
assert {:ok, %Permission{} = permission} = Permissions.create_permission(permission_params)
assert permission.name == permission_params.name
end
end

Expand Down

0 comments on commit f5e4d3f

Please sign in to comment.