Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
10
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Open sidebar
dms3
go-datastore
Commits
f318dc52
Commit
f318dc52
authored
Oct 18, 2014
by
Juan Batiz-Benet
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
linting
parent
60ebc564
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
47 additions
and
43 deletions
+47
-43
key.go
key.go
+47
-43
No files found.
key.go
View file @
f318dc52
package
datastore
import
(
"github.com/jbenet/datastore.go/Godeps/_workspace/src/code.google.com/p/go-uuid/uuid"
"path"
"strings"
"github.com/jbenet/datastore.go/Godeps/_workspace/src/code.google.com/p/go-uuid/uuid"
)
/*
...
...
@@ -30,37 +31,38 @@ type Key struct {
string
}
// NewKey constructs a key from string. it will clean the value.
func
NewKey
(
s
string
)
Key
{
k
:=
Key
{
s
}
k
.
Clean
()
return
k
}
// Clean
s
up a Key, using path.Clean.
// Clean up a Key, using path.Clean.
func
(
k
*
Key
)
Clean
()
{
k
.
string
=
path
.
Clean
(
"/"
+
k
.
string
)
}
//
Return
s the string value of Key
//
Strings i
s the string value of Key
func
(
k
Key
)
String
()
string
{
return
k
.
string
}
//
R
eturns the
bytes
value of Key
//
Bytes r
eturns the
string
value of Key
as a []byte
func
(
k
Key
)
Bytes
()
[]
byte
{
return
[]
byte
(
k
.
string
)
}
//
R
eturns the `list` representation of this Key.
// NewKey("/Comedy/MontyPython/Actor:JohnCleese").List()
// ["Comedy", "MontyPythong", "Actor:JohnCleese"]
//
List r
eturns the `list` representation of this Key.
//
NewKey("/Comedy/MontyPython/Actor:JohnCleese").List()
//
["Comedy", "MontyPythong", "Actor:JohnCleese"]
func
(
k
Key
)
List
()
[]
string
{
return
strings
.
Split
(
k
.
string
,
"/"
)[
1
:
]
}
// Returns the reverse of this Key.
// NewKey("/Comedy/MontyPython/Actor:JohnCleese").Reverse()
// NewKey("/Actor:JohnCleese/MontyPython/Comedy")
// Re
verse re
turns the reverse of this Key.
//
NewKey("/Comedy/MontyPython/Actor:JohnCleese").Reverse()
//
NewKey("/Actor:JohnCleese/MontyPython/Comedy")
func
(
k
Key
)
Reverse
()
Key
{
l
:=
k
.
List
()
r
:=
make
([]
string
,
len
(
l
),
len
(
l
))
...
...
@@ -70,53 +72,53 @@ func (k Key) Reverse() Key {
return
NewKey
(
strings
.
Join
(
r
,
"/"
))
}
//
R
eturns the `namespaces` making up this Key.
// NewKey("/Comedy/MontyPython/Actor:JohnCleese").List()
// ["Comedy", "MontyPythong", "Actor:JohnCleese"]
//
Namespaces r
eturns the `namespaces` making up this Key.
//
NewKey("/Comedy/MontyPython/Actor:JohnCleese").List()
//
["Comedy", "MontyPythong", "Actor:JohnCleese"]
func
(
k
Key
)
Namespaces
()
[]
string
{
return
k
.
List
()
}
//
R
eturns the "base" namespace of this key (
like
path.Base(filename))
// NewKey("/Comedy/MontyPython/Actor:JohnCleese").BaseNamespace()
// "Actor:JohnCleese"
//
BaseNamespace r
eturns the "base" namespace of this key (path.Base(filename))
//
NewKey("/Comedy/MontyPython/Actor:JohnCleese").BaseNamespace()
//
"Actor:JohnCleese"
func
(
k
Key
)
BaseNamespace
()
string
{
n
:=
k
.
Namespaces
()
return
n
[
len
(
n
)
-
1
]
}
//
R
eturns the "type" of this key (value of last namespace).
// NewKey("/Comedy/MontyPython/Actor:JohnCleese").List()
// "Actor"
//
Type r
eturns the "type" of this key (value of last namespace).
//
NewKey("/Comedy/MontyPython/Actor:JohnCleese").List()
//
"Actor"
func
(
k
Key
)
Type
()
string
{
return
NamespaceType
(
k
.
BaseNamespace
())
}
//
R
eturns the "name" of this key (field of last namespace).
// NewKey("/Comedy/MontyPython/Actor:JohnCleese").List()
// "Actor"
//
Name r
eturns the "name" of this key (field of last namespace).
//
NewKey("/Comedy/MontyPython/Actor:JohnCleese").List()
//
"Actor"
func
(
k
Key
)
Name
()
string
{
return
NamespaceValue
(
k
.
BaseNamespace
())
}
//
R
eturns an "instance" of this type key (appends value to namespace).
// NewKey("/Comedy/MontyPython/Actor:JohnCleese").List()
// "JohnCleese"
//
Instance r
eturns an "instance" of this type key (appends value to namespace).
//
NewKey("/Comedy/MontyPython/Actor:JohnCleese").List()
//
"JohnCleese"
func
(
k
Key
)
Instance
(
s
string
)
Key
{
return
NewKey
(
k
.
string
+
":"
+
s
)
}
//
R
eturns the "path" of this key (parent + type).
// NewKey("/Comedy/MontyPython/Actor:JohnCleese").Path()
// NewKey("/Comedy/MontyPython/Actor")
//
Path r
eturns the "path" of this key (parent + type).
//
NewKey("/Comedy/MontyPython/Actor:JohnCleese").Path()
//
NewKey("/Comedy/MontyPython/Actor")
func
(
k
Key
)
Path
()
Key
{
s
:=
k
.
Parent
()
.
string
+
"/"
+
NamespaceType
(
k
.
BaseNamespace
())
return
NewKey
(
s
)
}
//
R
eturns the `parent` Key of this Key.
// NewKey("/Comedy/MontyPython/Actor:JohnCleese").Parent()
// NewKey("/Comedy/MontyPython")
//
Parent r
eturns the `parent` Key of this Key.
//
NewKey("/Comedy/MontyPython/Actor:JohnCleese").Parent()
//
NewKey("/Comedy/MontyPython")
func
(
k
Key
)
Parent
()
Key
{
n
:=
k
.
List
()
if
len
(
n
)
==
1
{
...
...
@@ -125,16 +127,16 @@ func (k Key) Parent() Key {
return
NewKey
(
strings
.
Join
(
n
[
:
len
(
n
)
-
1
],
"/"
))
}
//
R
eturns the `child` Key of this Key.
// NewKey("/Comedy/MontyPython").Child("Actor:JohnCleese")
// NewKey("/Comedy/MontyPython/Actor:JohnCleese")
//
Child r
eturns the `child` Key of this Key.
//
NewKey("/Comedy/MontyPython").Child("Actor:JohnCleese")
//
NewKey("/Comedy/MontyPython/Actor:JohnCleese")
func
(
k
Key
)
Child
(
s
string
)
Key
{
return
NewKey
(
k
.
string
+
"/"
+
s
)
}
//
R
eturns whether this key is a
n ancestor
of `other`
// NewKey("/Comedy").IsAncestorOf("/Comedy/MontyPython")
// true
//
IsAncestorOf r
eturns whether this key is a
prefix
of `other`
//
NewKey("/Comedy").IsAncestorOf("/Comedy/MontyPython")
//
true
func
(
k
Key
)
IsAncestorOf
(
other
Key
)
bool
{
if
other
.
string
==
k
.
string
{
return
false
...
...
@@ -142,9 +144,9 @@ func (k Key) IsAncestorOf(other Key) bool {
return
strings
.
HasPrefix
(
other
.
string
,
k
.
string
)
}
//
R
eturns whether this key
is a descendent of `other`
// NewKey("/Comedy/MontyPython").IsDescendantOf("/Comedy")
// true
//
IsDescendantOf r
eturns whether this key
contains another as a prefix.
//
NewKey("/Comedy/MontyPython").IsDescendantOf("/Comedy")
//
true
func
(
k
Key
)
IsDescendantOf
(
other
Key
)
bool
{
if
other
.
string
==
k
.
string
{
return
false
...
...
@@ -152,13 +154,14 @@ func (k Key) IsDescendantOf(other Key) bool {
return
strings
.
HasPrefix
(
k
.
string
,
other
.
string
)
}
// IsTopLevel returns whether this key has only one namespace.
func
(
k
Key
)
IsTopLevel
()
bool
{
return
len
(
k
.
List
())
==
1
}
// Returns a randomly (uuid) generated key.
// RandomKey()
// NewKey("/f98719ea086343f7b71f32ea9d9d521d")
// R
andomKey r
eturns a randomly (uuid) generated key.
//
RandomKey()
//
NewKey("/f98719ea086343f7b71f32ea9d9d521d")
func
RandomKey
()
Key
{
return
NewKey
(
strings
.
Replace
(
uuid
.
New
(),
"-"
,
""
,
-
1
))
}
...
...
@@ -175,6 +178,7 @@ A namespace can optionally include a type (delimited by ':')
Music:Song
*/
// NamespaceType is the first component of a namespace. `foo` in `foo:bar`
func
NamespaceType
(
namespace
string
)
string
{
parts
:=
strings
.
Split
(
namespace
,
":"
)
if
len
(
parts
)
<
2
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment