class NolijWeb::Handler
Attributes
Public Class Methods
# 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 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
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
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 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 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
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 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
# File lib/nolij_web/handler.rb 89 def print_document(options = {}, &block) 90 doc_ids = options.delete(:document_id) 91 raise AttributeMissingError, 'At least one document ID is required to print a document.' unless doc_ids 92 options[:document_id] = [doc_ids].flatten.compact.collect(&:to_i).join('-') 93 94 allowed_query_params_keys = [:user_code, :wfma_code, :user_id, :document_id] 95 query_params = format_query_params(options, allowed_query_params_keys) 96 headers = options[:headers] || {} 97 relative_path = [@@doc_handler_path, 'print'].join('/') 98 99 @connection.get relative_path, headers.merge(:params => query_params), &block 100 end
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 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
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
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
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 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
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