module BELParser::Resource
Constants
- DEFAULT_SPARQL_ENDPOINT
- READER_LOCK
- RESOLVE_URI_LOCK
- URISTRING_PATTERN
Public Class Methods
default_uri_reader()
click to toggle source
# File lib/bel_parser/resource.rb, line 20 def self.default_uri_reader READER_LOCK.synchronize do @default_uri_reader end end
default_uri_reader=(uri_reader)
click to toggle source
# File lib/bel_parser/resource.rb, line 26 def self.default_uri_reader=(uri_reader) READER_LOCK.synchronize do @default_uri_reader = uri_reader end end
default_url_reader()
click to toggle source
# File lib/bel_parser/resource.rb, line 32 def self.default_url_reader READER_LOCK.synchronize do @default_url_reader end end
default_url_reader=(url_reader)
click to toggle source
# File lib/bel_parser/resource.rb, line 38 def self.default_url_reader=(url_reader) READER_LOCK.synchronize do @default_url_reader = url_reader end end
resolve_uri(resource_url)
click to toggle source
Resolves the URI String from the annotation or namespace resource.
The resource must contain a _URIString=…_ property.
@param [#to_s] resource_url the resource URL to resolve the URI from @return [String] the resource URI specified in the resource
# File lib/bel_parser/resource.rb, line 50 def self.resolve_uri(resource_url) resource_url = resource_url.to_s RESOLVE_URI_LOCK.synchronize do @uri_hash ||= {} return @uri_hash[resource_url] if @uri_hash.key?(resource_url) end uri = URI(resource_url) request = Net::HTTP::Get.new(uri) request['Range'] = 'bytes=0-5000' resource_uri = nil http = Net::HTTP.new(uri.hostname, uri.port) http.request(request) do |response| response.read_body do |chunk| uristring = chunk.lines.detect { |l| l =~ URISTRING_PATTERN } if uristring resource_uri = uristring.match(URISTRING_PATTERN)[1] break end end end RESOLVE_URI_LOCK.synchronize do @uri_hash ||= {} @uri_hash[resource_url] = resource_uri end resource_uri end