add ListKeys method to Store

pull/6/head
Daniel Smith 2015-04-02 15:26:39 -07:00
parent 3fe17b93cf
commit 8ee9ee9920
2 changed files with 23 additions and 0 deletions

View File

@ -37,6 +37,7 @@ type Store interface {
Update(obj interface{}) error
Delete(obj interface{}) error
List() []interface{}
ListKeys() []string
Get(obj interface{}) (item interface{}, exists bool, err error)
GetByKey(key string) (item interface{}, exists bool, err error)
@ -195,6 +196,18 @@ func (c *cache) List() []interface{} {
return list
}
// ListKeys returns a list of all the keys of the objects currently
// in the cache.
func (c *cache) ListKeys() []string {
c.lock.RLock()
defer c.lock.RUnlock()
list := make([]string, 0, len(c.items))
for key := range c.items {
list = append(list, key)
}
return list
}
// Index returns a list of items that match on the index function
// Index is thread-safe so long as you treat all items as immutable
func (c *cache) Index(indexName string, obj interface{}) ([]interface{}, error) {

View File

@ -49,6 +49,7 @@ func (u *UndeltaStore) Add(obj interface{}) error {
u.PushFunc(u.ActualStore.List())
return nil
}
func (u *UndeltaStore) Update(obj interface{}) error {
if err := u.ActualStore.Update(obj); err != nil {
return err
@ -56,6 +57,7 @@ func (u *UndeltaStore) Update(obj interface{}) error {
u.PushFunc(u.ActualStore.List())
return nil
}
func (u *UndeltaStore) Delete(obj interface{}) error {
if err := u.ActualStore.Delete(obj); err != nil {
return err
@ -63,15 +65,23 @@ func (u *UndeltaStore) Delete(obj interface{}) error {
u.PushFunc(u.ActualStore.List())
return nil
}
func (u *UndeltaStore) List() []interface{} {
return u.ActualStore.List()
}
func (u *UndeltaStore) ListKeys() []string {
return u.ActualStore.ListKeys()
}
func (u *UndeltaStore) Get(obj interface{}) (item interface{}, exists bool, err error) {
return u.ActualStore.Get(obj)
}
func (u *UndeltaStore) GetByKey(key string) (item interface{}, exists bool, err error) {
return u.ActualStore.GetByKey(key)
}
func (u *UndeltaStore) Replace(list []interface{}) error {
if err := u.ActualStore.Replace(list); err != nil {
return err