summaryrefslogtreecommitdiff
path: root/components
diff options
context:
space:
mode:
Diffstat (limited to 'components')
-rw-r--r--components/adapter.rb40
-rw-r--r--components/storage.rb4
2 files changed, 42 insertions, 2 deletions
diff --git a/components/adapter.rb b/components/adapter.rb
new file mode 100644
index 0000000..b906a27
--- /dev/null
+++ b/components/adapter.rb
@@ -0,0 +1,40 @@
+# frozen_string_literal: true
+
+require 'sweet-moon'
+
+module NanoBot
+ module Components
+ class Adapter
+ def self.apply(_direction, params)
+ content = params[:content]
+
+ if params[:fennel] && params[:lua]
+ raise StandardError, 'Adapter conflict: You can only use either Lua or Fennel, not both.'
+ end
+
+ if params[:fennel]
+ content = fennel(content, params[:fennel])
+ elsif params[:lua]
+ content = lua(content, params[:lua])
+ end
+
+ "#{params[:prefix]}#{content}#{params[:suffix]}"
+ end
+
+ def self.fennel(content, expression)
+ path = "#{File.expand_path('../static/fennel', __dir__)}/?.lua"
+ state = SweetMoon::State.new(package_path: path).fennel
+ state.fennel.eval("(set _G.adapter (fn [content] #{expression}))")
+ adapter = state.get(:adapter)
+ adapter.call([content])
+ end
+
+ def self.lua(content, expression)
+ state = SweetMoon::State.new
+ state.eval("adapter = function(content) return #{expression}; end")
+ adapter = state.get(:adapter)
+ adapter.call([content])
+ end
+ end
+ end
+end
diff --git a/components/storage.rb b/components/storage.rb
index d46455f..bdf0efe 100644
--- a/components/storage.rb
+++ b/components/storage.rb
@@ -43,7 +43,7 @@ module NanoBot
partial = File.join(File.dirname(partial), File.basename(partial, File.extname(partial)))
- partial = path.sub(%r{^\.?/}, '')
+ partial = partial.sub(%r{^\.?/}, '')
candidates << "#{directory}/#{partial}"
candidates << "#{directory}/#{partial}.yml"
@@ -54,7 +54,7 @@ module NanoBot
partial = File.join(File.dirname(partial), File.basename(partial, File.extname(partial)))
- partial = path.sub(%r{^\.?/}, '')
+ partial = partial.sub(%r{^\.?/}, '')
candidates << "#{directory}/#{partial}"
candidates << "#{directory}/#{partial}.yml"