Module: URIResolver
  
  
  
  
  
    
  
    
      - Includes:
 
      - JSONModel
 
      
    
  
  
    - Included in:
 
    - ArchivesSpaceService
 
    
  
  
    - Defined in:
 
    - backend/app/lib/uri_resolver.rb
 
  
Defined Under Namespace
  
    
  
    
      Classes: URIResolver
    
  
    
  
  
    
      Class Method Summary
      (collapse)
    
    
  
    
      Instance Method Summary
      (collapse)
    
    
  
  
  
  
  
  
  
  
  
  Methods included from JSONModel
  JSONModel, #JSONModel, add_error_handler, all, allow_unmapped_enum_value, backend_url, client_mode?, custom_validations, destroy_model, enum_default_value, enum_values, handle_error, init, load_schema, #models, models, parse_jsonmodel_ref, parse_reference, repository, repository_for, schema_src, set_repository, strict_mode, strict_mode?, with_repository
  
    Class Method Details
    
      
  
  
    + (Object) ensure_reference_is_valid(reference, active_repository = nil) 
  
  
  
  
    
      
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239 
     | 
    
      # File 'backend/app/lib/uri_resolver.rb', line 225
def self.ensure_reference_is_valid(reference, active_repository = nil)
  
  if active_repository && \
    reference.start_with?("/repositories/") && \
    reference !~ /^\/repositories\/#{active_repository}($|\/)/
    raise ReferenceError.new("Inter-repository links are not allowed in this operation! (Bad link: '#{reference}'; Active repo: '#/repositories/#{active_repository}')")
  end
  
  if !self.record_exists?(reference)
    raise ReferenceError.new("Reference does not exist! (Reference: '#{reference}')")
  end
end
     | 
  
 
    
      
  
  
    + (Object) forward_rack_request(method, uri, env) 
  
  
  
  
    
      
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208 
     | 
    
      # File 'backend/app/lib/uri_resolver.rb', line 190
def self.forward_rack_request(method, uri, env)
  if env
    env = env.merge('ASPACE_REENTRANT' => true, 'PATH_INFO' => uri,
                    'REQUEST_METHOD' => method)
  else
    env = {
      'REQUEST_METHOD' => method,
      'SCRIPT_NAME' => "",
      'PATH_INFO' => uri,
      'QUERY_STRING' => "",
      'SERVER_NAME' => "archivesspace.org",
      'SERVER_PORT' => 80,
      'rack.input' => StringIO.new,
      'ASPACE_REENTRANT' => true
    }
  end
  ArchivesSpaceService.call(env)
end
     | 
  
 
    
      
  
  
    + (Boolean) record_exists?(uri) 
  
  
  
  
    
      
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257 
     | 
    
      # File 'backend/app/lib/uri_resolver.rb', line 242
def self.record_exists?(uri)
  parsed = JSONModel.parse_reference(uri)
  if parsed
    begin
      model = Kernel.const_get(parsed[:type].camelize)
      return !model[parsed[:id]].nil?
    rescue NameError
      
      
      return true
    end
  end
  false
end
     | 
  
 
    
      
  
  
    + (Object) resolve_references(value, properties_to_resolve, env) 
  
  
  
  
    
      
211
212
213
214
215
216
217
218 
     | 
    
      # File 'backend/app/lib/uri_resolver.rb', line 211
def self.resolve_references(value, properties_to_resolve, env)
  
  
  return value if (properties_to_resolve.nil? || env['ASPACE_REENTRANT'])
  properties = Array(properties_to_resolve).map {|p| p.split(/::/)}
  URIResolver.new(properties, env).resolve_references(value)
end
     | 
  
 
    
   
  
    Instance Method Details
    
      
  
  
    - (Object) resolve_references(*args) 
  
  
  
  
    
      
220
221
222 
     | 
    
      # File 'backend/app/lib/uri_resolver.rb', line 220
def resolve_references(*args)
  ::URIResolver.resolve_references(*args, env)
end
 
     |