Refactor options to separate file
Options were previously set ad-hoc in the initialize function, but re-set and overwritten at various places. Options now live in one central module (options.lua), where they directly access the neovim options set, and re-access them on any run. That means options can be changed while the plugin is running and it will use their newer versions, without requiring any re-initialization.
This commit is contained in:
parent
e96b454b23
commit
ece30350c2
6 changed files with 106 additions and 41 deletions
|
@ -1,18 +1,7 @@
|
|||
local ZK = {}
|
||||
|
||||
local ls = require 'zettelkasten.list'
|
||||
|
||||
function ZK.init(vimapi)
|
||||
vim = vimapi or vim
|
||||
ZK.options = {
|
||||
anchor_separator = vim.g["zettel_anchor_separator"] or
|
||||
vim.b["zettel_anchor_separator"] or "_",
|
||||
zettel_extension = vim.g["zettel_extension"] or
|
||||
vim.b["zettel_extension"] or ".md"
|
||||
-- zettel_root = vim.g["zettel_root"] or vim.b["zettel_root"] or "~/documents/notes",
|
||||
-- TODO zettel_anchor_pattern = regex? -> needs custom creation function in `create_anchor`
|
||||
}
|
||||
end
|
||||
local o = require 'zettelkasten.options'
|
||||
|
||||
-- entrypoint for pressing the zettel key when the cursor
|
||||
-- is either on an existing link (it will then
|
||||
|
@ -42,15 +31,13 @@ end
|
|||
-- and the text cleaned up to be useful in a link.
|
||||
function ZK.create_link(text, date)
|
||||
text = text or ""
|
||||
local o = ZK.options
|
||||
if text == "" then
|
||||
text = "" .. ZK.create_anchor(date)
|
||||
else
|
||||
text = text:lower():gsub(" ", "-")
|
||||
text = "" .. ZK.create_anchor(date) .. (o.anchor_separator or "_") ..
|
||||
text
|
||||
text = "" .. ZK.create_anchor(date) .. o.anchor().separator .. text
|
||||
end
|
||||
return text .. (o.zettel_extension or ".md")
|
||||
return text .. o.zettel().extension
|
||||
end
|
||||
|
||||
-- Returns all zettel in path as a
|
||||
|
@ -62,7 +49,6 @@ function ZK.get_zettel_list(path, recursive)
|
|||
end
|
||||
|
||||
return {
|
||||
init = ZK.init,
|
||||
zettel_link_create = ZK.zettel_link_create,
|
||||
create_anchor = ZK.create_anchor,
|
||||
create_link = ZK.create_link,
|
||||
|
|
|
@ -2,7 +2,8 @@ ZK = require 'zettelkasten.init'
|
|||
Test_date = {year = 2019, month = 10, day = 29, hour = 16, min = 45}
|
||||
|
||||
describe("Zettelkasten", function()
|
||||
before_each(function() ZK.init({g = {}, b = {}}) end)
|
||||
before_each(function() _G.vim = {g = {}, b = {}} end)
|
||||
after_each(function() _G.vim = nil end)
|
||||
|
||||
describe("anchor creation", function()
|
||||
it("should return zettel anchor from time passed in", function()
|
||||
|
@ -42,21 +43,29 @@ describe("Zettelkasten", function()
|
|||
ZK.create_link("yes indeed a space", Test_date))
|
||||
end)
|
||||
|
||||
it(
|
||||
"should place the contents of g:zettel_anchor_separator variable in link",
|
||||
function()
|
||||
vim = {g = {zettel_anchor_separator = "SEP"}, b = {}}
|
||||
ZK.init(vim)
|
||||
assert.same("1910291645SEParated.md",
|
||||
ZK.create_link("arated", Test_date))
|
||||
end)
|
||||
it("should add contents of g:zettel_anchor_separator variable to link",
|
||||
function()
|
||||
vim.g.zettel_anchor_separator = "SEP"
|
||||
assert.same("1910291645SEParated.md",
|
||||
ZK.create_link("arated", Test_date))
|
||||
end)
|
||||
it("should add contents of b:zettel_anchor_separator variable to link",
|
||||
function()
|
||||
vim.b.zettel_anchor_separator = "---"
|
||||
assert.same("1910291645---arated.md",
|
||||
ZK.create_link("arated", Test_date))
|
||||
end)
|
||||
|
||||
it("should append the filetype set in g:zettel_extension", function()
|
||||
vim = {g = {zettel_extension = ".something"}, b = {}}
|
||||
ZK.init(vim)
|
||||
vim.g.zettel_extension = ".something"
|
||||
assert.same("1910291645_theworld.something",
|
||||
ZK.create_link("theworld", Test_date))
|
||||
end)
|
||||
it("should append the filetype set in b:zettel_extension", function()
|
||||
vim.b.zettel_extension = ".somethingelse"
|
||||
assert.same("1910291645_theworld.somethingelse",
|
||||
ZK.create_link("theworld", Test_date))
|
||||
end)
|
||||
end)
|
||||
|
||||
end)
|
||||
|
|
|
@ -35,8 +35,11 @@ end
|
|||
-- Take a list of zettel as an optional variable, without which
|
||||
-- it will use the (recursive) results of the zettel_root directory.
|
||||
function ls.get_zettel(anchor, all)
|
||||
if not all then all = ls.get_anchors_and_paths('somepath') end
|
||||
|
||||
return all[anchor]
|
||||
end
|
||||
|
||||
function ls.open_zettel(anchor, all) end
|
||||
|
||||
return ls
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
ls = require'zettelkasten.list'
|
||||
local ls = require 'zettelkasten.list'
|
||||
-- these tests, I suppose, only work on unix due to the file structure
|
||||
|
||||
local function simple_api_mock(files)
|
||||
|
@ -13,20 +13,14 @@ local function simple_api_mock(files)
|
|||
return true
|
||||
end
|
||||
end,
|
||||
fs_scandir_next = function()
|
||||
return table.remove(files)
|
||||
end
|
||||
fs_scandir_next = function() return table.remove(files) end
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
describe("get_anchors_and_paths", function()
|
||||
before_each(function()
|
||||
get_api_mock = simple_api_mock
|
||||
end)
|
||||
after_each(function()
|
||||
_G.vim = nil
|
||||
end)
|
||||
before_each(function() get_api_mock = simple_api_mock end)
|
||||
after_each(function() _G.vim = nil end)
|
||||
|
||||
it("should return anchor-keyed table pointing to filename of zettel",
|
||||
function()
|
||||
|
@ -136,19 +130,37 @@ describe("get_anchors_and_paths", function()
|
|||
["2345678901"] = "2345678901 another.wiki"
|
||||
}
|
||||
|
||||
assert.same(expected, ls.get_anchors_and_paths('mydirectory', false, vim.g))
|
||||
assert.same(expected,
|
||||
ls.get_anchors_and_paths('mydirectory', false, vim.g))
|
||||
|
||||
end)
|
||||
|
||||
it("should default to the zettel root dir",
|
||||
function() pending("not implemented") end)
|
||||
end)
|
||||
|
||||
describe("get_zettel", function()
|
||||
it("should return the correct zettel by id", function()
|
||||
local file_list = {
|
||||
["1910291645"] = "1910291645 myfile.md",
|
||||
["2345678901"] = "2345678901 another.md",
|
||||
["2345678901"] = "2345678901 another.md"
|
||||
}
|
||||
_G.vim = simple_api_mock(file_list)
|
||||
|
||||
assert.same("1910291645 myfile.md", ls.get_zettel("1910291645", file_list))
|
||||
assert.same("1910291645 myfile.md",
|
||||
ls.get_zettel("1910291645", file_list))
|
||||
end)
|
||||
|
||||
it("should default to the zettel root dir if no list passed in", function()
|
||||
local file_list = {"1910291645 myfile.wiki", "2345678901 another.wiki"}
|
||||
_G.vim = simple_api_mock(file_list)
|
||||
|
||||
pending("not implemented")
|
||||
assert.same("1910291645 myfile.wiki", ls.get_zettel("1910291645"))
|
||||
end)
|
||||
end)
|
||||
|
||||
describe("open_zettel", function()
|
||||
it("should set the current buffer to the zettel passed in as anchor",
|
||||
function() pending("not implemented") end)
|
||||
end)
|
||||
|
|
24
lua/zettelkasten/options.lua
Normal file
24
lua/zettelkasten/options.lua
Normal file
|
@ -0,0 +1,24 @@
|
|||
local Opt = {}
|
||||
|
||||
-- setting defaults
|
||||
local ZETTEL_EXTENSION = ".md"
|
||||
local ANCHOR_SEPARATOR = "_"
|
||||
-- TODO zettel_root = vim.g["zettel_root"] or vim.b["zettel_root"] or "~/documents/notes",
|
||||
-- TODO zettel_anchor_pattern = regex? -> needs custom creation function in `create_anchor`
|
||||
|
||||
function Opt.zettel()
|
||||
local options = {}
|
||||
options.extension =
|
||||
vim.g["zettel_extension"] or vim.b["zettel_extension"] or
|
||||
ZETTEL_EXTENSION
|
||||
return options
|
||||
end
|
||||
|
||||
function Opt.anchor()
|
||||
local options = {}
|
||||
options.separator = vim.g["zettel_anchor_separator"] or
|
||||
vim.b["zettel_anchor_separator"] or ANCHOR_SEPARATOR
|
||||
return options
|
||||
end
|
||||
|
||||
return Opt
|
31
lua/zettelkasten/options_spec.lua
Normal file
31
lua/zettelkasten/options_spec.lua
Normal file
|
@ -0,0 +1,31 @@
|
|||
local opt = require 'zettelkasten.options'
|
||||
|
||||
before_each(function() _G.vim = {g = {}, b = {}} end)
|
||||
after_each(function() _G.vim = nil end)
|
||||
|
||||
describe("zettel options", function()
|
||||
|
||||
it("should return the global zettel extension if set in vim", function()
|
||||
_G.vim.g.zettel_extension = ".myextension"
|
||||
assert.same(".myextension", opt.zettel().extension)
|
||||
end)
|
||||
it("should return the buffer zettel extension if set in vim", function()
|
||||
_G.vim.b.zettel_extension = ".mybufextension"
|
||||
assert.same(".mybufextension", opt.zettel().extension)
|
||||
end)
|
||||
it("should return the default zettel extension if not set in vim",
|
||||
function() assert.same(".md", opt.zettel().extension) end)
|
||||
end)
|
||||
|
||||
describe("zettel options", function()
|
||||
it("should return the global anchor separator if set in vim", function()
|
||||
_G.vim.g.zettel_anchor_separator = "SEPARATE"
|
||||
assert.same("SEPARATE", opt.anchor().separator)
|
||||
end)
|
||||
it("should return the buffer anchor separator if set in vim", function()
|
||||
_G.vim.b.zettel_anchor_separator = "--"
|
||||
assert.same("--", opt.anchor().separator)
|
||||
end)
|
||||
it("should return the default anchor separator if not set in vim",
|
||||
function() assert.same("_", opt.anchor().separator) end)
|
||||
end)
|
Loading…
Reference in a new issue