From 1853e16bc9406399bcd979a766d4b48b3fc50a38 Mon Sep 17 00:00:00 2001 From: Sergey Romanov Date: Fri, 15 May 2015 22:30:06 +0500 Subject: [PATCH] Append queue --- context.go | 20 ++++++++++++++++++++ context_test.go | 10 ++++++++++ 2 files changed, 30 insertions(+) diff --git a/context.go b/context.go index fdca9e3e..cfd7850c 100644 --- a/context.go +++ b/context.go @@ -69,6 +69,7 @@ type Context struct { Engine *Engine Keys map[string]interface{} + Queue []interface{} Errors errorMsgs Accepted []string } @@ -271,6 +272,25 @@ func (c *Context) Value(key interface{}) interface{} { return c.Context.Value(key) } +//Enqueue new item +func (c *Context) Enqueue(item interface{}) { + if c.Queue == nil { + c.Queue = []interface{}{} + } + c.Queue = append(c.Queue, item) +} + +//Dequeue returns the value from top of the queue +func (c *Context) Dequeue () (interface{}, error) { + size := len(c.Queue) + if c.Queue == nil || size == 0 { + return nil, errors.New("Queue is empty") + } + result := c.Queue[size-1] + c.Queue = c.Queue[0:size-1] + return result, nil +} + /************************************/ /********* PARSING REQUEST **********/ /************************************/ diff --git a/context_test.go b/context_test.go index 3c8a87ff..63dc2869 100644 --- a/context_test.go +++ b/context_test.go @@ -91,6 +91,16 @@ func TestContextSetGetValues(t *testing.T) { } +func TestContextQueue(t *testing.T) { + c, _, _ := createTestContext() + c.Enqueue("value") + c.Enqueue("data") + v, _ := c.Dequeue() + assert.Exactly(t, v, "data") + v2, _ := c.Dequeue() + assert.Exactly(t, v2, "value") +} + func TestContextCopy(t *testing.T) { c, _, _ := createTestContext() c.index = 2