Skip to content

Commit

Permalink
added type mapping interface
Browse files Browse the repository at this point in the history
  • Loading branch information
Philipp Brüll committed Mar 29, 2010
1 parent ac1064f commit 6cce56f
Show file tree
Hide file tree
Showing 11 changed files with 173 additions and 25 deletions.
3 changes: 3 additions & 0 deletions lib/allegro_graph/federation.rb
Expand Up @@ -2,6 +2,7 @@
require File.join(File.dirname(__FILE__), "proxy", "statements")
require File.join(File.dirname(__FILE__), "proxy", "query")
require File.join(File.dirname(__FILE__), "proxy", "geo")
require File.join(File.dirname(__FILE__), "proxy", "mapping")

module AllegroGraph

Expand All @@ -15,6 +16,7 @@ class Federation
attr_reader :statements
attr_reader :query
attr_reader :geo
attr_reader :mapping

def initialize(server, name, options = { })
@server, @name = server, name
Expand All @@ -25,6 +27,7 @@ def initialize(server, name, options = { })
@statements = Proxy::Statements.new self
@query = Proxy::Query.new self
@geo = Proxy::Geo.new self
@mapping = Proxy::Mapping.new self
end

def ==(other)
Expand Down
22 changes: 11 additions & 11 deletions lib/allegro_graph/proxy/geo.rb
Expand Up @@ -5,14 +5,14 @@ module Proxy

class Geo

attr_reader :repository_or_session
attr_reader :resource

def initialize(repository_or_session)
@repository_or_session = repository_or_session
def initialize(resource)
@resource = resource
end

def path
"#{@repository_or_session.path}/geo"
"#{@resource.path}/geo"
end

def cartesian_type(strip_width, x_min, y_min, x_max, y_max)
Expand All @@ -23,7 +23,7 @@ def cartesian_type(strip_width, x_min, y_min, x_max, y_max)
:xmax => x_max.to_s,
:ymax => y_max.to_s
}
type = @repository_or_session.request :post, self.path + "/types/cartesian", :parameters => parameters, :expected_status_code => 200
type = @resource.request :post, self.path + "/types/cartesian", :parameters => parameters, :expected_status_code => 200
type.sub! /^.*</, "<"
type.sub! />.*$/, ">"
type
Expand All @@ -38,7 +38,7 @@ def spherical_type(strip_width, unit, latitude_min, longitude_min, latitude_max,
:latmax => latitude_max.to_s,
:longmax => longitude_max.to_s
}
type = @repository_or_session.request :post, self.path + "/types/spherical", :parameters => parameters, :expected_status_code => 200
type = @resource.request :post, self.path + "/types/spherical", :parameters => parameters, :expected_status_code => 200
type.sub! /^.*</, "<"
type.sub! />.*$/, ">"
type
Expand All @@ -50,7 +50,7 @@ def create_polygon(name, type, points)
:resource => "\"#{name}\"",
:point => points.map{ |point| "\"%+g%+g\"^^%s" % [ point[0], point[1], type ] }
}
@repository_or_session.request :put, self.path + "/polygon", :parameters => parameters, :expected_status_code => 204
@resource.request :put, self.path + "/polygon", :parameters => parameters, :expected_status_code => 204
true
end

Expand All @@ -63,7 +63,7 @@ def inside_box(type, predicate, x_min, y_min, x_max, y_max)
:xmax => x_max.to_s,
:ymax => y_max.to_s
}
@repository_or_session.request :get, self.path + "/box", :parameters => parameters, :expected_status_code => 200
@resource.request :get, self.path + "/box", :parameters => parameters, :expected_status_code => 200
end

def inside_circle(type, predicate, x, y, radius)
Expand All @@ -74,7 +74,7 @@ def inside_circle(type, predicate, x, y, radius)
:y => y.to_s,
:radius => radius.to_s
}
@repository_or_session.request :get, self.path + "/circle", :parameters => parameters, :expected_status_code => 200
@resource.request :get, self.path + "/circle", :parameters => parameters, :expected_status_code => 200
end

def inside_haversine(type, predicate, latitude, longitude, radius, unit = :km)
Expand All @@ -86,7 +86,7 @@ def inside_haversine(type, predicate, latitude, longitude, radius, unit = :km)
:radius => radius.to_s,
:unit => unit.to_s
}
@repository_or_session.request :get, self.path + "/haversine", :parameters => parameters, :expected_status_code => 200
@resource.request :get, self.path + "/haversine", :parameters => parameters, :expected_status_code => 200
end

