Current section
Files
Jump to
Current section
Files
lib/adapters/mongo.ex
defmodule Molasses.StorageAdapter.MongoDB do
@moduledoc """
Storage Adapter for mongodb for use in molasses
"""
alias Molasses.Util
def get(client, key) do
cursor = Mongo.find(client, "feature_toggles", %{name: key})
case Enum.at(cursor,0) do
0 -> nil
result -> result
end
end
def set(client, key, value) do
Mongo.update_one!(client,
"feature_toggles",
%{"name": key},
%{"$set": Map.merge(value, %{name: key})}, [upsert: true]
)
end
def remove(client, key) do
Mongo.delete_one(client, "feature_toggles", %{"name": key})
end
def activate(client, key) do
set(client, key, %{
name: key,
percentage: 100,
active: true
})
end
def activate(client, key, percentage) when is_integer(percentage) do
set(client, key, %{
name: key,
percentage: percentage,
active: true
})
end
def activate(client, key, users) when is_list(users) do
activated_users = Enum.join(users,",")
set(client, key, %{
name: key,
percentage: 100,
active: true,
users: activated_users
})
end
def activate(client, key, group) do
set(client, key, %{
name: key,
percentage: 100,
active: true,
users: group
})
end
def deactivate(client, key) do
set(client, key, %{
name: key,
percentage: 0,
active: false,
users: ""
})
end
def get_feature(repo, key) do
case get(repo, key) do
nil -> {:error, "failure"}
%{"name"=> key, "active"=> active, "percentage"=> percentage, "users"=> users} ->
%{
name: key,
active: active,
percentage: percentage,
users: Util.convert_to_list(users),
}
%{"name"=> key, "active"=> active, "percentage"=> percentage} ->
%{
name: key,
active: active,
percentage: percentage,
users: [],
}
end
end
end