Skip to content

Commit

Permalink
rework(DB): naming like in prisma.io
Browse files Browse the repository at this point in the history
The reasoning behind this is to make it easier to
find code that does updates, or just fetches a single item,
or fetches the whole dataset.

Additionally add global data which is currently only used for
.replay().

.replay() should enable the user to run the last command in any buffer,
not only in .http or .rest buffers.
  • Loading branch information
gorillamoe committed Sep 7, 2024
1 parent 04d88a4 commit 2302146
Show file tree
Hide file tree
Showing 9 changed files with 63 additions and 32 deletions.
23 changes: 22 additions & 1 deletion lua/kulala/db/init.lua
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ local CONFIG = require("kulala.config")
local M = {}

M.data = nil
M.global_data = {}

local function default_data()
return {
Expand Down Expand Up @@ -44,7 +45,19 @@ local function save_data()
end
end

M.get = function()
M.global_find_many = function()
return M.global_data
end

M.global_find_unique = function(key)
return M.global_data[key]
end

M.global_update = function()
return M.global_data
end

M.find_many = function()
if not M.data or not M.data.scope_nr then
load_data()
elseif M.data.scope_nr ~= get_current_scope_nr() then
Expand All @@ -54,4 +67,12 @@ M.get = function()
return M.data
end

M.update = function()
return M.find_many()
end

M.find_unique = function(key)
return M.find_many()[key]
end

return M
2 changes: 1 addition & 1 deletion lua/kulala/external_processing/init.lua
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ M.env_stdin_cmd = function(cmdstring, contents)
end

-- save the result to the environment variable
DB.get().env[env_name] = M.stdin_cmd(cmd_string, contents)
DB.update().env[env_name] = M.stdin_cmd(cmd_string, contents)
end

return M
12 changes: 6 additions & 6 deletions lua/kulala/internal_processing/init.lua
Original file line number Diff line number Diff line change
Expand Up @@ -106,11 +106,11 @@ M.set_env_for_named_request = function(name, body)
cookies = get_cookies_as_table(),
},
request = {
headers = DB.get().current_request.headers,
body = DB.get().current_request.body,
headers = DB.find_unique("current_request").headers,
body = DB.find_unique("current_request").body,
},
}
DB.get().env[name] = named_request
DB.update().env[name] = named_request
end

M.env_header_key = function(cmd)
Expand All @@ -122,7 +122,7 @@ M.env_header_key = function(cmd)
if value == nil then
vim.notify("env-header-key --> Header not found.", vim.log.levels.ERROR)
else
DB.get().env[variable_name] = value
DB.update().env[variable_name] = value
end
end

Expand Down Expand Up @@ -151,7 +151,7 @@ M.env_json_key = function(cmd, body)
else
local kv = vim.split(cmd, " ")
local value = get_nested_value(json, kv[2])
DB.get().env[kv[1]] = value
DB.update().env[kv[1]] = value
end
end

Expand All @@ -163,7 +163,7 @@ M.prompt_var = function(metadata_value)
if value == nil or value == "" then
return false
end
DB.get().env[key] = value
DB.update().env[key] = value
return true
end

Expand Down
26 changes: 15 additions & 11 deletions lua/kulala/parser/env.lua
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ M.get_env = function()
env[key] = value
end

DB.get().http_client_env_base = {}
DB.get().http_client_env = {}
DB.update().http_client_env_base = {}
DB.update().http_client_env = {}

if Config.get().vscode_rest_client_environmentvars then
local vscode_dir = FS.find_file_in_parent_dirs(".vscode")
Expand All @@ -29,10 +29,11 @@ M.get_env = function()
if settings and settings["rest-client.environmentVariables"] then
local f = settings["rest-client.environmentVariables"]
if f["$shared"] then
DB.get().http_client_env_base = vim.tbl_deep_extend("force", DB.get().http_client_env_base, f["$shared"])
DB.update().http_client_env_base =
vim.tbl_deep_extend("force", DB.find_unique("http_client_env_base"), f["$shared"])
end
f["$shared"] = nil
DB.get().http_client_env = vim.tbl_deep_extend("force", DB.get().http_client_env, f)
DB.update().http_client_env = vim.tbl_deep_extend("force", DB.find_unique("http_client_env"), f)
end
end
end
Expand All @@ -43,10 +44,11 @@ M.get_env = function()
if settings and settings["rest-client.environmentVariables"] then
local f = settings["rest-client.environmentVariables"]
if f["$shared"] then
DB.get().http_client_env_base = vim.tbl_deep_extend("force", DB.get().http_client_env_base, f["$shared"])
DB.update().http_client_env_base =
vim.tbl_deep_extend("force", DB.find_unique("http_client_env_base"), f["$shared"])
end
f["$shared"] = nil
DB.get().http_client_env = vim.tbl_deep_extend("force", DB.get().http_client_env, f)
DB.update().http_client_env = vim.tbl_deep_extend("force", DB.find_unique("http_client_env"), f)
end
end
end
Expand All @@ -67,24 +69,26 @@ M.get_env = function()
if http_client_env_json then
local f = vim.fn.json_decode(vim.fn.readfile(http_client_env_json))
if f._base then
DB.get().http_client_env_base = vim.tbl_deep_extend("force", DB.get().http_client_env_base, f._base)
DB.update().http_client_env_base = vim.tbl_deep_extend("force", DB.find_unique("http_client_env_base"), f._base)
end
f._base = nil
DB.get().http_client_env = vim.tbl_deep_extend("force", DB.get().http_client_env, f)
DB.update().http_client_env = vim.tbl_deep_extend("force", DB.find_unique("http_client_env"), f)
end

