You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: base.rb
    path of file: ./repos/view_components/lib/primer/view_components/linters/argument_mappers
    
    the code of the file until where you have to start completion: # frozen_string_literal: true

require "primer/view_components/constants"
require "primer/classify/utilities"
require "primer/classify/validation"
require_relative "conversion_error"
require_relative "system_arguments"
require_relative "helpers/erb_block"

module ERBLint
  module Linters
    module ArgumentMappers
      # Provides the base interface to implement an `ArgumentMapper`.
      # Override attribute_to_args in a child class to customize its mapping behavior.
      class Base
        DEFAULT_TAG = nil
        ATTRIBUTES = [].freeze

        def initialize(tag)
          @tag = tag
        end

        def to_s
          to_args.map { |k, v| "#{k}: #{v}" }.join(
    
        def attribute_to_args(attribute); end

        def map_classes(classes_node)
          erb_helper.raise_if_erb_block(classes_node)

          system_arguments = system_arguments_to_args(classes_node.value)
          args = classes_to_args(system_arguments[:classes]&.split || [])

          invalid_classes = args[:classes].select { |class_name| ::Primer::Classify::Validation.invalid?(class_name) }

          raise ConversionError, "Cannot convert #{'class'.pluralize(invalid_classes.size)} #{invalid_classes.join(',')}" if invalid_classes.present?

          # Using splat to order the arguments in Component's args -> System Args -> custom classes
          res = {
            **args.except(:classes),
            **system_arguments.except(:classes)
          }

          if args[:classes].present?
            res = {
              **res,
              classes: args[:classes].join(" ").to_json
            }
          end

          res
        end