module Sinatra::RespondWith

def self.engines

def self.engines
  engines = {
    css: %i[sass scss],
    xml: %i[builder nokogiri],
    html: %i[erb erubi haml hamlit slim liquid
             mab markdown rdoc],
    all: (Sinatra::Templates.instance_methods.map(&:to_sym) +
      [:mab] - %i[find_template markaby]),
    json: [:yajl]
  }
  engines.default = []
  defined?(JRUBY_VERSION) ? jrubyify(engines) : engines
end

def self.jrubyify(engs)

def self.jrubyify(engs)
  not_supported = [:markdown]
  engs.each_key do |key|
    engs[key].collect! { |eng| eng == :yajl ? :json_pure : eng }
    engs[key].delete_if { |eng| not_supported.include?(eng) }
  end
  engs
end

def self.registered(base)

def self.registered(base)
  base.set :ext_map, Hash.new { |h, k| h[k] = [] }
  base.set :template_engines, engines
  base.remap_extensions
  base.helpers Helpers
end

def compile!(verb, path, block, **options)

def compile!(verb, path, block, **options)
  options[:provides] ||= respond_to if respond_to
  super
end

def mime_type(*)

def mime_type(*)
  result = super
  remap_extensions
  result
end

def remap_extensions

def remap_extensions
  ext_map.clear
  Rack::Mime::MIME_TYPES.each { |e, t| ext_map[t] << e[1..].to_sym }
  ext_map['text/javascript'] << 'js'
  ext_map['text/xml'] << 'xml'
end

def rendering_method(engine)

def rendering_method(engine)
  return [engine] if Sinatra::Templates.method_defined? engine
  return [:mab] if engine.to_sym == :markaby
  %i[render engine]
end

def respond_to(*formats)

def respond_to(*formats)
  @respond_to ||= nil
  if formats.any?
    @respond_to ||= []
    @respond_to.concat formats
  elsif @respond_to.nil? && superclass.respond_to?(:respond_to)
    superclass.respond_to
  else
    @respond_to
  end
end