def inside_polygon(type, predicate, name)
Expand All @@ -95,7 +95,7 @@ def inside_polygon(type, predicate, name)
:predicate => predicate,
:polygon => "\"#{name}\""
}
@repository_or_session.request :get, self.path + "/polygon", :parameters => parameters, :expected_status_code => 200
@resource.request :get, self.path + "/polygon", :parameters => parameters, :expected_status_code => 200
end

private
Expand Down
34 changes: 34 additions & 0 deletions lib/allegro_graph/proxy/mapping.rb
@@ -0,0 +1,34 @@

module AllegroGraph

module Proxy

class Mapping

attr_reader :resource

def initialize(resource)
@resource = resource
end

def path
"#{@resource.path}/mapping"
end

def create(type, encoding)
parameters = { :type => type, :encoding => encoding }
@resource.request :put, self.path + "/type", :parameters => parameters, :expected_status_code => 204
true
end

def delete(type)
parameters = { :type => type }
@resource.request :delete, self.path + "/type", :parameters => parameters, :expected_status_code => 204
true
end

end

end

end
10 changes: 5 additions & 5 deletions lib/allegro_graph/proxy/query.rb
Expand Up @@ -8,16 +8,16 @@ class Query
LANGUAGES = [ :sparql, :prolog ].freeze unless defined?(LANGUAGES)

attr_reader :server
attr_reader :repository_or_session
attr_reader :resource
attr_reader :language

def initialize(repository_or_session)
@repository_or_session = repository_or_session
def initialize(resource)
@resource = resource
@language = :sparql
end

def path
@repository_or_session.path
@resource.path
end

def language=(value)
Expand All @@ -27,7 +27,7 @@ def language=(value)

def perform(query)
parameters = { :query => query, :queryLn => @language.to_s }
@repository_or_session.request :get, self.path, :parameters => parameters, :expected_status_code => 200
@resource.request :get, self.path, :parameters => parameters, :expected_status_code => 200
end

end
Expand Down
14 changes: 7 additions & 7 deletions lib/allegro_graph/proxy/statements.rb
Expand Up @@ -5,20 +5,20 @@ module Proxy

class Statements

attr_reader :repository_or_session
attr_reader :resource

def initialize(repository_or_session)
@repository_or_session = repository_or_session
def initialize(resource)
@resource = resource
end

def path
"#{@repository_or_session.path}/statements"
"#{@resource.path}/statements"
end

def create(subject, predicate, object, context = nil)
statement = [ subject, predicate, object ]
statement << context if context
@repository_or_session.request :post, self.path, :body => [ statement ], :expected_status_code => 204
@resource.request :post, self.path, :body => [ statement ], :expected_status_code => 204
true
end

Expand All @@ -38,11 +38,11 @@ def find(options = { })

parameters = nil if parameters.empty?

@repository_or_session.request :get, self.path, :parameters => parameters, :expected_status_code => 200
@resource.request :get, self.path, :parameters => parameters, :expected_status_code => 200
end

def delete
@repository_or_session.request :delete, self.path, :expected_status_code => 200
@resource.request :delete, self.path, :expected_status_code => 200
end

end
Expand Down
3 changes: 3 additions & 0 deletions lib/allegro_graph/repository.rb
Expand Up @@ -3,6 +3,7 @@
require File.join(File.dirname(__FILE__), "proxy", "statements")
require File.join(File.dirname(__FILE__), "proxy", "query")
require File.join(File.dirname(__FILE__), "proxy", "geo")
require File.join(File.dirname(__FILE__), "proxy", "mapping")

module AllegroGraph

Expand All @@ -15,6 +16,7 @@ class Repository
attr_reader :statements
attr_reader :query
attr_reader :geo
attr_reader :mapping

def initialize(server_or_catalog, name, options = { })
@catalog = server_or_catalog.is_a?(AllegroGraph::Server) ? server_or_catalog.root_catalog : server_or_catalog
Expand All @@ -23,6 +25,7 @@ def initialize(server_or_catalog, name, options = { })
@statements = Proxy::Statements.new self
@query = Proxy::Query.new self
@geo = Proxy::Geo.new self
@mapping = Proxy::Mapping.new self
end

def ==(other)
Expand Down
3 changes: 3 additions & 0 deletions lib/allegro_graph/session.rb
Expand Up @@ -2,6 +2,7 @@
require File.join(File.dirname(__FILE__), "proxy", "statements")
require File.join(File.dirname(__FILE__), "proxy", "query")
require File.join(File.dirname(__FILE__), "proxy", "geo")
require File.join(File.dirname(__FILE__), "proxy", "mapping")

module AllegroGraph

Expand All @@ -14,6 +15,7 @@ class Session
attr_reader :statements
attr_reader :query
attr_reader :geo
attr_reader :mapping

