From d11926e79db00d8aac59cb4e78b51b42b4ad95e8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Todor=20Kondi=C4=87?= <kontrapunkt@uclmail.net>
Date: Sat, 4 Mar 2023 16:50:15 +0100
Subject: [PATCH] Functions get_fname_slug and uniqy_slugs generate keys based
 on filenames.

---
 R/base.R                   | 23 +++++++++++++++++++++++
 R/shiny-state.R            |  8 ++++----
 tests/testthat/test-base.R | 18 ++++++++++++++++++
 3 files changed, 45 insertions(+), 4 deletions(-)
 create mode 100644 tests/testthat/test-base.R

diff --git a/R/base.R b/R/base.R
index 1ac7e90..320d6b6 100644
--- a/R/base.R
+++ b/R/base.R
@@ -120,3 +120,26 @@ gen_1d_keytab <- function(dt) {
     eval(bquote(s[,`:=`(key1d=.(ex)),by=key(s)]))
    
 }
+
+gen_fname_slug <- function(fname) {
+    ## Generates a name with blanks replaced with underscores and
+    ## extensions removed.
+
+    ## Drop path.
+    name = basename(fname)
+
+    ## Remove extension if any.
+    name = gsub(r"(\.[^.]*$)","",name)
+
+    ## Spaces into underscores.
+    name = gsub("[[:blank:]]+","_",name)
+
+    ## Reduce the number of underscores.
+    name = gsub(r"(_+)","_",name)
+    name
+}
+
+uniqy_slugs <- function(slugs) {
+    dt = data.table::data.table(slug=slugs)
+    dt[,slug:=fifelse(rep(.N==1L,.N),slug,paste0(slug,"_",seq(1L,.N))),by="slug"]$slug
+}
diff --git a/R/shiny-state.R b/R/shiny-state.R
index efef88c..826f5bc 100644
--- a/R/shiny-state.R
+++ b/R/shiny-state.R
@@ -455,11 +455,11 @@ app_state2state <- function(input,gui,envopts,m=NULL) {
 get_sets <- function(gui) {
     ## TODO FIXME
     ## Think about this
-    fn_lists <- file.path(gui$paths$project,gui$compounds$lists)
+    ## fn_lists <- file.path(gui$paths$project,gui$compounds$lists)
 
-    df <- fread(file=fn_lists)
-    if (!
-    res = df[,unique(set)]
+    ## df <- fread(file=fn_lists)
+    ## if (!
+    ## res = df[,unique(set)]
     if (length(res)==0L) res = "ALL"
 }
 
diff --git a/tests/testthat/test-base.R b/tests/testthat/test-base.R
new file mode 100644
index 0000000..ca5eb16
--- /dev/null
+++ b/tests/testthat/test-base.R
@@ -0,0 +1,18 @@
+test_that("gen_fname_slug",{
+
+    r1 = gen_fname_slug("file_name.csv")
+    expect_true(r1=="file_name")
+    r2 = gen_fname_slug(".file.name.csv")
+    expect_true(r2==".file.name")
+    r3 = gen_fname_slug("file name    with blanks.x.y.csv")
+    expect_true(r3=="file_name_with_blanks.x.y")
+    r3 = gen_fname_slug("file    name____with blanks____x.y.csv")
+    expect_true(r3=="file_name_with_blanks_x.y")
+})
+
+test_that("uniqy_slugs",{
+    inp = c('f1','f2','f2','f2','f3','f4','f4','f5','f3','f6')
+    out = uniqy_slugs(inp)
+    message(paste(out,coll=','))
+    expect_true(1==1)
+})
-- 
GitLab