class KramdownRFC::KDRFC
def process_xml_remotely(input, output, *flags)
def process_xml_remotely(input, output, *flags) format = flags[0] || "--text" warn "* converting remotely from xml #{input} to #{format} #{output}" if @options.verbose maf = MODE_AS_FORMAT[format] unless maf raise ArgumentError.new("*** don't know how to convert remotely from xml #{input} to #{format} #{output}") end url = URI(XML2RFC_WEBSERVICE + maf) req = Net::HTTP::Post.new(url) form = [["file", File.open(input), {filename: "input.xml", content_type: "text/plain"}]] diag = ["url/form: ", url, form].inspect req.set_form(form, 'multipart/form-data') warn "* requesting at #{url}" if @options.verbose t0 = Time.now res = persistent_http.request(url, req) warn "* elapsed time: #{Time.now - t0}" if @options.verbose case res when Net::HTTPBadRequest result = checked_json(res.body) raise IOError.new("*** Remote Error: #{result["error"]}") when Net::HTTPOK case res.content_type when 'application/json' if res.body == '' raise IOError.new("*** HTTP response is empty with status #{res.code}, not written") end # warn "* res.body #{res.body}" if @options.verbose result = checked_json(res.body) if logs = result["logs"] if errors = logs["errors"] errors.each do |err| warn("*** Error: #{err}") end end if warnings = logs["warnings"] warnings.each do |w| warn("** Warning: #{w}") end end end raise IOError.new("*** No useful result from remote") unless result["url"] res = persistent_http.request(URI(result["url"])) warn "* result content type #{res.content_type}" if @options.verbose if res.body == '' raise IOError.new("*** Second HTTP response is empty with status #{res.code}, not written") end File.open(output, "w") do |fo| fo.print(res.body) end warn "* #{output} written" if @options.verbose else warning = "*** HTTP response has unexpected content_type #{res.content_type} with status #{res.code}, #{diag}" warning << "\n" warning << res.body raise IOError.new(warning) end else raise IOError.new("*** HTTP response: #{res.code}, #{diag}") end end