diff options
Diffstat (limited to 'controllers')
-rw-r--r-- | controllers/cartridges.rb | 42 | ||||
-rw-r--r-- | controllers/instance.rb | 7 |
2 files changed, 27 insertions, 22 deletions
diff --git a/controllers/cartridges.rb b/controllers/cartridges.rb index df474a9..3be8d53 100644 --- a/controllers/cartridges.rb +++ b/controllers/cartridges.rb @@ -3,35 +3,43 @@ require_relative '../components/storage' require_relative '../logic/helpers/hash' require_relative '../logic/cartridge/default' +require_relative '../logic/cartridge/parser' module NanoBot module Controllers class Cartridges - def self.all + def self.load(path) + Logic::Cartridge::Parser.parse(File.read(path), format: File.extname(path)) + end + + def self.all(components: {}) files = {} - path = Components::Storage.cartridges_path + paths = Components::Storage.cartridges_path(components:) - Dir.glob("#{path}/**/*.{yml,yaml}").each do |file| - files[Pathname.new(file).realpath] = { - base: path, - path: Pathname.new(file).realpath - } + paths.split(':').each do |path| + Dir.glob("#{path}/**/*.{yml,yaml,markdown,mdown,mkdn,md}").each do |file| + files[Pathname.new(file).realpath] = { + base: path, + path: Pathname.new(file).realpath + } + end end cartridges = [] files.values.uniq.map do |file| - cartridge = Logic::Helpers::Hash.symbolize_keys( - YAML.safe_load_file(file[:path], permitted_classes: [Symbol]) - ).merge({ - system: { - id: file[:path].to_s.sub(/^#{Regexp.escape(file[:base])}/, '').sub(%r{^/}, '').sub(/\.[^.]+\z/, - ''), - path: file[:path], - base: file[:base] - } - }) + cartridge = load(file[:path]).merge( + { + system: { + id: file[:path].to_s.sub( + /^#{Regexp.escape(file[:base])}/, '' + ).sub(%r{^/}, '').sub(/\.[^.]+\z/, ''), + path: file[:path], + base: file[:base] + } + } + ) next if cartridge[:meta][:name].nil? diff --git a/controllers/instance.rb b/controllers/instance.rb index 259a548..85b97ec 100644 --- a/controllers/instance.rb +++ b/controllers/instance.rb @@ -1,11 +1,10 @@ # frozen_string_literal: true -require 'yaml' - require_relative '../logic/helpers/hash' require_relative '../components/provider' require_relative '../components/storage' require_relative '../components/stream' +require_relative 'cartridges' require_relative 'interfaces/repl' require_relative 'interfaces/eval' require_relative 'session' @@ -83,13 +82,11 @@ module NanoBot raise StandardError, "Cartridge file not found: \"#{path}\"" end - @cartridge = YAML.safe_load_file(elected_path, permitted_classes: [Symbol]) + @cartridge = Cartridges.load(elected_path) end @safe_cartridge = Marshal.load(Marshal.dump(@cartridge)) - @cartridge = Logic::Helpers::Hash.symbolize_keys(@cartridge) - inject_environment_variables!(@cartridge) end |