class NolijWeb::Handler

Attributes

connection[R]

Public Class Methods

new(connection_config) click to toggle source
   # File lib/nolij_web/handler.rb
12 def initialize(connection_config)
13   @config = connection_config
14   @connection = Connection.new(@config)
15 end

Public Instance Methods

delete_document(options = {}, &block) click to toggle source

Delete a document required options: :document_id, :folder_id additional options: :user_code, :user_id, :wfma_code

    # File lib/nolij_web/handler.rb
125 def delete_document(options = {}, &block)
126   folder_id = options[:folder_id]
127   document_id = options[:document_id]
128   raise AttributeMissingError, 'Folder ID is required to delete a document.' unless folder_id.is_a?(String) && ! folder_id.empty?
129   raise AttributeMissingError, 'Document ID is required to delete a document.' unless document_id.is_a?(String) && ! document_id.empty?
130 
131   allowed_query_params_keys = [:user_code, :user_id, :wfma_code]
132   query_params = format_query_params(options, allowed_query_params_keys)
133   headers = options[:headers] || {}
134   relative_path = [@@doc_handler_path, 'delete', folder_id, document_id].join('/') + formatted_query
135 
136   @connection.delete relative_path, headers.merge(:params => query_params), &block
137 end
document_metadata(options = {}, &block) click to toggle source

Retrieve metadata for a document as a hash see document_metadata_xml for options

    # File lib/nolij_web/handler.rb
159 def document_metadata(options = {}, &block)
160   doc = document_metadata_xml(options, &block)
161   node = doc.xpath('/documentmeta').first
162   doc_metadata = node.attributes.inject({}){|n, (k,v)| n[k] = v.value; n}
163   doc_metadata['pages'] = node.xpath('//pagemeta').collect{|p|
164     p.attributes.inject({}){|n, (k,v)| n[k] = v.value; n}
165   }
166   return doc_metadata
167 end
document_metadata_xml(options = {}, &block) click to toggle source

Retrieve metadata for a document as XML required options: :document_id, :folder_id additional options: :user_code, :user_id, :start, :end, :wfma_code

    # File lib/nolij_web/handler.rb
142 def document_metadata_xml(options = {}, &block)
143   folder_id = options[:folder_id]
144   document_id = options[:document_id].to_i
145   raise AttributeMissingError, 'Folder ID is required to retrieve a document.' unless folder_id.is_a?(String) && ! folder_id.empty?
146   raise AttributeMissingError, 'Document ID is required to retrieve a document.' unless document_id > 0
147 
148   allowed_query_params_keys = [:user_code, :user_id, :start, :end, :wfma_code]
149   query_params = format_query_params(options, allowed_query_params_keys)
150   headers = options[:headers] || {}
151   relative_path = [@@doc_handler_path, folder_id, document_id, 'documentmeta'].join('/')
152 
153   response = @connection.get relative_path, headers.merge(:params => query_params), &block
154   doc = Nokogiri.XML(response)
155 end
folder_contents(options = {}, &block) click to toggle source

Folder contents as array Returns an array of hashes with the file info for each file in the folder See folder_info for options

   # File lib/nolij_web/handler.rb
37 def folder_contents(options = {}, &block)
38   folder = folder_info(options, &block)
39   files = folder.xpath('//folderobjects//folderobject')
40 
41   file_attrs = files.collect(&:attributes)
42   file_attrs = file_attrs.collect {|attr|
43     attr.inject({}){|n, (k,v)| n[k] = v.value; n}
44   }
45 end
folder_info(options = {}, &block) click to toggle source

Folder contents as Nokogiri XML required options: :folder_id additional options: :user_code, :user_id, :sort, :offset, :limit, :wfma_code

   # File lib/nolij_web/handler.rb