def initialize(options = { })
@url = options[:url]
Expand All @@ -23,6 +25,7 @@ def initialize(options = { })
@statements = Proxy::Statements.new self
@query = Proxy::Query.new self
@geo = Proxy::Geo.new self
@mapping = Proxy::Mapping.new self
end

def path
Expand Down
17 changes: 17 additions & 0 deletions spec/fake_transport.yml
Expand Up @@ -266,3 +266,20 @@
:code: "200"
:body:
- [ "\"test_subject\"", "\"at\"", "\"+10.000000000931323+10.000000000931323\"^^<http://franz.com/ns/allegrograph/3.0/geospatial/cartesian/2.0/20.0/2.0/20.0/1.0>" ]
-
:http_method: "put"
:url: "http://localhost:10035/catalogs/test_catalog/repositories/test_repository/mapping/type"
:parameters:
:type: "<time>"
:encoding: "<http://www.w3.org/2001/XMLSchema#dateTime>"
:response:
:code: "204"
:body: ""
-
:http_method: "delete"
:url: "http://localhost:10035/catalogs/test_catalog/repositories/test_repository/mapping/type"
:parameters:
:type: "<time>"
:response:
:code: "204"
:body: ""
51 changes: 50 additions & 1 deletion spec/integration/basic_spec.rb
Expand Up @@ -167,7 +167,6 @@

before :each do
@repository.create_if_missing!

@geo = @repository.geo
end

Expand Down Expand Up @@ -300,4 +299,54 @@

end

describe "type mapping" do

before :each do
@repository.create_if_missing!
@statements = @repository.statements
@mapping = @repository.mapping
end

describe "creating a type" do

it "should return true" do
result = @mapping.create "<time>", "<http://www.w3.org/2001/XMLSchema#dateTime>"
result.should be_true
end

end

describe "creating a type" do

before :each do
@mapping.create "<time>", "<http://www.w3.org/2001/XMLSchema#dateTime>"
end

it "should return true" do
result = @mapping.delete "<time>"
result.should be_true
end

end

describe "using a type for a range query" do

before :each do
@mapping.create "<time>", "<http://www.w3.org/2001/XMLSchema#dateTime>"
@statements.create "\"event_one\"", "<happened>", "\"2010-03-29T17:00:00\"^^<time>"
@statements.create "\"event_two\"", "<happened>", "\"2010-03-29T18:00:00\"^^<time>"
@statements.create "\"event_three\"", "<happened>", "\"2010-03-29T19:00:00\"^^<time>"
end

it "should findthe statements for the given time" do
result = @statements.find :predicate => "<happened>", :object => [ "\"2010-03-29T16:30:00\"^^<time>", "\"2010-03-29T18:30:00\"^^<time>" ]
result.should include([ "\"event_one\"", "<happened>", "\"2010-03-29T17:00:00Z\"^^<http://www.w3.org/2001/XMLSchema#dateTime>" ])
result.should include([ "\"event_two\"", "<happened>", "\"2010-03-29T18:00:00Z\"^^<http://www.w3.org/2001/XMLSchema#dateTime>" ])
result.should_not include([ "\"event_three\"", "<happened>", "\"2010-03-29T19:00:00Z\"^^<http://www.w3.org/2001/XMLSchema#dateTime>" ])
end

end

end

end
2 changes: 1 addition & 1 deletion spec/lib/allegro_graph/proxy/geo_spec.rb
@@ -1,5 +1,5 @@
require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "..", "spec_helper"))
require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "..", "..", "lib", "allegro_graph", "proxy", "query"))
require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "..", "..", "lib", "allegro_graph", "proxy", "geo"))

describe AllegroGraph::Proxy::Geo do

Expand Down
39 changes: 39 additions & 0 deletions spec/lib/allegro_graph/proxy/mapping_spec.rb
@@ -0,0 +1,39 @@
require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "..", "spec_helper"))
require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "..", "..", "lib", "allegro_graph", "proxy", "mapping"))

describe AllegroGraph::Proxy::Geo do

before :each do
@server = AllegroGraph::Server.new :username => "test", :password => "test"
@catalog = AllegroGraph::Catalog.new @server, "test_catalog"
@repository = AllegroGraph::Repository.new @catalog, "test_repository"
@mapping = AllegroGraph::Proxy::Mapping.new @repository
end

describe "path" do

it "should return the correct path" do
@mapping.path.should == "#{@repository.path}/mapping"
end

end

describe "create" do

it "should return true" do
result = @mapping.create "<time>", "<http://www.w3.org/2001/XMLSchema#dateTime>"
result.should be_true
end

end

describe "delete" do

it "should return true" do
result = @mapping.delete "<time>"
result.should be_true
end

end

end

0 comments on commit 6cce56f

Please sign in to comment.