class StructuredMenus::Dispatcher

Public Class Methods

new() click to toggle source
# File lib/structured_menus/dispatcher.rb, line 3
def initialize
  menus_dir = StructuredMenus.config.menus_directory
  @menus = Dir.entries(menus_dir).reject { |f| File.directory? f }\
                                 .map { |p| [File.basename(p).gsub('.yml', ''), p] }.to_h.with_indifferent_access
  @adapters = StructuredMenus.config.adapters.map do |an|
    if an.class == Class
      an
    elsif an.class == String
      require_relative an
      File.basename(an).gsub('.rb', '').classify.constantize
    end
  end.map { |ac| [ac.name.demodulize.gsub('Adapter', '').underscore, ac] }.to_h.with_indifferent_access
end

Public Instance Methods

show(name, adapter_name, user, **options) click to toggle source
# File lib/structured_menus/dispatcher.rb, line 17
def show(name, adapter_name, user, **options)
  menu = YAML.safe_load(File.read(StructuredMenus.config.menus_directory.join(@menus[name])))
  adapter = @adapters[adapter_name]
  adapter.show(menu, user, **options)
end