20 def folder_info(options = {}, &block)
21   folder_id = options[:folder_id]
22   raise AttributeMissingError, 'Folder ID is required.' unless folder_id.is_a?(String) && !folder_id.empty?
23 
24   allowed_query_params_keys = [:user_code, :user_id, :sort, :offset, :limit, :wfma_code]
25   query_params = format_query_params(options, allowed_query_params_keys)
26   headers = options[:headers] || {}
27   relative_path = [@@doc_handler_path, options[:folder_id]].join('/')
28 
29   response = @connection.get relative_path, headers.merge(:params => query_params),  &block
30 
31   folder = Nokogiri.XML(response)
32 end
login_check(options = {}) click to toggle source

URL or path to verify that user is authenticated to Nolijweb in their browser. If the user is logged in redirect them to :redir path. If not, redirect to login and return them to the URL provided once they've authenticated. Redirect path must be relative to /public :redir is required. A path is returned unless :full_url => true

    # File lib/nolij_web/handler.rb
174 def login_check(options = {})
175   raise AttributeMissingError, 'Redirect path is required to check login' unless options[:redir].is_a?(String) && !options[:redir].empty?
176 
177   full_url = options.delete(:full_url) || false
178   allowed_query_params_keys = [:redir]
179   formatted_query = query_str(:allowed_query_params_keys => allowed_query_params_keys , :query_params => options)
180 
181   relative_path = ['public', 'apiLoginCheck.jsp'].join('/') + formatted_query
182   path = relative_path
183   url = full_url ? [@connection.base_url, path].join('/') : path
184   return url
185 end
print_document(options = {}, &block) click to toggle source

Print one or more documents to a single pdf required options: :document_id - can be a number or an array of numbers additional options: :user_code, :document_id, :user_id

retrieve_document_image(options = {}, &block) click to toggle source

Return a jpeg of a page of a document required options: :document_id, :folder_id additional options: :user_code, :user_id, :rotation, :wpixels, :hpixels, :redact, :annot, :wfma_code, :page :page will default to 1 if no page is provided.

    # File lib/nolij_web/handler.rb
106 def retrieve_document_image(options = {}, &block)
107   folder_id = options[:folder_id]
108   document_id = options[:document_id].to_i
109   page = options[:page].to_i
110   page = page == 0 ? 1 : page
111   raise AttributeMissingError, 'Folder ID is required to retrieve a document.' unless folder_id.is_a?(String) && ! folder_id.empty?
112   raise AttributeMissingError, 'Document ID is required to retrieve a document.' unless document_id > 0
113 
114   allowed_query_params_keys = [:user_code, :user_id, :rotation, :wpixels, :hpixels, :redact, :annot, :wfma_code]
115   query_params = format_query_params(options, allowed_query_params_keys)
116   headers = options[:headers] || {}
117   relative_path = [@@doc_handler_path, folder_id, document_id, 'page', page].join('/')
118 
119   @connection.get relative_path, headers.merge(:params => query_params), &block
120 end
submit_document(local_file, options = {}, &block) click to toggle source

Submit a file. A local file path is required. required options: :folder_id additional options: :user_code, :wfma_code, :index_code, :dept_code, :custom_name

   # File lib/nolij_web/handler.rb
51 def submit_document(local_file, options = {}, &block)
52   folder_id = options[:folder_id]
53   folder_id = if folder_id.kind_of?(Numeric) || folder_id.kind_of?(String)
54                 folder_id.to_s
55               else
56                 nil
57               end
58   raise AttributeMissingError, 'Folder ID is required to submit a document.' unless folder_id.is_a?(String) && !folder_id.empty?
59 
60   local_file ||= ''
61   file = begin
62       File.new(local_file)
63     rescue Errno::ENOENT
64     end
65 
66   raise AttributeMissingError, 'Valid file or local filepath is required to submit a document.' unless file.is_a?(File)
67   options[:file_name] = File.basename(file.path)
68   allowed_query_params_keys = [:user_code, :wfma_code, :index_code, :dept_code, :custom_name, :file_name]
69   formatted_query = query_str(:allowed_query_params_keys => allowed_query_params_keys , :query_params => options)
70   relative_path = [@@doc_handler_path, folder_id].join('/') + formatted_query
71 
72   # TODO custom attributes?
73   form_params = {}
74   form_params[:ocrwords] = options[:ocr_words] if options.has_key?(:oci_words)
75   form_params[:my_file] = file
76 
77   #upload file to nolijweb
78   response = @connection.post relative_path, form_params, (options[:headers] || {}), &block
79 
80   # return Nolij file id
81   doc_metadata = Nokogiri.XML(response)
82   document_id = doc_metadata.xpath('//documentmeta/@documentid').first
83   return document_id.value if document_id
84 end
version(&block) click to toggle source

