gifs/api

Paddy 2014-10-17 Parent:08ec88016e2f

6:eb450538f079 Go to Latest

gifs/api/context.go

Make UsageTracker an interface, ditch the channel interface. Stop using channels to track usage. Just call functions. Make UsageTracker an interface, so there can be multiple implementations, and create the in-memory implementation.

History
paddy@0 1 package api
paddy@0 2
paddy@0 3 import (
paddy@6 4 "errors"
paddy@6 5 "net/http"
paddy@6 6
paddy@6 7 "code.google.com/p/google-api-go-client/storage/v1"
paddy@6 8 "github.com/golang/oauth2/google"
paddy@6 9 )
paddy@6 10
paddy@6 11 var (
paddy@6 12 ErrNoBucketSet = errors.New("no bucket set")
paddy@6 13 ErrNoTmpBucketSet = errors.New("no temporary bucket set")
paddy@0 14 )
paddy@0 15
paddy@0 16 type Context struct {
paddy@0 17 Storage Storage
paddy@0 18 Datastore Datastore
paddy@6 19 UsageTracker UsageTracker
paddy@6 20 TmpBucket string
paddy@0 21 Bucket string
paddy@0 22 RootDomain string
paddy@0 23 }
paddy@0 24
paddy@6 25 func (c Context) Validate() error {
paddy@6 26 if c.Bucket == "" {
paddy@6 27 return ErrNoBucketSet
paddy@6 28 }
paddy@6 29 if c.TmpBucket == "" {
paddy@6 30 return ErrNoTmpBucketSet
paddy@6 31 }
paddy@6 32 return nil
paddy@0 33 }
paddy@0 34
paddy@0 35 func NewMemDatastore() Datastore {
paddy@0 36 return &Memstore{
paddy@0 37 collections: map[string]Collection{},
paddy@0 38 domains: map[string]Domain{},
paddy@0 39 items: map[string]Item{},
paddy@0 40 }
paddy@0 41 }
paddy@0 42
paddy@6 43 func NewGCSServiceStorage() (*GoogleCloudStorage, error) {
paddy@6 44 config := google.NewComputeEngineConfig("")
paddy@6 45 client := http.Client{Transport: config.NewTransport()}
paddy@6 46 gcsService, err := storage.New(&client)
paddy@0 47 if err != nil {
paddy@0 48 return nil, err
paddy@0 49 }
paddy@0 50 return &GoogleCloudStorage{gcsService}, nil
paddy@0 51 }