class RDF::Virtuoso::Repository

Constants

READ_METHODS
RESULT_JSON
RESULT_XML
WRITE_METHODS

Attributes

auth_method[R]
password[R]
update_uri[R]
uri[R]
username[R]

Public Class Methods

new(uri, opts={}, &block) click to toggle source
# File lib/rdf/virtuoso/repository.rb, line 28
def initialize(uri, opts={}, &block)
  @uri             = URI.parse(uri)
  @update_uri      = URI.parse(opts[:update_uri]) if opts[:update_uri]
  @base_uri        = "#{@uri.scheme}://#{@uri.host}"
  @base_uri       += ":" + @uri.port.to_s if @uri.port
  @username        = opts[:username]    || nil
  @password        = opts[:password]    || nil
  @auth_method     = opts[:auth_method] || 'digest'
  @timeout         = opts[:timeout]     || 5 # default timeout 5 seconds

  @sparql_endpoint = @uri.request_uri
  @sparul_endpoint = @update_uri.nil? ? @sparql_endpoint : @update_uri.request_uri
  self.class.base_uri @base_uri
end

Private Instance Methods

api_get(query, options = {}) click to toggle source
# File lib/rdf/virtuoso/repository.rb, line 96
def api_get(query, options = {})
  # prefer sparul endpoint with auth if present to allow SELECT/CONSTRUCT access to protected graphs
  if @sparul_endpoint
    self.class.endpoint @sparul_endpoint
    Timeout::timeout(@timeout) {
      get '/', extra_query: { query: query }.merge(options),
               extra_request: extra_request_options,
               transform: RDF::Virtuoso::Parser::JSON
    }
  else
    self.class.endpoint @sparql_endpoint
    Timeout::timeout(@timeout) {
    puts self.inspect
      get '/', extra_query: { query: query }.merge(options),
               transform: RDF::Virtuoso::Parser::JSON
    }
  end
end
api_post(query, options = {}) click to toggle source
# File lib/rdf/virtuoso/repository.rb, line 115
def api_post(query, options = {})
  self.class.endpoint @sparul_endpoint
  Timeout::timeout(@timeout) {
    post '/', extra_body: { query: query }.merge(options),
              extra_request: extra_request_options,
              response_container: [
                "results", "bindings", 0, "callret-0", "value"]
  }
end
auth() click to toggle source
# File lib/rdf/virtuoso/repository.rb, line 92
def auth
  { username: @username, password: @password }
end
base_query_options() click to toggle source
# File lib/rdf/virtuoso/repository.rb, line 75
def base_query_options
  { format: RESULT_JSON }
end
base_request_options() click to toggle source
# File lib/rdf/virtuoso/repository.rb, line 79
def base_request_options
  { headers: headers }
end
check_response_errors(response) click to toggle source
# File lib/rdf/virtuoso/repository.rb, line 60
def check_response_errors(response)
  case response.code
  when 401
    raise NotAuthorized.new
  when 400
    raise MalformedQuery.new(response.parsed_response)
  when 500..599
    raise ServerError.new(response.body)
  end
end
extra_request_options() click to toggle source
# File lib/rdf/virtuoso/repository.rb, line 83
def extra_request_options
  case @auth_method
  when 'basic'
    { basic_auth: auth }
  when 'digest'
    { digest_auth: auth }
  end
end
headers() click to toggle source
# File lib/rdf/virtuoso/repository.rb, line 71
def headers
  { 'Accept' => [RESULT_JSON, RESULT_XML].join(', ') }
end