<!DOCTYPE html>

<html>
<head>
  <title>sample42.rb</title>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <meta name="viewport" content="width=device-width, target-densitydpi=160dpi, initial-scale=1.0; maximum-scale=1.0; user-scalable=0;">
  <link rel="stylesheet" media="all" href="docco.css" />
</head>
<body>
  <div id="container">
    <div id="background"></div>
    
    <ul class="sections">
        
          <li id="title">
              <div class="annotation">
                  <h1>sample42.rb</h1>
              </div>
          </li>
        
        
        
        <li id="section-1">
            <div class="annotation">
              
              <div class="pilwrap ">
                <a class="pilcrow" href="#section-1">&#182;</a>
              </div>
              <p>GET request</p>

            </div>
            
            <div class="content"><div class='highlight'><pre>get <span class="hljs-string">'/sample-42-how-to-download-document-with-annotations-using-groupdocs'</span> <span class="hljs-keyword">do</span>
  haml <span class="hljs-symbol">:sample42</span>
<span class="hljs-keyword">end</span></pre></div></div>
            
        </li>
        
        
        <li id="section-2">
            <div class="annotation">
              
              <div class="pilwrap ">
                <a class="pilcrow" href="#section-2">&#182;</a>
              </div>
              <p>POST request</p>

            </div>
            
            <div class="content"><div class='highlight'><pre>post <span class="hljs-string">'/sample-42-how-to-download-document-with-annotations-using-groupdocs'</span> <span class="hljs-keyword">do</span></pre></div></div>
            
        </li>
        
        
        <li id="section-3">
            <div class="annotation">
              
              <div class="pilwrap ">
                <a class="pilcrow" href="#section-3">&#182;</a>
              </div>
              <p>Set variables</p>

            </div>
            
            <div class="content"><div class='highlight'><pre>  set <span class="hljs-symbol">:client_id</span>, params[<span class="hljs-symbol">:clientId</span>]
  set <span class="hljs-symbol">:private_key</span>, params[<span class="hljs-symbol">:privateKey</span>]
  set <span class="hljs-symbol">:file_id</span>, params[<span class="hljs-symbol">:fileId</span>]
  set <span class="hljs-symbol">:base_path</span>, params[<span class="hljs-symbol">:basePath</span>]

  <span class="hljs-keyword">begin</span></pre></div></div>
            
        </li>
        
        
        <li id="section-4">
            <div class="annotation">
              
              <div class="pilwrap ">
                <a class="pilcrow" href="#section-4">&#182;</a>
              </div>
              <p>Check required variables</p>

            </div>
            
            <div class="content"><div class='highlight'><pre>    raise <span class="hljs-string">'Please enter all required parameters'</span> <span class="hljs-keyword">if</span> settings.client_id.empty? <span class="hljs-keyword">or</span> settings.private_key.empty?</pre></div></div>
            
        </li>
        
        
        <li id="section-5">
            <div class="annotation">
              
              <div class="pilwrap ">
                <a class="pilcrow" href="#section-5">&#182;</a>
              </div>
              <p>Prepare base path</p>

            </div>
            
            <div class="content"><div class='highlight'><pre>    <span class="hljs-keyword">if</span> settings.base_path.empty?
      base_path = <span class="hljs-string">'https://api.groupdocs.com'</span>
    <span class="hljs-keyword">elsif</span> settings.base_path.match(<span class="hljs-string">'/v2.0'</span>)
      base_path = settings.base_path.split(<span class="hljs-string">'/v2.0'</span>)[<span class="hljs-number">0</span>]
    <span class="hljs-keyword">else</span>
      base_path = settings.base_path
    <span class="hljs-keyword">end</span></pre></div></div>
            
        </li>
        
        
        <li id="section-6">
            <div class="annotation">
              
              <div class="pilwrap ">
                <a class="pilcrow" href="#section-6">&#182;</a>
              </div>
              <p>Configure your access to API server</p>

            </div>
            
            <div class="content"><div class='highlight'><pre>    <span class="hljs-constant">GroupDocs</span>.configure <span class="hljs-keyword">do</span> |groupdocs|
      groupdocs.client_id = settings.client_id
      groupdocs.private_key = settings.private_key</pre></div></div>
            
        </li>
        
        
        <li id="section-7">
            <div class="annotation">
              
              <div class="pilwrap ">
                <a class="pilcrow" href="#section-7">&#182;</a>
              </div>
              <p>Optionally specify API server and version</p>

            </div>
            
            <div class="content"><div class='highlight'><pre>      groupdocs.api_server = base_path <span class="hljs-comment"># default is 'https://api.groupdocs.com'</span>

    <span class="hljs-keyword">end</span>

    document = <span class="hljs-constant">GroupDocs::Storage::File</span>.new(<span class="hljs-symbol">:guid</span> =&gt; settings.file_id).to_document</pre></div></div>
            
        </li>
        
        
        <li id="section-8">
            <div class="annotation">
              
              <div class="pilwrap ">
                <a class="pilcrow" href="#section-8">&#182;</a>
              </div>
              <p>Check, has document the annotations?</p>

            </div>
            
            <div class="content"><div class='highlight'><pre>    raise <span class="hljs-string">'Your document has no annotations'</span> <span class="hljs-keyword">if</span> document.annotations!.empty?</pre></div></div>
            
        </li>
        
        
        <li id="section-9">
            <div class="annotation">
              
              <div class="pilwrap ">
                <a class="pilcrow" href="#section-9">&#182;</a>
              </div>
              <p>Create Hash with the options for job. :status=&gt; -1 means the Draft status of the job</p>

            </div>
            
            <div class="content"><div class='highlight'><pre>    options = {<span class="hljs-symbol">:actions</span> =&gt; [<span class="hljs-symbol">:import_annotations</span>], <span class="hljs-symbol">:name</span> =&gt; <span class="hljs-string">'sample'</span>}</pre></div></div>
            
        </li>
        
        
        <li id="section-10">
            <div class="annotation">
              
              <div class="pilwrap ">
                <a class="pilcrow" href="#section-10">&#182;</a>
              </div>
              <p>Create Job with provided options with Draft status (Sheduled job)</p>

            </div>
            
            <div class="content"><div class='highlight'><pre>    job = <span class="hljs-constant">GroupDocs::Job</span>.create!(options)</pre></div></div>
            
        </li>
        
        
        <li id="section-11">
            <div class="annotation">
              
              <div class="pilwrap ">
                <a class="pilcrow" href="#section-11">&#182;</a>
              </div>
              <p>Add the documents to previously created Job</p>

            </div>
            
            <div class="content"><div class='highlight'><pre>    job.add_document!(document, {<span class="hljs-symbol">:check_ownership</span> =&gt; <span class="hljs-keyword">false</span>})</pre></div></div>
            
        </li>
        
        
        <li id="section-12">
            <div class="annotation">
              
              <div class="pilwrap ">
                <a class="pilcrow" href="#section-12">&#182;</a>
              </div>
              <p>Update the Job with new status. :status =&gt; ‘0’ mean Active status of the job (Start the job)</p>

            </div>
            
            <div class="content"><div class='highlight'><pre>    id = job.update!({<span class="hljs-symbol">:status</span> =&gt; <span class="hljs-string">'0'</span>})

    i = <span class="hljs-number">1</span>

    <span class="hljs-keyword">while</span> i&lt;<span class="hljs-number">5</span> <span class="hljs-keyword">do</span>
      sleep(<span class="hljs-number">5</span>)
      job = <span class="hljs-constant">GroupDocs::Job</span>.get!(id[<span class="hljs-symbol">:job_id</span>])
      <span class="hljs-keyword">break</span> <span class="hljs-keyword">if</span> job.status == <span class="hljs-symbol">:archived</span>
      i  = i + <span class="hljs-number">1</span>
    <span class="hljs-keyword">end</span></pre></div></div>
            
        </li>
        
        
        <li id="section-13">
            <div class="annotation">
              
              <div class="pilwrap ">
                <a class="pilcrow" href="#section-13">&#182;</a>
              </div>
              <p>Get the document into Pdf format</p>

            </div>
            
            <div class="content"><div class='highlight'><pre>    file = job.documents!()

    document = file[<span class="hljs-symbol">:inputs</span>]</pre></div></div>
            
        </li>
        
        
        <li id="section-14">
            <div class="annotation">
              
              <div class="pilwrap ">
                <a class="pilcrow" href="#section-14">&#182;</a>
              </div>
              <p>Set iframe with document GUID or raise an error</p>

            </div>
            
            <div class="content"><div class='highlight'><pre>    <span class="hljs-keyword">if</span> document</pre></div></div>
            
        </li>
        
        
        <li id="section-15">
            <div class="annotation">
              
              <div class="pilwrap ">
                <a class="pilcrow" href="#section-15">&#182;</a>
              </div>
              <p>Add the signature in url</p>

            </div>
            
            <div class="content"><div class='highlight'><pre>      iframe = <span class="hljs-string">"/document-annotation2/embed/<span class="hljs-subst">#{document[<span class="hljs-number">0</span>].guid}</span>"</span></pre></div></div>
            
        </li>
        
        
        <li id="section-16">
            <div class="annotation">
              
              <div class="pilwrap ">
                <a class="pilcrow" href="#section-16">&#182;</a>
              </div>
              <p>Construct result string</p>

            </div>
            
            <div class="content"><div class='highlight'><pre>      url = <span class="hljs-constant">GroupDocs::Api::Request</span>.new(<span class="hljs-symbol">:path</span> =&gt; iframe).prepare_and_sign_url</pre></div></div>
            
        </li>
        
        
        <li id="section-17">
            <div class="annotation">
              
              <div class="pilwrap ">
                <a class="pilcrow" href="#section-17">&#182;</a>
              </div>
              <p>Generate iframe URL</p>

            </div>
            
            <div class="content"><div class='highlight'><pre>      <span class="hljs-keyword">case</span> base_path
        <span class="hljs-keyword">when</span> <span class="hljs-string">'https://stage-api-groupdocs.dynabic.com'</span>
          iframe = <span class="hljs-string">"https://stage-api-groupdocs.dynabic.com<span class="hljs-subst">#{url}</span>"</span>
        <span class="hljs-keyword">when</span> <span class="hljs-string">'https://dev-api-groupdocs.dynabic.com'</span>
          iframe = <span class="hljs-string">"https://dev-apps.groupdocs.com<span class="hljs-subst">#{url}</span>"</span>
        <span class="hljs-keyword">else</span>
          iframe = <span class="hljs-string">"https://apps.groupdocs.com<span class="hljs-subst">#{url}</span>"</span>
      <span class="hljs-keyword">end</span>

      iframe = <span class="hljs-string">"&lt;iframe width='100%' height='600' id='downloadframe' frameborder='0' src='<span class="hljs-subst">#{iframe}</span>'&gt;&lt;/iframe&gt;"</span>

      path = <span class="hljs-string">"<span class="hljs-subst">#{<span class="hljs-constant">File</span>.dirname(__FILE_<span class="hljs-number">_</span>)}</span>/../public/downloads"</span></pre></div></div>
            
        </li>
        
        
        <li id="section-18">
            <div class="annotation">
              
              <div class="pilwrap ">
                <a class="pilcrow" href="#section-18">&#182;</a>
              </div>
              <p>Remove all files from download directory or create folder if it not there</p>

            </div>
            
            <div class="content"><div class='highlight'><pre>      <span class="hljs-keyword">if</span> <span class="hljs-constant">File</span>.directory?(path)
        <span class="hljs-constant">Dir</span>.foreach(path) { |f| fn = <span class="hljs-constant">File</span>.join(path, f); <span class="hljs-constant">File</span>.delete(fn) <span class="hljs-keyword">if</span> f != <span class="hljs-string">'.'</span> &amp;&amp; f != <span class="hljs-string">'..'</span> }
      <span class="hljs-keyword">else</span>
        <span class="hljs-constant">Dir::</span>mkdir(path)
      <span class="hljs-keyword">end</span>

      <span class="hljs-constant">GroupDocs::User</span>.download!(path, document[<span class="hljs-number">0</span>].outputs[<span class="hljs-number">0</span>].name, document[<span class="hljs-number">0</span>].outputs[<span class="hljs-number">0</span>].guid)
      message = <span class="hljs-string">"&lt;span style=\"color:green\"&gt;File with annotations was downloaded to server's local folder. You can check them &lt;a href=\"/downloads/<span class="hljs-subst">#{document[<span class="hljs-number">0</span>].outputs[<span class="hljs-number">0</span>].name}</span>\" download&gt;here&lt;/a&gt;&lt;/span&gt;"</span>
    <span class="hljs-keyword">else</span>
      raise <span class="hljs-string">'File was not converted'</span>
    <span class="hljs-keyword">end</span>
  <span class="hljs-keyword">rescue</span> <span class="hljs-constant">Exception</span> =&gt; e
    err = e.message
  <span class="hljs-keyword">end</span></pre></div></div>
            
        </li>
        
        
        <li id="section-19">
            <div class="annotation">
              
              <div class="pilwrap ">
                <a class="pilcrow" href="#section-19">&#182;</a>
              </div>
              <p>Set variables for template</p>

            </div>
            
            <div class="content"><div class='highlight'><pre>  haml <span class="hljs-symbol">:sample42</span>, <span class="hljs-symbol">:locals</span> =&gt; {<span class="hljs-symbol">:userId</span> =&gt; settings.client_id, <span class="hljs-symbol">:privateKey</span> =&gt; settings.private_key, <span class="hljs-symbol">:err</span> =&gt; err, <span class="hljs-symbol">:iframe</span> =&gt; iframe, <span class="hljs-symbol">:message</span> =&gt; message}
<span class="hljs-keyword">end</span></pre></div></div>
            
        </li>
        
    </ul>
  </div>
</body>
</html>