Skip to content

Commit d50a81b

Browse files
author
Adrien Moreau
committed
0.1.0
1 parent ec2f887 commit d50a81b

File tree

4 files changed

+101
-6
lines changed

4 files changed

+101
-6
lines changed

README.md

+78
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,81 @@
11
# buffer
22
Provide read and write buffers for Elixir
33

4+
[![Hex.pm](https://img.shields.io/hexpm/v/buffer.svg?style=flat-square)](https://hex.pm/packages/buffer)
5+
6+
## Description
7+
8+
buffer is a library to create read or write buffer easily.
9+
10+
## Usage
11+
12+
### Write Buffer for KeyList
13+
14+
```elixir
15+
## Declaration of the buffer
16+
defmodule BufferKeyListLimit do
17+
use Buffer.Write.KeyList
18+
buffer interval: 1000, limit: 10, write: &write/1
19+
def write(keylists) do
20+
## Write here your flushing function
21+
end
22+
end
23+
24+
## Usage
25+
BufferKeyListLimit.add(:key1, "value1")
26+
BufferKeyListLimit.add(:key1, "value2")
27+
BufferKeyListLimit.add(:key2, "value3")
28+
29+
## The write function will receive this value
30+
[{:key1, ["value1", "value2"]}, {:key2, ["value3"]}]
31+
32+
## API
33+
BufferKeyListLimit.sync()
34+
BufferKeyListLimit.sync(:key1)
35+
```
36+
37+
### Write Buffer for Counters
38+
39+
```elixir
40+
## Declaration of the buffer
41+
defmodule BufferCount do
42+
use Buffer.Write.Count
43+
buffer interval: 1000, write: &write/1
44+
def write(counters) do
45+
## Write here your flushing function
46+
end
47+
end
48+
49+
## Usage
50+
BufferCount.incr(:key1)
51+
BufferCount.incr(:key1)
52+
BufferCount.incr(:key2, 10)
53+
BufferCount.incr(:key2, 15)
54+
55+
## The write function will receive this value
56+
[{:key1, 2}, {:key2, 25}]
57+
58+
## API
59+
BufferCount.sync()
60+
```
61+
62+
### Read Buffer
63+
64+
```elixir
65+
## Declaration of the buffer
66+
defmodule BufferRead do
67+
use Buffer.Read
68+
buffer interval: 1000, read: &read/0
69+
def read() do
70+
## Write here your reading function
71+
[{:key1, "value1"}, {:key2, "value2"}]
72+
end
73+
end
74+
75+
## Usage
76+
"value" = BufferRead.read(:key1)
77+
78+
## API
79+
BufferRead.sync()
80+
81+
```

VERSION

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
0.1.0

mix.exs

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
defmodule Buffer.Mixfile do
22
use Mix.Project
33

4+
@version File.read!("VERSION") |> String.strip
5+
46
def project do
57
[
68
app: :buffer,
7-
version: "0.0.1",
9+
version: @version,
810
elixir: "~> 1.2",
911
build_embedded: Mix.env == :prod,
1012
start_permanent: Mix.env == :prod,

test/buffer_test.exs

+19-5
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ defmodule BufferTest do
1111
{:ok, []}
1212
end
1313

14-
test "0000# KeyList, Limit + Sync" do
14+
test "0000# Write, KeyList, Limit + Sync" do
1515
for x <- 1..4, do: BufferKeyListLimit.add(1, x)
1616
for x <- 1..25, do: BufferKeyListLimit.add(2, x)
1717

@@ -27,7 +27,7 @@ defmodule BufferTest do
2727
assert(result == [{1,Enum.map(1..4, &(&1))}, {2,Enum.map(21..25, &(&1))}])
2828
end
2929

30-
test "0001# KeyList, Interval" do
30+
test "0001# Write, KeyList, Interval" do
3131
1..4 |> Enum.map(&(BufferKeyListInterval.add(1, &1)))
3232

3333
result = BufferKeyListResult.dump_table()
@@ -39,15 +39,20 @@ defmodule BufferTest do
3939
assert([{_, [{1, [1, 2, 3, 4]}]}] = result)
4040
end
4141

42-
test "0010# Count, Sync" do
43-
for x <- 1..100, do: BufferCount.incr(:key1)
42+
test "0010# Read, Count, Sync" do
43+
for _ <- 1..100, do: BufferCount.incr(:key1)
4444
for x <- 1..100, do: BufferCount.incr(:key2, x)
4545

4646
BufferCount.sync()
4747

4848
result = BufferKeyListResult.dump_table()
4949
assert([{_, [key2: 5050, key1: 100]}] = result)
5050
end
51+
52+
test "0100# Read, Read" do
53+
BufferRead.sync()
54+
assert(BufferRead.read(:key1) == "value1")
55+
end
5156
end
5257

5358
defmodule TestSupervisor do
@@ -61,7 +66,8 @@ defmodule TestSupervisor do
6166
BufferKeyListResult.worker,
6267
BufferKeyListLimit.worker,
6368
BufferKeyListInterval.worker,
64-
BufferCount.worker
69+
BufferCount.worker,
70+
BufferRead.worker
6571
]
6672
supervise(children, strategy: :one_for_one, max_restarts: 1, max_seconds: 1)
6773
end
@@ -96,3 +102,11 @@ defmodule BufferCount do
96102
BufferKeyListResult.add(__MODULE__, counters)
97103
end
98104
end
105+
106+
defmodule BufferRead do
107+
use Buffer.Read
108+
buffer interval: 1000, read: &read/0
109+
def read() do
110+
[{:key1, "value1"}, {:key2, "value2"}]
111+
end
112+
end

0 commit comments

Comments
 (0)