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