lib/active_rdf/objectmanager/namespace.rb in activerdf-1.2.2 vs lib/active_rdf/objectmanager/namespace.rb in activerdf-1.2.3
- old
+ new
@@ -11,9 +11,33 @@
def self.register(prefix, fullURI)
raise ActiveRdfError, 'prefix nor uri can be empty' if (prefix.to_s.empty? or fullURI.to_s.empty?)
$activerdflog.info "Namespace: registering #{fullURI} to #{prefix}"
@@namespaces[prefix.to_sym] = fullURI.to_s
@@inverted_namespaces[fullURI.to_s] = prefix.to_sym
+
+ # enable namespace lookups through FOAF::name
+ # if FOAF defined, add to it
+ if Object.const_defined?(prefix.to_s.upcase)
+ ns = Object.const_get(prefix.to_s.upcase)
+ else
+ # otherwise create a new module for it
+ ns = Module.new
+ Object.const_set(prefix.to_s.upcase, ns)
+ end
+
+ # catch FOAF::name or all other lookups
+ class << ns
+ def method_missing(method, *args)
+ Namespace.lookup(self.to_s.downcase.to_sym, method)
+ end
+
+ # make some builtin methods private because lookup doesn't work otherwise
+ # on e.g. RDF::type and FOAF::name
+ [:type, :name].each {|m| private(m) }
+ end
+
+ # return the namespace proxy object
+ ns
end
# returns a resource whose URI is formed by concatenation of prefix and localname
def self.lookup(prefix, localname)
full_resource = expand(prefix, localname)