for key, value in pairs(DB.get().http_client_env_base) do
local http_client_env_base = DB.find_unique("http_client_env_base") or {}
for key, value in pairs(http_client_env_base) do
if key ~= "DEFAULT_HEADERS" then
env[key] = value
end
end

local selected_env = DB.get().http_client_env[vim.g.kulala_selected_env or Config.get().default_env]
local selected_env = DB.find_unique("http_client_env")[vim.g.kulala_selected_env or Config.get().default_env]
if selected_env then
env = vim.tbl_extend("force", env, selected_env)
end

for key, value in pairs(DB.get().env) do
local db_env = DB.find_unique("env") or {}
for key, value in pairs(db_env) do
env[key] = value
end

Expand Down
11 changes: 7 additions & 4 deletions lua/kulala/parser/init.lua
Original file line number Diff line number Diff line change
Expand Up @@ -491,7 +491,7 @@ function M.parse(start_request_linenr)
Scripts.javascript.run("pre_request", req.scripts.pre_request)
local env = ENV_PARSER.get_env()

DB.get().previous_request = DB.get().current_request
DB.update().previous_request = DB.find_unique("current_request")

document_variables = extend_document_variables(document_variables, req)

Expand Down Expand Up @@ -531,8 +531,8 @@ function M.parse(start_request_linenr)
end

-- Merge headers from the _base environment if it exists
if DB.get().http_client_env_base then
local default_headers = DB.get().http_client_env_base["DEFAULT_HEADERS"]
if DB.find_unique("http_client_env_base") then
local default_headers = DB.find_unique("http_client_env_base")["DEFAULT_HEADERS"]
if default_headers then
for key, value in pairs(default_headers) do
key = key:lower()
Expand Down Expand Up @@ -664,7 +664,10 @@ function M.parse(start_request_linenr)
if CONFIG.get().debug then
FS.write_file(PLUGIN_TMP_DIR .. "/request.txt", table.concat(res.cmd, " "), false)
end
DB.get().current_request = res
DB.update().current_request = res
-- Save this to global,
-- so .replay() can be triggered from any buffer or window
DB.global_update().replay = res
return res
end

Expand Down
7 changes: 4 additions & 3 deletions lua/kulala/parser/request_variables.lua
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ local function get_config_contenttype(headers)
end

local function get_body_value_from_path(name, method, subpath)
local base_table = DB.get().env[name]
local base_table = DB.find_unique("env")[name]
if not base_table then
return nil
end
Expand Down Expand Up @@ -80,7 +80,7 @@ local function get_body_value_from_path(name, method, subpath)
end

local function get_header_value_from_path(name, method, subpath)
local base_table = DB.get().env[name]
local base_table = DB.find_unique("env")[name]
if not base_table then
return nil
end
Expand Down Expand Up @@ -110,7 +110,8 @@ local function get_header_value_from_path(name, method, subpath)
end

local function get_cookies_value_from_path(name, subpath)
local base_table = DB.get().env[name]
local db_env = DB.find_unique("env")
local base_table = db_env and db_env[name] or nil
if not base_table then
return nil
end
Expand Down
2 changes: 1 addition & 1 deletion lua/kulala/ui/init.lua
Original file line number Diff line number Diff line change
Expand Up @@ -419,7 +419,7 @@ M.show_script_output = function()
end

M.replay = function()
local result = DB.get().current_request
local result = DB.global_find_unique("replay")
if result == nil then
vim.notify("No request to replay", vim.log.levels.WARN, { title = "kulala" })
return
Expand Down
5 changes: 3 additions & 2 deletions lua/kulala/ui/selector.lua
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,13 @@ local FS = require("kulala.utils.fs")
local M = {}

function M.select_env()
if not DB.get().http_client_env then
local http_client_env = DB.find_unique("http_client_env")
if not http_client_env then
return
end

local envs = {}
for key, _ in pairs(DB.get().http_client_env) do
for key, _ in pairs(http_client_env) do
table.insert(envs, key)
end

Expand Down
7 changes: 4 additions & 3 deletions lua/telescope/_extensions/kulala.lua
Original file line number Diff line number Diff line change
Expand Up @@ -45,12 +45,13 @@ local function kulala_search(_)
end

local function kulala_env_select(_)
if not DB.get().data.http_client_env then
local http_client_env = DB.find_unique("http_client_env")
if not http_client_env then
return
end

local envs = {}
for key, _ in pairs(DB.get().data.http_client_env) do
for key, _ in pairs(http_client_env) do
table.insert(envs, key)
end

Expand All @@ -74,7 +75,7 @@ local function kulala_env_select(_)
previewer = previewers.new_buffer_previewer({
title = "Environment",
define_preview = function(self, entry)
local env = DB.get().data.http_client_env[entry.value]
local env = http_client_env[entry.value]
if env == nil then
return
end
Expand Down

0 comments on commit 2302146

Please sign in to comment.