aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--skate/reduce.go39
-rw-r--r--skate/reduce_test.go20
2 files changed, 41 insertions, 18 deletions
diff --git a/skate/reduce.go b/skate/reduce.go
index ade6a02..d093f5a 100644
--- a/skate/reduce.go
+++ b/skate/reduce.go
@@ -303,23 +303,8 @@ func ZippyVerifyRefsOpenLibraryTable(olr, refs io.Reader, w io.Writer) error {
// release) and writes biblioref.
func ZippyVerifyRefsOpenLibrary(olr, refs io.Reader, w io.Writer) error {
var (
- enc = json.NewEncoder(xio.NewSingleWriter(w))
- keyer = makeKeyFunc("\t", 1)
- cleanIdentifier = func(s string) string {
- // Turn ids like /books/OL31189321M into OL31189321M
- if s = strings.TrimSpace(s); len(s) == 0 {
- return ""
- }
- var (
- parts = strings.Split(s, "/")
- last = parts[len(parts)-1]
- )
- if strings.HasPrefix(last, "OL") {
- return last
- }
- log.Printf("warning: unexpected OL id: %s", s)
- return ""
- }
+ enc = json.NewEncoder(xio.NewSingleWriter(w))
+ keyer = makeKeyFunc("\t", 1)
grouper = func(g *zipkey.Group) error {
// TODO: For openlibrary and wayback matches, pass through either
// unstructured ref string, or CSL JSON
@@ -344,7 +329,7 @@ func ZippyVerifyRefsOpenLibrary(olr, refs io.Reader, w io.Writer) error {
result := Verify(pivot, ref)
switch result.Status {
case StatusExact, StatusStrong:
- openLibraryWorkID := cleanIdentifier(pivot.WorkID)
+ openLibraryWorkID := cleanOpenLibraryIdentifier(pivot.WorkID)
if openLibraryWorkID == "" {
continue
}
@@ -681,3 +666,21 @@ func parseBiblioref(s string) (r *BiblioRef, err error) {
err = json.Unmarshal([]byte(s), &r)
return
}
+
+// cleanOpenLibraryIdentifier turns OL ids like /books/OL31189321M into OL31189321M.
+func cleanOpenLibraryIdentifier(s string) string {
+ // XXX: This can be made faster; iterate from the end of the string
+ // and use a slice.
+ if s = strings.TrimSpace(s); len(s) == 0 {
+ return ""
+ }
+ var (
+ parts = strings.Split(s, "/")
+ last = parts[len(parts)-1]
+ )
+ if strings.HasPrefix(last, "OL") {
+ return last
+ }
+ log.Printf("warning: unexpected OL id: %s", s)
+ return ""
+}
diff --git a/skate/reduce_test.go b/skate/reduce_test.go
index ddbca08..9c134f8 100644
--- a/skate/reduce_test.go
+++ b/skate/reduce_test.go
@@ -510,3 +510,23 @@ func TestCutSep(t *testing.T) {
}
}
}
+
+func TestCleanOpenLibraryIdentifier(t *testing.T) {
+ var cases = []struct {
+ s string
+ result string
+ }{
+ {"", ""},
+ {"/books/OL31189321M", "OL31189321M"},
+ {"/b/OL31189321M", "OL31189321M"},
+ {"OL31189321M", "OL31189321M"},
+ {"OL123", "OL123"},
+ {"123", ""},
+ }
+ for _, c := range cases {
+ result := cleanOpenLibraryIdentifier(c.s)
+ if result != c.result {
+ t.Fatalf("got %v, want %v", result, c.result)
+ }
+ }
+}