Module: ActiveFedora::Predicates

Defined in:
lib/active_fedora/predicates.rb

Class Method Summary collapse

Class Method Details

.default_predicate_namespaceObject



72
73
74
# File 'lib/active_fedora/predicates.rb', line 72

def self.default_predicate_namespace
  predicate_config[:default_namespace]
end

.find_graph_predicate(predicate) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/active_fedora/predicates.rb', line 3

def self.find_graph_predicate(predicate)
  #TODO, these could be cached
  case predicate
  when :has_model, "hasModel", :hasModel
    xmlns="info:fedora/fedora-system:def/model#"
    begin
      rel_predicate = predicate_lookup(predicate,xmlns)
    rescue UnregisteredPredicateError
      xmlns = nil
      rel_predicate = nil
    end
  else
    xmlns="info:fedora/fedora-system:def/relations-external#"
    begin
      rel_predicate = predicate_lookup(predicate,xmlns)
    rescue UnregisteredPredicateError
      xmlns = nil
      rel_predicate = nil
    end
  end
    
  unless xmlns && rel_predicate
    rel_predicate, xmlns = find_predicate(predicate)
  end

  vocabularies[xmlns][rel_predicate] 
end

.find_predicate(predicate) ⇒ Object



76
77
78
79
80
81
82
83
# File 'lib/active_fedora/predicates.rb', line 76

def self.find_predicate(predicate)
  predicate_mappings.each do |namespace,predicates|
    if predicates.fetch(predicate,nil)
      return predicates[predicate], namespace
    end
  end
  raise ActiveFedora::UnregisteredPredicateError, "Unregistered predicate: #{predicate.inspect}"
end

.predicate_configObject



60
61
62
# File 'lib/active_fedora/predicates.rb', line 60

def self.predicate_config
  @@predicate_config ||= ActiveFedora.predicate_config
end

.predicate_config=(value) ⇒ Object



53
54
55
56
57
58
# File 'lib/active_fedora/predicates.rb', line 53

def self.predicate_config= value
  unless value.nil? or (value.is_a?(Hash) and [:predicate_mapping,:default_namespace].all? { |key| value.has_key? key })
    raise TypeError, "predicate_config must specify :predicate_mapping and :default_namespace" 
  end
  @@predicate_config = value 
end

.predicate_lookup(predicate, namespace = "info:fedora/fedora-system:def/relations-external#") ⇒ Object

If predicate is a symbol, looks up the predicate in the predicate_mappings If predicate is not a Symbol, returns the predicate untouched

Raises:

  • UnregisteredPredicateError if the predicate is a symbol but is not found in the predicate_mappings



42
43
44
45
46
47
48
49
50
51
# File 'lib/active_fedora/predicates.rb', line 42

def self.predicate_lookup(predicate,namespace="info:fedora/fedora-system:def/relations-external#")
  if predicate.class == Symbol 
    if predicate_mappings[namespace].has_key?(predicate)
      return predicate_mappings[namespace][predicate]
    else
      raise ActiveFedora::UnregisteredPredicateError
    end
  end
  return predicate
end

.predicate_mappingsObject



68
69
70
# File 'lib/active_fedora/predicates.rb', line 68

def self.predicate_mappings
  predicate_config[:predicate_mapping]
end

.predicate_namespacesObject



64
65
66
# File 'lib/active_fedora/predicates.rb', line 64

def self.predicate_namespaces
  predicate_config[:predicate_namespaces] ||= {}
end

.vocabularies(vocabs = {}) ⇒ Object



31
32
33
34
35
36
37
# File 'lib/active_fedora/predicates.rb', line 31

def self.vocabularies(vocabs = {})
  @vocabularies ||= vocabs
  predicate_mappings.keys.each do |ns| 
    @vocabularies[ns] = RDF::Vocabulary.new(ns) unless @vocabularies.has_key? ns
  end
  @vocabularies
end