Merge pull request #8 from saromanov/new-options

Add options for New
This commit is contained in:
Steve Domino 2015-11-23 10:13:03 -07:00
commit 77da6bf6a4
2 changed files with 32 additions and 7 deletions

View File

@ -35,34 +35,51 @@ type (
}
)
// Options uses for specification of working golang-scribble
type Options struct {
Logger
// ExistDir not creates new directory before start
ExistDir bool
}
// New creates a new scribble database at the desired directory location, and
// returns a *Driver to then use for interacting with the database
func New(dir string, logger Logger) (driver *Driver, err error) {
func New(dir string, opt *Options) (driver *Driver, err error) {
var options Options
if opt == nil {
options = Options{}
} else {
options = *opt
}
//
dir = filepath.Clean(dir)
// ensure the database location doesn't already exist (we don't want to overwrite
// any existing files/database)
if _, err := os.Stat(dir); err == nil {
_, err = os.Stat(dir)
if err == nil && !options.ExistDir {
fmt.Printf("Unable to create database, '%s' already exists. Please specify a different location.\n", dir)
os.Exit(1)
}
//
if logger == nil {
logger = lumber.NewConsoleLogger(lumber.INFO)
if options.Logger == nil {
options.Logger = lumber.NewConsoleLogger(lumber.INFO)
}
//
driver = &Driver{
dir: dir,
mutexes: make(map[string]sync.Mutex),
log: logger,
log: options.Logger,
}
logger.Info("Creating scribble database at '%v'...\n", dir)
options.Logger.Info("Creating scribble database at '%v'...\n", dir)
//
if options.ExistDir && err == nil {
return driver, nil
}
// create database
return driver, os.MkdirAll(dir, 0755)
}

View File

@ -48,6 +48,14 @@ func TestNew(t *testing.T) {
}
}
// Checking opening exist dir
func TestNewExist(t *testing.T) {
var err error
if db, err = New(database, &Options{ExistDir: true}); err != nil {
panic(err)
}
}
//
func TestWriteAndRead(t *testing.T) {