Nolij Web server version information

    # File lib/nolij_web/handler.rb
221 def version(&block)
222   relative_path = [@@api_path, 'version'].join('/')
223   response = @connection.get relative_path, &block
224 
225   info = Nokogiri.XML(response).xpath('//version').collect(&:attributes)
226   info= info.collect {|attr|
227     attr.inject({}){|n, (k,v)| n[k] = v.value; n}
228   }.first
229 end
viewer_url(options = {}) click to toggle source

URL or path to open the standalone document viewer utility. required options: :document_id is required additional options: :user_code, :wfma_code use option :full_url => true for a full url, otherwise a relative path is returned.

    # File lib/nolij_web/handler.rb
191 def viewer_url(options = {})
192   raise AttributeMissingError, 'Document ID is required to launch viewer' unless (options[:document_id].is_a?(String) && !options[:document_id].empty?) || options[:document_id].is_a?(Integer)
193   full_url = options.delete(:full_url) || false
194   url_opts = {}
195   allowed_query_params_keys = [:document_id, :user_code, :wfma_code]
196   formatted_query = query_str(:allowed_query_params_keys => allowed_query_params_keys , :query_params => options)
197   relative_path = [@@doc_viewer_path, 'documentviewer'].join('/') + formatted_query
198   path = relative_path
199   url = full_url ? [@connection.base_url, path].join('/') : path
200   return url
201 end
work_complete(options = {}, &block) click to toggle source

Issue work complete to push item along in work flow required options: :wfma_code, :folder_name additional options: :user_id, :user_code

    # File lib/nolij_web/handler.rb
206 def work_complete(options = {}, &block)
207   raise AttributeMissingError, 'Workflow master code is required for workflow requests.' unless options[:wfma_code]
208   folder_id = options[:folder_id]
209   raise AttributeMissingError, 'Folder ID is required.' unless folder_id
210 
211   raise AttributeMissingError, 'Folder name is required.' unless options[:folder_name]
212 
213   allowed_query_params_keys = [:wfma_code, :user_id, :user_code, :folder_name]
214   formatted_query = query_str(:allowed_query_params_keys => allowed_query_params_keys , :query_params => options)
215   relative_path = [@@workflow_path, folder_id, formatted_query].join('/')
216 
217   @connection.post relative_path, {}, options[:headers] || {}, &block
218 end

Private Instance Methods

format_query_params(params = {}, keys = []) click to toggle source

format param names and return the query hash

    # File lib/nolij_web/handler.rb
247 def format_query_params(params = {}, keys = [])
248   keys.inject([]){|m, v| v.to_sym; m}
249   query_params = params.select{|k,v| keys.include?(k.to_sym)}
250   cleaned = query_params.inject({}) do |p,(k,v)|
251     key = k.to_s.gsub('_', '').to_sym
252     value = v.to_s
253     p[key] = value
254     p 
255   end
256   return cleaned.reject{|k,v| v.empty?}
257 end
query_str(options = {}) click to toggle source

TODO Add query and query results methods

    # File lib/nolij_web/handler.rb
235 def query_str(options = {})
236   keys = options[:allowed_query_params_keys] || []
237   query_params = options[:query_params] || {}
238   query_str = if query_params.empty?
239         ''
240       else
241        format_query_params(query_params, keys).collect{|k,v| "#{k}=#{URI.escape v}"}.join('&')
242       end
243   return query_str.empty? ? '' : "?#{query_str}" 
244 end