bucketier v0.1.4 Bucketier.Bucket

The Bucket is an Agent holding the state of a Map as its content. Buckets are started automatically if not found in the Registry.

The DynamicSupervisor named Bucketier.BucketSupervisor, started in Bucketier.Application, starts new Buckets and supervises them.

Link to this section Summary

Functions

Find a bucket with the given pid or name and return its state. A new name will instantiate a new Bucketier.Bucket and returns an empty state

Returns a specification to start this module under a supervisor

Commit the state of the bucket, thus the next request to bucket/1 will return this state

Drop an entry from a bucket’s data-struct

Drops all buckets! This function is used mainly from tests but there maybe some use-cases where you want to get rid of all data

Get an entry back from the bucket

Get all keys in a bucket

Put a new key/value-pair into a bucket-struct

start_link is called by the Bucketier.BucketSupervisor through

Update data set of a given entity

Get all values from a bucket

Link to this section Types

Link to this type t()
t() :: %Bucketier.Bucket{data: any(), name: String.t()}

Link to this section Functions

Link to this function bucket(pid_or_name)
bucket(String.t() | pid()) :: any()

Find a bucket with the given pid or name and return its state. A new name will instantiate a new Bucketier.Bucket and returns an empty state.

Examples:

iex> Bucketier.Bucket.bucket(:shopping_list)
%Bucketier.Bucket{ name: :shopping_list, data: %{} }

If you pass a pid instead of name the function will return the state of this bucket. If a Bucket with this pid does not exists, the function will return {:error, :bucket_not_alive}

Examples:

iex> Bucketier.Bucket.bucket(:shopping_list)
iex> [{pid,_}] = Registry.lookup(Bucketier.Registry, :shopping_list)
iex> Bucketier.Bucket.bucket(pid)
%Bucketier.Bucket{ name: :shopping_list, data: %{} }


iex> Bucketier.Bucket.bucket(:shopping_list)
iex> [{pid,_}] = Registry.lookup(Bucketier.Registry, :shopping_list)
iex> Agent.stop(pid,:shutdown)
iex> Bucketier.Bucket.bucket(pid)
{ :error, :bucket_not_alive }
Link to this function child_spec(arg)

Returns a specification to start this module under a supervisor.

See Supervisor.

Commit the state of the bucket, thus the next request to bucket/1 will return this state.

Example:

iex> %Bucketier.Bucket{ name: "B1", data: %{} }
iex> |> Bucketier.Bucket.put( :some_key, "some value" )
iex> |> Bucketier.Bucket.commit
iex> Bucketier.Bucket.bucket("B1")
%Bucketier.Bucket{ name: "B1", data: %{ some_key: "some value" } }
Link to this function drop!(bucket, key)
drop!(any(), Engine.Types.uuid()) :: any()

Drop an entry from a bucket’s data-struct.

Note: This updates the struct im memory only. No Bucket on the server will actually be uptdated! If you want your changes to be persistent, please see: commit/1.

Example:

iex> %Bucketier.Bucket{ name: "B1", data: %{ s1: "One", s2: "Two"} }
iex> |> Bucketier.Bucket.drop!(:s1)
%Bucketier.Bucket{data: %{s2: "Two"}, name: "B1"}

Drops all buckets! This function is used mainly from tests but there maybe some use-cases where you want to get rid of all data.

Link to this function get(bucket_name, key)

Get an entry back from the bucket.

Examples:

iex> Bucketier.Bucket.bucket("my list")
iex> |> Bucketier.Bucket.put( 1, "One" )
iex> |> Bucketier.Bucket.put( 2, "Two" )
iex> |> Bucketier.Bucket.put( 3, "Three" )
iex> |> Bucketier.Bucket.commit
iex> Bucketier.Bucket.get("my list", 2)
"Two"

