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)