summaryrefslogtreecommitdiff
path: root/components
diff options
context:
space:
mode:
authoricebaker <113217272+icebaker@users.noreply.github.com>2023-05-13 18:54:17 -0300
committerGitHub <noreply@github.com>2023-05-13 18:54:17 -0300
commit9103778fe438ad4b0c90dce60bf77fc812290fc4 (patch)
treed5d815cae646002f4833439d07c36bf9c1f68ed7 /components
parenta1950c8eb3b55759b0cdcc7716c88b99d0173f2d (diff)
parent1fbdb24fff7cd84b5506cb0c7092fdcdc867ec12 (diff)
Merge pull request #2 from icebaker/ib-adapters
adding support for adapters
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"