From d26d0632c2f07c73f5fdbe57989a65302838d670 Mon Sep 17 00:00:00 2001 From: Lucien Greathouse Date: Mon, 15 Oct 2018 13:18:44 -0700 Subject: [PATCH] Load non-ModuleScript scripts from disk --- lib/Habitat.lua | 20 +++++++-- spec/load_spec.lua | 41 +++++++++++++++---- spec/test-project/abc.server.lua | 1 + spec/test-project/def.client.lua | 1 + .../test-project/usurp-server/init.server.lua | 1 + 5 files changed, 52 insertions(+), 12 deletions(-) create mode 100644 spec/test-project/abc.server.lua create mode 100644 spec/test-project/def.client.lua create mode 100644 spec/test-project/usurp-server/init.server.lua diff --git a/lib/Habitat.lua b/lib/Habitat.lua index 6dfb003..0f38706 100644 --- a/lib/Habitat.lua +++ b/lib/Habitat.lua @@ -44,11 +44,25 @@ function Habitat:loadFromFs(path, passedOptions) local options = assign({}, defaultLoadFromFsOptions, passedOptions) if fs.isFile(path) then - if path:find("%.lua$") then - local instance = Instance.new("ModuleScript") + local className + local instanceName + + if path:find("%.server%.lua$") then + className = "Script" + instanceName = path:match("([^/]-)%.server%.lua$") + elseif path:find("%.client%.lua$") then + className = "LocalScript" + instanceName = path:match("([^/]-)%.client%.lua$") + elseif path:find("%.lua$") then + className = "ModuleScript" + instanceName = path:match("([^/]-)%.lua$") + end + + if className ~= nil then local contents = assert(fs.read(path)) - instance.Name = path:match("([^/]-)%.lua$") + local instance = Instance.new(className) + instance.Name = instanceName instance.Source = contents getmetatable(instance).instance.modulePath = path diff --git a/spec/load_spec.lua b/spec/load_spec.lua index 87b074e..34e1b5b 100644 --- a/spec/load_spec.lua +++ b/spec/load_spec.lua @@ -7,30 +7,41 @@ describe("Lemur", function() local root = habitat:loadFromFs("spec/test-project") - assert.equal(#root:GetChildren(), 3) + assert.equal(#root:GetChildren(), 6) local bar = root:FindFirstChild("bar") - local usurp = root:FindFirstChild("usurp") - local normal = root:FindFirstChild("normal-folder") - assert.equal(bar.ClassName, "ModuleScript") - assert.equal(usurp.ClassName, "ModuleScript") - assert.equal(normal.ClassName, "Folder") - assert.equal(bar.Source, "-- bar.lua") - assert.equal(usurp.Source, "-- init.lua") + local usurp = root:FindFirstChild("usurp") assert.equal(#usurp:GetChildren(), 1) + assert.equal(usurp.ClassName, "ModuleScript") + assert.equal(usurp.Source, "-- init.lua") local foo = usurp:FindFirstChild("foo") assert.equal(foo.ClassName, "ModuleScript") assert.equal(foo.Source, "-- foo.lua") + local normal = root:FindFirstChild("normal-folder") assert.equal(#normal:GetChildren(), 1) + assert.equal(normal.ClassName, "Folder") local ack = normal:FindFirstChild("ack") assert.equal(ack.ClassName, "ModuleScript") assert.equal(ack.Source, "-- ack.lua") + + local abc = root:FindFirstChild("abc") + assert.equal(abc.ClassName, "Script") + assert.equal(abc.Source, "-- abc.server.lua") + + local def = root:FindFirstChild("def") + assert.equal(def.ClassName, "LocalScript") + assert.equal(def.Source, "-- def.client.lua") + + local usurpServer = root:FindFirstChild("usurp-server") + assert.equal(#usurpServer:GetChildren(), 0) + assert.equal(usurpServer.ClassName, "Script") + assert.equal(usurpServer.Source, "-- usurp-server/init.server.lua") end) it("should not touch init.lua if loadInitModules is false", function() @@ -40,7 +51,7 @@ describe("Lemur", function() loadInitModules = false, }) - assert.equal(#root:GetChildren(), 3) + assert.equal(#root:GetChildren(), 6) local usurp = root:FindFirstChild("usurp") assert.equal(usurp.ClassName, "Folder") @@ -52,5 +63,17 @@ describe("Lemur", function() local foo = usurp:FindFirstChild("foo") assert.equal(foo.ClassName, "ModuleScript") assert.equal(foo.Source, "-- foo.lua") + + local abc = root:FindFirstChild("abc") + assert.equal(abc.ClassName, "Script") + assert.equal(abc.Source, "-- abc.server.lua") + + local def = root:FindFirstChild("def") + assert.equal(def.ClassName, "LocalScript") + assert.equal(def.Source, "-- def.client.lua") + + local usurpServer = root:FindFirstChild("usurp-server") + assert.equal(#usurpServer:GetChildren(), 1) + assert.equal(usurpServer.ClassName, "Folder") end) end) \ No newline at end of file diff --git a/spec/test-project/abc.server.lua b/spec/test-project/abc.server.lua new file mode 100644 index 0000000..169839e --- /dev/null +++ b/spec/test-project/abc.server.lua @@ -0,0 +1 @@ +-- abc.server.lua \ No newline at end of file diff --git a/spec/test-project/def.client.lua b/spec/test-project/def.client.lua new file mode 100644 index 0000000..90f029a --- /dev/null +++ b/spec/test-project/def.client.lua @@ -0,0 +1 @@ +-- def.client.lua \ No newline at end of file diff --git a/spec/test-project/usurp-server/init.server.lua b/spec/test-project/usurp-server/init.server.lua new file mode 100644 index 0000000..47937e4 --- /dev/null +++ b/spec/test-project/usurp-server/init.server.lua @@ -0,0 +1 @@ +-- usurp-server/init.server.lua \ No newline at end of file