class Bcome::Registry::Loader

Constants

FILE_PATH

Public Instance Methods

data() click to toggle source
# File lib/objects/registry/loader.rb, line 9
def data
  @data ||= do_load
end
do_load() click to toggle source
# File lib/objects/registry/loader.rb, line 69
def do_load
  return {} unless File.exist?(FILE_PATH)

  begin
    file_data = YAML.load_file(FILE_PATH).deep_symbolize_keys
  rescue Psych::SyntaxError => e
    raise Bcome::Exception::InvalidRegistryDataConfig, "Error: #{e.message}"
  end
  file_data
end
init_new_command_group(node) click to toggle source
# File lib/objects/registry/loader.rb, line 47
def init_new_command_group(node)
  ::Bcome::Registry::Command::Group.new(node)
end
restrict_config?(node, command_config) click to toggle source
# File lib/objects/registry/loader.rb, line 51
def restrict_config?(node, command_config)
  return false unless command_config.key?(:restrict_to_node)

  node_klass_mapping = restriction_to_node_klass_mappings[command_config[:restrict_to_node].to_sym]

  raise Bcome::Exception::InvalidRestrictionKeyInRegistry, "'#{command_config[:restrict_to_node]}' is invalid. Valid keys: #{restriction_to_node_klass_mappings.keys.join(', ')}" unless node_klass_mapping

  !node.is_a?(node_klass_mapping)
end
restriction_to_node_klass_mappings() click to toggle source
# File lib/objects/registry/loader.rb, line 61
def restriction_to_node_klass_mappings
  {
    server: ::Bcome::Node::Server::Base,
    inventory: ::Bcome::Node::Inventory,
    collection: ::Bcome::Node::Collection
  }
end
set_command_group_for_node(node) click to toggle source
# File lib/objects/registry/loader.rb, line 13
def set_command_group_for_node(node)
  if group_for_node = ::Bcome::Registry::CommandList.instance.group_for_node(node)
    return group_for_node
  end

  command_group = init_new_command_group(node)

  data.each do |key, commands|
    begin
      if /^#{key}$/.match(node.keyed_namespace)

        next if commands.nil?

        commands.each do |c|
          unless c[:console_command]
            error_message = "Registry method is missing key 'console_command'."
            error_message += "\n\n#{c.inspect}"
            raise Bcome::Exception::InvalidRegistryDataConfig, error_message
          end

          # Verify that the proposed user registered method does not conflict with either an existing method name, instance var, or other registry command name for this node
          raise Bcome::Exception::MethodNameConflictInRegistry, "'#{c[:console_command]}'" if node.is_node_level_method?(c[:console_command]) || command_group.console_method_name_exists?(c[:console_command])

          command_group << ::Bcome::Registry::Command::Base.new_from_raw_command(c) unless restrict_config?(node, c)
          ::Bcome::Registry::CommandList.instance.register(node, c[:console_command].to_sym)
        end
      end
    rescue RegexpError => e
      raise Bcome::Exception::InvalidRegexpMatcherInRegistry, e.message
    end
  end
  ::Bcome::Registry::CommandList.instance.add_group_for_node(node, command_group)
end