iex> Bucketier.Bucket.bucket("my list")
iex> |> Bucketier.Bucket.put( 1, "One" )
iex> |> Bucketier.Bucket.put( 2, "Two" )
iex> |> Bucketier.Bucket.put( 3, "Three" )
iex> |> Bucketier.Bucket.commit
iex> Bucketier.Bucket.get("unknown bucket", :unknown_key)
{:error, :bucket_not_found}


iex> Bucketier.Bucket.bucket("my list")
iex> |> Bucketier.Bucket.put( 1, "One" )
iex> |> Bucketier.Bucket.put( 2, "Two" )
iex> |> Bucketier.Bucket.put( 3, "Three" )
iex> |> Bucketier.Bucket.commit
iex> Bucketier.Bucket.get("my list", :unknown_key)
{:error, :key_not_found}
Link to this function keys(bucket_name)

Get all keys in a bucket.

Example:

iex> Bucketier.Bucket.bucket("my list")
iex> |> Bucketier.Bucket.put( 1, "One" )
iex> |> Bucketier.Bucket.put( 2, "Two" )
iex> |> Bucketier.Bucket.put( 3, "Three" )
iex> |> Bucketier.Bucket.commit
iex> Bucketier.Bucket.keys("my list")
[1,2,3]

iex> Bucketier.Bucket.keys("not here")
{:error, :bucket_not_found}

iex> Bucketier.Bucket.bucket("empty list")
iex> Bucketier.Bucket.values("empty list")
[]
Link to this function put(bucket, key, value)

Put a new key/value-pair into a bucket-struct.

Note: This updates the struct im memory only. No Bucket on the server will actually be uptdated! If you want your changes to be persistent, please see: commit/1.

Example:

iex> %Bucketier.Bucket{ name: "B1", data: %{} }
iex> |> Bucketier.Bucket.put( :some_key, "some value" )
%Bucketier.Bucket{ name: "B1", data: %{ some_key: "some value" } }

iex> %Bucketier.Bucket{ name: "B1", data: %{} }
iex> |> Bucketier.Bucket.put( :some_key, "some value" )
iex> |> Bucketier.Bucket.commit
iex> Bucketier.Bucket.bucket("B1")
iex> |> Bucketier.Bucket.put( :some_key, "some updated value" )
iex> |> Bucketier.Bucket.commit
iex> Bucketier.Bucket.bucket("B1")
%Bucketier.Bucket{
        data: %{some_key: "some updated value"},
        name: "B1"
      }
Link to this function start_link(name)

start_link is called by the Bucketier.BucketSupervisor through

DynamicSupervisor.start_child(Bucketier.BucketSupervisor, {Bucketier.Bucket, name})

You don’t have to call this start_link on your own. Bucketier.Bucket.bucket/1 will initiate the start of the new Bucket as a child of the supervisor.

Link to this function update(bucket, uuid, field, data)

Update data set of a given entity

Example:

iex> Bucketier.Bucket.bucket("my list")
iex> |> Bucketier.Bucket.put( 1, %{ value: "one"} )
iex> |> Bucketier.Bucket.commit()
iex> Bucketier.Bucket.bucket("my list")
iex> |> Bucketier.Bucket.update( 1, :additional_value, "one.one" )
iex> |> Bucketier.Bucket.commit()
iex> Bucketier.Bucket.bucket("my list")
%Bucketier.Bucket{
  data: %{1 => %{additional_value: "one.one", value: "one"}},
  name: "my list"
}
Link to this function values(bucket_name)

Get all values from a bucket.

Example:

iex> Bucketier.Bucket.bucket("my list")
iex> |> Bucketier.Bucket.put( 1, "One" )
iex> |> Bucketier.Bucket.put( 2, "Two" )
iex> |> Bucketier.Bucket.put( 3, "Three" )
iex> |> Bucketier.Bucket.commit
iex> Bucketier.Bucket.values("my list")
["One", "Two", "Three"]

iex> Bucketier.Bucket.values("not here")
{:error, :bucket_not_found}

iex> Bucketier.Bucket.bucket("empty list")
iex> Bucketier.Bucket.values("empty list")
[]