feat(store): expose workspace state directory config
Co-Authored-By: Virgil <virgil@lethean.io>
This commit is contained in:
parent
dfbdace985
commit
06f6229eaf
3 changed files with 47 additions and 1 deletions
2
doc.go
2
doc.go
|
|
@ -10,6 +10,8 @@
|
|||
// journal, and purge interval are already known. Prefer the struct literal
|
||||
// over `store.New(..., store.WithJournal(...))` when the full configuration is
|
||||
// already available, because it reads as data rather than a chain of steps.
|
||||
// Use `store.WithWorkspaceStateDirectory("/tmp/core-state")` when the
|
||||
// workspace path is assembled incrementally rather than declared up front.
|
||||
//
|
||||
// Usage example:
|
||||
//
|
||||
|
|
|
|||
20
store.go
20
store.go
|
|
@ -169,6 +169,16 @@ func WithJournal(endpointURL, organisation, bucketName string) StoreOption {
|
|||
}
|
||||
}
|
||||
|
||||
// Usage example: `storeInstance, err := store.New(":memory:", store.WithWorkspaceStateDirectory("/tmp/core-state"))`
|
||||
func WithWorkspaceStateDirectory(directory string) StoreOption {
|
||||
return func(storeConfig *StoreConfig) {
|
||||
if storeConfig == nil {
|
||||
return
|
||||
}
|
||||
storeConfig.WorkspaceStateDirectory = directory
|
||||
}
|
||||
}
|
||||
|
||||
// Usage example: `config := storeInstance.JournalConfiguration(); fmt.Println(config.EndpointURL, config.Organisation, config.BucketName)`
|
||||
func (storeInstance *Store) JournalConfiguration() JournalConfiguration {
|
||||
if storeInstance == nil {
|
||||
|
|
@ -194,7 +204,7 @@ func (storeInstance *Store) Config() StoreConfig {
|
|||
DatabasePath: storeInstance.databasePath,
|
||||
Journal: storeInstance.JournalConfiguration(),
|
||||
PurgeInterval: storeInstance.purgeInterval,
|
||||
WorkspaceStateDirectory: storeInstance.workspaceStateDirectoryPath(),
|
||||
WorkspaceStateDirectory: storeInstance.WorkspaceStateDirectory(),
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -206,6 +216,14 @@ func (storeInstance *Store) DatabasePath() string {
|
|||
return storeInstance.databasePath
|
||||
}
|
||||
|
||||
// Usage example: `stateDirectory := storeInstance.WorkspaceStateDirectory(); fmt.Println(stateDirectory)`
|
||||
func (storeInstance *Store) WorkspaceStateDirectory() string {
|
||||
if storeInstance == nil {
|
||||
return normaliseWorkspaceStateDirectory(defaultWorkspaceStateDirectory)
|
||||
}
|
||||
return storeInstance.workspaceStateDirectoryPath()
|
||||
}
|
||||
|
||||
// Usage example: `if storeInstance.IsClosed() { return }`
|
||||
func (storeInstance *Store) IsClosed() bool {
|
||||
if storeInstance == nil {
|
||||
|
|
|
|||
|
|
@ -108,6 +108,23 @@ func TestStore_New_Good_WithJournalOption(t *testing.T) {
|
|||
assert.Equal(t, "http://127.0.0.1:8086", storeInstance.journalConfiguration.EndpointURL)
|
||||
}
|
||||
|
||||
func TestStore_New_Good_WithWorkspaceStateDirectoryOption(t *testing.T) {
|
||||
workspaceStateDirectory := testPath(t, "workspace-state-option")
|
||||
|
||||
storeInstance, err := New(":memory:", WithWorkspaceStateDirectory(workspaceStateDirectory))
|
||||
require.NoError(t, err)
|
||||
defer storeInstance.Close()
|
||||
|
||||
assert.Equal(t, workspaceStateDirectory, storeInstance.WorkspaceStateDirectory())
|
||||
|
||||
workspace, err := storeInstance.NewWorkspace("scroll-session")
|
||||
require.NoError(t, err)
|
||||
defer workspace.Discard()
|
||||
|
||||
assert.Equal(t, workspaceFilePath(workspaceStateDirectory, "scroll-session"), workspace.DatabasePath())
|
||||
assert.True(t, testFilesystem().Exists(workspace.DatabasePath()))
|
||||
}
|
||||
|
||||
func TestStore_NewConfigured_Good_WorkspaceStateDirectory(t *testing.T) {
|
||||
workspaceStateDirectory := testPath(t, "workspace-state")
|
||||
|
||||
|
|
@ -128,6 +145,15 @@ func TestStore_NewConfigured_Good_WorkspaceStateDirectory(t *testing.T) {
|
|||
assert.True(t, testFilesystem().Exists(workspace.DatabasePath()))
|
||||
}
|
||||
|
||||
func TestStore_WorkspaceStateDirectory_Good_Default(t *testing.T) {
|
||||
storeInstance, err := New(":memory:")
|
||||
require.NoError(t, err)
|
||||
defer storeInstance.Close()
|
||||
|
||||
assert.Equal(t, normaliseWorkspaceStateDirectory(defaultWorkspaceStateDirectory), storeInstance.WorkspaceStateDirectory())
|
||||
assert.Equal(t, storeInstance.WorkspaceStateDirectory(), storeInstance.Config().WorkspaceStateDirectory)
|
||||
}
|
||||
|
||||
func TestStore_JournalConfiguration_Good(t *testing.T) {
|
||||
storeInstance, err := New(":memory:", WithJournal("http://127.0.0.1:8086", "core", "events"))
|
||||
require.NoError(t, err)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue