module Sinatra::JSON

def encode(object)

def encode(object)
  ::MultiJson.dump(object)
end

def json(object, options = {})

def json(object, options = {})
  content_type resolve_content_type(options)
  resolve_encoder_action object, resolve_encoder(options)
end

def resolve_content_type(options = {})

def resolve_content_type(options = {})
  options[:content_type] || settings.json_content_type
end

def resolve_encoder(options = {})

def resolve_encoder(options = {})
  options[:json_encoder] || settings.json_encoder
end

def resolve_encoder_action(object, encoder)

def resolve_encoder_action(object, encoder)
  %i[encode generate].each do |method|
    return encoder.send(method, object) if encoder.respond_to? method
  end
  raise "#{encoder} does not respond to #generate nor #encode" unless encoder.is_a? Symbol
  object.__send__(encoder)
end