agraph 0.1.2 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/Rakefile CHANGED
@@ -1,37 +1,38 @@
1
1
  require 'rubygems'
2
- gem 'rspec', '>= 2'
2
+
3
+ gem 'rspec'
3
4
  require 'rspec'
4
- require "rake/rdoctask"
5
- require 'rake/gempackagetask'
6
5
  require 'rspec/core/rake_task'
7
6
 
7
+ gem 'reek'
8
+ require 'reek/rake/task'
9
+
10
+ require 'rake/rdoctask'
11
+
8
12
  task :default => :spec
9
13
 
10
- specification = Gem::Specification.new do |specification|
11
- specification.name = "agraph"
12
- specification.version = "0.1.2"
13
- specification.date = "2010-11-17"
14
- specification.email = "b.phifty@gmail.com"
15
- specification.homepage = "http://github.com/phifty/agraph"
16
- specification.summary = "Client for the AllegroGraph 4.x graph database."
17
- specification.description = "The gem provides a client for the AllegroGraph 4.x RDF graph database. Features like searching geo-spatial data, type mapping and transactions are supported."
18
- specification.rubyforge_project = "agraph"
19
- specification.has_rdoc = true
20
- specification.authors = [ "Philipp Bruell" ]
21
- specification.files = [ "README.rdoc", "Rakefile" ] + Dir["{lib,spec}/**/*"]
22
- specification.extra_rdoc_files = [ "README.rdoc" ]
23
- specification.require_path = "lib"
14
+ namespace :gem do
15
+
16
+ desc "Builds the gem"
17
+ task :build do
18
+ system "gem build *.gemspec && mkdir -p pkg/ && mv *.gem pkg/"
19
+ end
20
+
21
+ desc "Builds and installs the gem"
22
+ task :install => :build do
23
+ system "gem install pkg/"
24
+ end
25
+
24
26
  end
25
27
 
26
- Rake::GemPackageTask.new(specification) do |package|
27
- package.gem_spec = specification
28
+ Reek::Rake::Task.new do |task|
29
+ task.fail_on_error = true
28
30
  end
29
31
 
30
32
  desc "Generate the rdoc"
31
33
  Rake::RDocTask.new do |rdoc|
32
34
  rdoc.rdoc_files.add [ "README.rdoc", "lib/**/*.rb" ]
33
- rdoc.main = "README.rdoc"
34
- rdoc.title = "Client for the AllegroGraph 4.x graph database."
35
+ rdoc.main = "README.rdoc"
35
36
  end
36
37
 
37
38
  desc "Run all specs in spec directory"
@@ -1,8 +1,7 @@
1
+ require 'transport'
1
2
 
2
3
  module AllegroGraph
3
4
 
4
- autoload :Transport, File.join(File.dirname(__FILE__), "allegro_graph", "transport")
5
- autoload :ExtendedTransport, File.join(File.dirname(__FILE__), "allegro_graph", "extended_transport")
6
5
  autoload :Server, File.join(File.dirname(__FILE__), "allegro_graph", "server")
7
6
  autoload :Catalog, File.join(File.dirname(__FILE__), "allegro_graph", "catalog")
8
7
  autoload :Resource, File.join(File.dirname(__FILE__), "allegro_graph", "resource")
@@ -31,10 +31,10 @@ module AllegroGraph
31
31
  end
32
32
 
33
33
  def repositories
34
- repositories = @server.request :get, self.path + "/repositories", :expected_status_code => 200
34
+ repositories = @server.request_json :get, self.path + "/repositories", :expected_status_code => 200
35
35
  repositories.map { |repository| Repository.new self, repository["id"] }
36
36
  end
37
37
 
38
38
  end
39
39
 
40
- end
40
+ end
@@ -19,7 +19,7 @@ module AllegroGraph
19
19
 
20
20
  def cartesian_type(parameters = { })
21
21
  parameters = Utility::ParameterMapper.map parameters, :cartesian_type
22
- type = @resource.request :post, self.path + "/types/cartesian", :parameters => parameters, :expected_status_code => 200
22
+ type = @resource.request_http :post, self.path + "/types/cartesian", :parameters => parameters, :expected_status_code => 200
23
23
  type.sub! /^.*</, "<"
24
24
  type.sub! />.*$/, ">"
25
25
  type
@@ -27,7 +27,7 @@ module AllegroGraph
27
27
 
28
28
  def spherical_type(parameters = { })
29
29
  parameters = Utility::ParameterMapper.map parameters, :spherical_type
30
- type = @resource.request :post, self.path + "/types/spherical", :parameters => parameters, :expected_status_code => 200
30
+ type = @resource.request_http :post, self.path + "/types/spherical", :parameters => parameters, :expected_status_code => 200
31
31
  type.sub! /^.*</, "<"
32
32
  type.sub! />.*$/, ">"
33
33
  type
@@ -40,7 +40,7 @@ module AllegroGraph
40
40
  raise ArgumentError, "at least three points has to defined" unless points.is_a?(Array) && points.size >= 3
41
41
  parameters[:point] = points.map{ |point| "\"%+g%+g\"^^%s" % [ point[0], point[1], type ] }
42
42
 
43
- @resource.request :put, self.path + "/polygon", :parameters => parameters, :expected_status_code => 204
43
+ @resource.request_json :put, self.path + "/polygon", :parameters => parameters, :expected_status_code => 204
44
44
  true
45
45
  end
46
46
 
@@ -18,13 +18,13 @@ module AllegroGraph
18
18
 
19
19
  def create(type, encoding)
20
20
  parameters = { :type => type, :encoding => encoding }
21
- @resource.request :put, self.path + "/type", :parameters => parameters, :expected_status_code => 204
21
+ @resource.request_http :put, self.path + "/type", :parameters => parameters, :expected_status_code => 204
22
22
  true
23
23
  end
24
24
 
25
25
  def delete(type)
26
26
  parameters = { :type => type }
27
- @resource.request :delete, self.path + "/type", :parameters => parameters, :expected_status_code => 204
27
+ @resource.request_http :delete, self.path + "/type", :parameters => parameters, :expected_status_code => 204
28
28
  true
29
29
  end
30
30
 
@@ -29,7 +29,7 @@ module AllegroGraph
29
29
 
30
30
  def perform(query)
31
31
  parameters = { :query => query, :queryLn => @language.to_s }
32
- @resource.request :get, self.path, :parameters => parameters, :expected_status_code => 200
32
+ @resource.request_json :get, self.path, :parameters => parameters, :expected_status_code => 200
33
33
  end
34
34
 
35
35
  end
@@ -20,7 +20,7 @@ module AllegroGraph
20
20
  def create(subject, predicate, object, context = nil)
21
21
  statement = [ subject, predicate, object ]
22
22
  statement << context if context
23
- @resource.request :post, self.path + "/statements", :body => [ statement ], :expected_status_code => 204
23
+ @resource.request_json :post, self.path + "/statements", :body => [ statement ], :expected_status_code => 204
24
24
  true
25
25
  end
26
26
 
@@ -32,7 +32,7 @@ module AllegroGraph
32
32
  parameters.merge! parameter_key => value if value
33
33
  end
34
34
 
35
- @resource.request :delete, self.path + "/statements", :parameters => parameters, :expected_status_code => 200
35
+ @resource.request_http :delete, self.path + "/statements", :parameters => parameters, :expected_status_code => 200
36
36
  end
37
37
 
38
38
  def find(options = { })
@@ -51,31 +51,31 @@ module AllegroGraph
51
51
 
52
52
  parameters = nil if parameters.empty?
53
53
 
54
- @resource.request :get, self.path + "/statements", :parameters => parameters, :expected_status_code => 200
54
+ @resource.request_json :get, self.path + "/statements", :parameters => parameters, :expected_status_code => 200
55
55
  end
56
56
 
57
57
  def find_inside_box(parameters = { })
58
58
  parameters = Utility::ParameterMapper.map parameters, :find_inside_box
59
- @resource.request :get, self.path + "/geo/box", :parameters => parameters, :expected_status_code => 200
59
+ @resource.request_json :get, self.path + "/geo/box", :parameters => parameters, :expected_status_code => 200
60
60
  end
61
61
 
62
62
  def find_inside_circle(parameters = { })
63
63
  parameters = Utility::ParameterMapper.map parameters, :find_inside_circle
64
- @resource.request :get, self.path + "/geo/circle", :parameters => parameters, :expected_status_code => 200
64
+ @resource.request_json :get, self.path + "/geo/circle", :parameters => parameters, :expected_status_code => 200
65
65
  end
66
66
 
67
67
  def find_inside_haversine(parameters = { })
68
68
  parameters = Utility::ParameterMapper.map parameters, :find_inside_haversine
69
- @resource.request :get, self.path + "/geo/haversine", :parameters => parameters, :expected_status_code => 200
69
+ @resource.request_json :get, self.path + "/geo/haversine", :parameters => parameters, :expected_status_code => 200
70
70
  end
71
71
 
72
72
  def find_inside_polygon(parameters = { })
73
73
  parameters = Utility::ParameterMapper.map parameters, :find_inside_polygon
74
- @resource.request :get, self.path + "/geo/polygon", :parameters => parameters, :expected_status_code => 200
74
+ @resource.request_json :get, self.path + "/geo/polygon", :parameters => parameters, :expected_status_code => 200
75
75
  end
76
76
 
77
77
  end
78
78
 
79
79
  end
80
80
 
81
- end
81
+ end
@@ -24,8 +24,12 @@ module AllegroGraph
24
24
  "#{@catalog.path}/repositories/#{@name}"
25
25
  end
26
26
 
27
- def request(http_method, path, options = { })
28
- @server.request http_method, path, options
27
+ def request_http(*arguments)
28
+ @server.request_http *arguments
29
+ end
30
+
31
+ def request_json(*arguments)
32
+ @server.request_json *arguments
29
33
  end
30
34
 
31
35
  def exists?
@@ -33,9 +37,9 @@ module AllegroGraph
33
37
  end
34
38
 
35
39
  def create!
36
- @server.request :put, self.path, :expected_status_code => 204
40
+ @server.request_http :put, self.path, :expected_status_code => 204
37
41
  true
38
- rescue ExtendedTransport::UnexpectedStatusCodeError => error
42
+ rescue ::Transport::UnexpectedStatusCodeError => error
39
43
  return false if error.status_code == 400
40
44
  raise error
41
45
  end
@@ -45,9 +49,9 @@ module AllegroGraph
45
49
  end
46
50
 
47
51
  def delete!
48
- @server.request :delete, self.path, :expected_status_code => 200
52
+ @server.request_http :delete, self.path, :expected_status_code => 200
49
53
  true
50
- rescue ExtendedTransport::UnexpectedStatusCodeError => error
54
+ rescue ::Transport::UnexpectedStatusCodeError => error
51
55
  return false if error.status_code == 400
52
56
  raise error
53
57
  end
@@ -57,7 +61,7 @@ module AllegroGraph
57
61
  end
58
62
 
59
63
  def size
60
- response = @server.request :get, self.path + "/size", :type => :text, :expected_status_code => 200
64
+ response = @server.request_http :get, self.path + "/size", :type => :text, :expected_status_code => 200
61
65
  response.to_i
62
66
  end
63
67
 
@@ -73,7 +77,7 @@ module AllegroGraph
73
77
  session.rollback
74
78
  raise error
75
79
  end
76
- session.commit
80
+ session.commit
77
81
  end
78
82
 
79
83
  end
@@ -1,3 +1,4 @@
1
+ require 'logger'
1
2
 
2
3
  module AllegroGraph
3
4
 
@@ -23,21 +24,25 @@ module AllegroGraph
23
24
  other.is_a?(self.class) && @host == other.host && @port == other.port
24
25
  end
25
26
 
26
- def request(http_method, path, options = { })
27
- ExtendedTransport.request http_method, self.url + path, credentials.merge(options)
27
+ def request_http(http_method, path, options = { })
28
+ ::Transport::HTTP.request http_method, (self.url + path), credentials.merge(options)
29
+ end
30
+
31
+ def request_json(http_method, path, options = { })
32
+ ::Transport::JSON.request http_method, self.url + path, credentials.merge(options).merge(:logger => Logger.new(STDOUT))
28
33
  end
29
34
 
30
35
  def version
31
36
  {
32
- :version => self.request(:get, "/version", :expected_status_code => 200),
33
- :date => self.request(:get, "/version/date", :expected_status_code => 200),
34
- :revision => self.request(:get, "/version/revision", :expected_status_code => 200)
37
+ :version => self.request_http(:get, "/version", :expected_status_code => 200),
38
+ :date => self.request_http(:get, "/version/date", :expected_status_code => 200),
39
+ :revision => self.request_http(:get, "/version/revision", :expected_status_code => 200)
35
40
  }
36
41
  end
37
42
 
38
43
  def catalogs
39
44
  result = [ @root_catalog ]
40
- catalogs = self.request :get, "/catalogs", :expected_status_code => 200
45
+ catalogs = self.request_json :get, "/catalogs", :expected_status_code => 200
41
46
  catalogs.each do |catalog|
42
47
  id = catalog["id"]
43
48
  result << Catalog.new(self, id.sub(/^\//, "")) unless id == "/"
@@ -19,24 +19,27 @@ module AllegroGraph
19
19
  ""
20
20
  end
21
21
 
22
- def request(http_method, path, options = { })
23
- ExtendedTransport.request http_method, self.url + path, credentials.merge(options)
22
+ def request_http(http_method, path, options = { })
23
+ ::Transport::HTTP.request http_method, self.url + path, credentials.merge(options)
24
+ end
25
+
26
+ def request_json(http_method, path, options = { })
27
+ ::Transport::JSON.request http_method, self.url + path, credentials.merge(options)
24
28
  end
25
29
 
26
30
  def commit
27
- self.request :post, "/commit", :expected_status_code => 204
31
+ self.request_http :post, "/commit", :expected_status_code => 204
28
32
  true
29
33
  end
30
34
 
31
35
  def rollback
32
- self.request :post, "/rollback", :expected_status_code => 204
36
+ self.request_http :post, "/rollback", :expected_status_code => 204
33
37
  true
34
38
  end
35
39
 
36
40
  def self.create(repository)
37
- url = repository.request :post, repository.path + "/session", :expected_status_code => 200
38
- url.sub! /^"/, ""
39
- url.sub! /"$/, ""
41
+ response = repository.request_http :post, repository.path + "/session", :expected_status_code => 200
42
+ url = response.sub(/^"/, "").sub(/"$/, "")
40
43
  server = repository.server
41
44
  new :url => url, :username => server.username, :password => server.password
42
45
  end
@@ -46,7 +49,7 @@ module AllegroGraph
46
49
  def credentials
47
50
  { :auth_type => :basic, :username => @username, :password => @password }
48
51
  end
49
-
52
+
50
53
  end
51
54
 
52
55
  end
@@ -62,7 +62,10 @@ describe "geo-spatial data" do
62
62
  :x_max => 20.0,
63
63
  :y_max => 20.0
64
64
  @statements.create "\"test_subject\"", "\"at\"", "\"+10+10\"^^#{@type}"
65
+ @statement_one = [ "\"test_subject\"", "\"at\"", "\"+10.000000000931323+10.000000000931323\"^^#{@type}"]
66
+
65
67
  @statements.create "\"another_subject\"", "\"at\"", "\"+15+15\"^^#{@type}"
68
+ @statement_two = [ "\"another_subject\"", "\"at\"", "\"+15.000000000465661+15.000000000465661\"^^#{@type}"]
66
69
  end
67
70
 
68
71
  it "should find objects inside a box" do
@@ -72,8 +75,8 @@ describe "geo-spatial data" do
72
75
  :y_min => 8.0,
73
76
  :x_max => 11.0,
74
77
  :y_max => 11.0
75
- result.should include([ "\"test_subject\"", "\"at\"", "\"+10.000000000931323+10.000000000931323\"^^#{@type}"])
76
- result.should_not include([ "\"another_subject\"", "\"at\"", "\"+15.000000000465661+15.000000000465661\"^^#{@type}"])
78
+ result.should include(@statement_one)
79
+ result.should_not include(@statement_two)
77
80
  end
78
81
 
79
82
  it "should find objects inside a circle" do
@@ -82,31 +85,20 @@ describe "geo-spatial data" do
82
85
  :x => 9.0,
83
86
  :y => 9.0,
84
87
  :radius => 2.0
85
- result.should include([ "\"test_subject\"", "\"at\"", "\"+10.000000000931323+10.000000000931323\"^^#{@type}"])
86
- result.should_not include([ "\"another_subject\"", "\"at\"", "\"+15.000000000465661+15.000000000465661\"^^#{@type}"])
88
+ result.should include(@statement_one)
89
+ result.should_not include(@statement_two)
87
90
  end
88
91
 
89
- context "with a defined polygon" do
90
-
91
- before :each do
92
- @type = @geometric.cartesian_type :strip_width => 1,
93
- :x_min => -100,
94
- :y_min => -100,
95
- :x_max => 100,
96
- :y_max => 100
97
- @statements.create "\"test_subject\"", "\"at\"", "\"+1+1\"^^#{@type}"
98
- @geometric.create_polygon [ [ 0, -100 ], [ 0, 100 ], [ 100, 100 ], [ 100, -100 ] ],
99
- :name => "test_polygon",
100
- :type => @type
101
- end
102
-
103
- it "should find objects inside that polygon" do
104
- result = @statements.find_inside_polygon :type => @type,
105
- :predicate => "\"at\"",
106
- :polygon_name => "test_polygon"
107
- result.should include([ "\"test_subject\"", "\"at\"", "\"+0.9999999776482582+0.9999999776482582\"^^<http://franz.com/ns/allegrograph/3.0/geospatial/cartesian/-100.0/100.0/-100.0/100.0/1.0>"])
108
- end
92
+ it "should find objects inside that polygon" do
93
+ @geometric.create_polygon [ [ 5.0, 5.0 ], [ 5.0, 12.0 ], [ 12.0, 12.0 ], [ 12.0, 5.0 ] ],
94
+ :name => "test_polygon",
95
+ :type => @type
109
96
 
97
+ result = @statements.find_inside_polygon :type => @type,
98
+ :predicate => "\"at\"",
99
+ :polygon_name => "test_polygon"
100
+ result.should include(@statement_one)
101
+ result.should_not include(@statement_two)
110
102
  end
111
103
 
112
104
  end
@@ -3,11 +3,9 @@ require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "lib", "a
3
3
 
4
4
  describe "mapping" do
5
5
 
6
- use_real_transport!
7
-
8
6
  before :each do
9
7
  @server = AllegroGraph::Server.new :username => "test", :password => "test"
10
- @repository = AllegroGraph::Repository.new @server, "test_repository"
8
+ @repository = AllegroGraph::Repository.new @server, "test_repository"
11
9
  @repository.create_if_missing!
12
10
  @statements = @repository.statements
13
11
  @mapping = @repository.mapping
@@ -16,7 +14,7 @@ describe "mapping" do
16
14
  describe "creating a type" do
17
15
 
18
16
  it "should return true" do
19
- result = @mapping.create "<time>", "<http://www.w3.org/2001/XMLSchema#dateTime>"
17
+ result = @mapping.create "<http://test.com/time>", "<http://www.w3.org/2001/XMLSchema#dateTime>"
20
18
  result.should be_true
21
19
  end
22
20
 
@@ -44,7 +42,7 @@ describe "mapping" do
44
42
  @statements.create "\"event_three\"", "<happened>", "\"2010-03-29T19:00:00\"^^<time>"
45
43
  end
46
44
 
47
- it "should findthe statements for the given time" do
45
+ it "should find the statements for the given time" do
48
46
  result = @statements.find :predicate => "<happened>", :object => [ "\"2010-03-29T16:30:00\"^^<time>", "\"2010-03-29T18:30:00\"^^<time>" ]
49
47
  result.should include([ "\"event_one\"", "<happened>", "\"2010-03-29T17:00:00Z\"^^<http://www.w3.org/2001/XMLSchema#dateTime>" ])
50
48
  result.should include([ "\"event_two\"", "<happened>", "\"2010-03-29T18:00:00Z\"^^<http://www.w3.org/2001/XMLSchema#dateTime>" ])
@@ -3,8 +3,6 @@ require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "lib", "a
3
3
 
4
4
  describe "query" do
5
5
 
6
- use_real_transport!
7
-
8
6
  before :each do
9
7
  @server = AllegroGraph::Server.new :username => "test", :password => "test"
10
8
  @repository = AllegroGraph::Repository.new @server, "test_repository"
@@ -11,9 +11,9 @@ describe "server" do
11
11
 
12
12
  it "should return the server's version" do
13
13
  @server.version.should == {
14
- :version => "\"4.0.4\"",
15
- :date => "\"June 10, 2010 17:37:10 GMT-0700\"",
16
- :revision => "\"[unknown]\""
14
+ :version => "4.1.1",
15
+ :date => "October 23, 2010 16:25:51 GMT-0700",
16
+ :revision => "internal reversion unknown"
17
17
  }
18
18
  end
19
19
 
@@ -8,8 +8,8 @@ describe "statements" do
8
8
  before :each do
9
9
  @server = AllegroGraph::Server.new :username => "test", :password => "test"
10
10
  @repository = AllegroGraph::Repository.new @server, "test_repository"
11
-
12
11
  @repository.create_if_missing!
12
+
13
13
  @statements = @repository.statements
14
14
  end
15
15
 
@@ -8,6 +8,8 @@ describe "transactions" do
8
8
  before :each do
9
9
  @server = AllegroGraph::Server.new :username => "test", :password => "test"
10
10
  @repository = AllegroGraph::Repository.new @server, "test_repository"
11
+ @repository.create_if_missing!
12
+
11
13
  @repository.statements.delete
12
14
  end
13
15
 
@@ -4,6 +4,7 @@ require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "..", "li
4
4
  describe AllegroGraph::Catalog do
5
5
 
6
6
  before :each do
7
+ fake_transport!
7
8
  @server = AllegroGraph::Server.new :username => "test", :password => "test"
8
9
  @catalog = AllegroGraph::Catalog.new @server, "test_catalog"
9
10
  end
@@ -79,7 +80,7 @@ describe AllegroGraph::Catalog do
79
80
  it "should return the catalog's repositories" do
80
81
  @catalog.repositories.should == [ @repository ]
81
82
  end
82
-
83
+
83
84
  end
84
85
 
85
86
  end
@@ -4,6 +4,7 @@ require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "..", "..
4
4
  describe AllegroGraph::Proxy::Geometric do
5
5
 
6
6
  before :each do
7
+ fake_transport!
7
8
  @server = AllegroGraph::Server.new :username => "test", :password => "test"
8
9
  @catalog = AllegroGraph::Catalog.new @server, "test_catalog"
9
10
  @repository = AllegroGraph::Repository.new @catalog, "test_repository"
@@ -4,6 +4,7 @@ require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "..", "..
4
4
  describe AllegroGraph::Proxy::Geometric do
5
5
 
6
6
  before :each do
7
+ fake_transport!
7
8
  @server = AllegroGraph::Server.new :username => "test", :password => "test"
8
9
  @catalog = AllegroGraph::Catalog.new @server, "test_catalog"
9
10
  @repository = AllegroGraph::Repository.new @catalog, "test_repository"
@@ -24,7 +25,7 @@ describe AllegroGraph::Proxy::Geometric do
24
25
  result = @mapping.create "<time>", "<http://www.w3.org/2001/XMLSchema#dateTime>"
25
26
  result.should be_true
26
27
  end
27
-
28
+
28
29
  end
29
30
 
30
31
  describe "delete" do
@@ -4,6 +4,7 @@ require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "..", "..
4
4
  describe AllegroGraph::Proxy::Query do
5
5
 
6
6
  before :each do
7
+ fake_transport!
7
8
  @server = AllegroGraph::Server.new :username => "test", :password => "test"
8
9
  @catalog = AllegroGraph::Catalog.new @server, "test_catalog"
9
10
  @repository = AllegroGraph::Repository.new @catalog, "test_repository"
@@ -48,7 +49,7 @@ describe AllegroGraph::Proxy::Query do
48
49
  }
49
50
  end
50
51
 
51
- it "should return the query result" do
52
+ it "should return the prolog query result" do
52
53
  @query.language = :prolog
53
54
  result = @query.perform "(select (?subject) (q- ?subject !<http://xmlns.com/foaf/0.1/knows> ?object))"
54
55
  result.should == {
@@ -4,6 +4,7 @@ require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "..", "..
4
4
  describe AllegroGraph::Proxy::Statements do
5
5
 
6
6
  before :each do
7
+ fake_transport!
7
8
  @server = AllegroGraph::Server.new :username => "test", :password => "test"
8
9
  @catalog = AllegroGraph::Catalog.new @server, "test_catalog"
9
10
  @repository = AllegroGraph::Repository.new @catalog, "test_repository"
@@ -20,7 +21,7 @@ describe AllegroGraph::Proxy::Statements do
20
21
  it "should return the correct path" do
21
22
  @statements.path.should == @repository.path
22
23
  end
23
-
24
+
24
25
  end
25
26
 
26
27
  describe "create" do
@@ -4,9 +4,10 @@ require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "..", "li
4
4
  describe AllegroGraph::Repository do
5
5
 
6
6
  before :each do
7
+ fake_transport!
7
8
  @server = AllegroGraph::Server.new :username => "test", :password => "test"
8
9
  @catalog = AllegroGraph::Catalog.new @server, "test_catalog"
9
- @repository = AllegroGraph::Repository.new @catalog, "test_repository"
10
+ @repository = AllegroGraph::Repository.new @catalog, "test_repository"
10
11
  end
11
12
 
12
13
  describe "==" do
@@ -31,15 +32,28 @@ describe AllegroGraph::Repository do
31
32
 
32
33
  end
33
34
 
34
- describe "request" do
35
+ describe "request_http" do
35
36
 
36
37
  before :each do
37
- @server.stub!(:request)
38
+ @server.stub(:request_http)
38
39
  end
39
40
 
40
41
  it "should call the server's request method" do
41
- @server.should_receive(:request).with(:get, "/", { })
42
- @repository.request :get, "/"
42
+ @server.should_receive(:request_http).with(:get, "/", { })
43
+ @repository.request_http :get, "/", { }
44
+ end
45
+
46
+ end
47
+
48
+ describe "request_json" do
49
+
50
+ before :each do
51
+ @server.stub(:request_json)
52
+ end
53
+
54
+ it "should call the server's request method" do
55
+ @server.should_receive(:request_json).with(:get, "/", { })
56
+ @repository.request_json :get, "/", { }
43
57
  end
44
58
 
45
59
  end
@@ -130,6 +144,11 @@ describe AllegroGraph::Repository do
130
144
  @repository.delete!.should be_true
131
145
  end
132
146
 
147
+ it "should return true even if a #{Transport::JSON::ParserError} is raised" do
148
+ @server.stub(:request).and_raise(Transport::JSON::ParserError)
149
+ @repository.delete!.should be_true
150
+ end
151
+
133
152
  end
134
153
 
135
154
  context "for a repository that not exists" do
@@ -181,7 +200,7 @@ describe AllegroGraph::Repository do
181
200
  it "should return the number of statements" do
182
201
  @repository.size.should == 3
183
202
  end
184
-
203
+
185
204
  end
186
205
 
187
206
  describe "transaction" do
@@ -4,6 +4,7 @@ require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "..", "li
4
4
  describe AllegroGraph::Server do
5
5
 
6
6
  before :each do
7
+ fake_transport!
7
8
  @server = AllegroGraph::Server.new :username => "test", :password => "test"
8
9
  end
9
10
 
@@ -21,17 +22,32 @@ describe AllegroGraph::Server do
21
22
 
22
23
  end
23
24
 
24
- describe "request" do
25
+ describe "request_http" do
25
26
 
26
27
  before :each do
27
- AllegroGraph::ExtendedTransport.stub!(:request)
28
+ Transport::HTTP.stub(:request)
28
29
  end
29
30
 
30
- it "should perform an extended request" do
31
- AllegroGraph::ExtendedTransport.should_receive(:request).with(
31
+ it "should perform a http request" do
32
+ Transport::HTTP.should_receive(:request).with(
32
33
  :get, "http://localhost:10035/", hash_including(:expected_status_code => 200)
33
34
  ).and_return("test" => "test")
34
- @server.request(:get, "/", :expected_status_code => 200).should == { "test" => "test" }
35
+ @server.request_http(:get, "/", :expected_status_code => 200).should == { "test" => "test" }
36
+ end
37
+
38
+ end
39
+
40
+ describe "request_json" do
41
+
42
+ before :each do
43
+ Transport::JSON.stub(:request)
44
+ end
45
+
46
+ it "should perform a json request" do
47
+ Transport::JSON.should_receive(:request).with(
48
+ :get, "http://localhost:10035/", hash_including(:expected_status_code => 200)
49
+ ).and_return("test" => "test")
50
+ @server.request_json(:get, "/", :expected_status_code => 200).should == { "test" => "test" }
35
51
  end
36
52
 
37
53
  end
@@ -4,20 +4,36 @@ require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "..", "li
4
4
  describe AllegroGraph::Session do
5
5
 
6
6
  before :each do
7
+ fake_transport!
7
8
  @session = AllegroGraph::Session.new :url => "http://session:5555", :username => "test", :password => "test"
8
9
  end
9
10
 
10
- describe "request" do
11
+ describe "request_http" do
11
12
 
12
13
  before :each do
13
- AllegroGraph::ExtendedTransport.stub!(:request)
14
+ Transport::HTTP.stub(:request)
14
15
  end
15
16
 
16
- it "should perform an extended request" do
17
- AllegroGraph::ExtendedTransport.should_receive(:request).with(
17
+ it "should perform a http request" do
18
+ Transport::HTTP.should_receive(:request).with(
18
19
  :get, "http://session:5555/", hash_including(:expected_status_code => 200)
19
20
  ).and_return("test" => "test")
20
- @session.request(:get, "/", :expected_status_code => 200).should == { "test" => "test" }
21
+ @session.request_http(:get, "/", :expected_status_code => 200).should == { "test" => "test" }
22
+ end
23
+
24
+ end
25
+
26
+ describe "request_json" do
27
+
28
+ before :each do
29
+ Transport::JSON.stub(:request)
30
+ end
31
+
32
+ it "should perform a json request" do
33
+ Transport::JSON.should_receive(:request).with(
34
+ :get, "http://session:5555/", hash_including(:expected_status_code => 200)
35
+ ).and_return("test" => "test")
36
+ @session.request_json(:get, "/", :expected_status_code => 200).should == { "test" => "test" }
21
37
  end
22
38
 
23
39
  end
@@ -43,17 +59,15 @@ describe AllegroGraph::Session do
43
59
  describe "create" do
44
60
 
45
61
  before :each do
46
- @server = Object.new
47
- @server.stub!(:username).and_return("test")
48
- @server.stub!(:password).and_return("test")
49
- @repository = Object.new
50
- @repository.stub!(:path).and_return("/repositories/test_repository")
51
- @repository.stub!(:request).and_return("http://session:5555")
52
- @repository.stub!(:server).and_return(@server)
62
+ @server = mock AllegroGraph::Server, :username => "test", :password => "test"
63
+ @repository = mock AllegroGraph::Repository,
64
+ :path => "/repositories/test_repository",
65
+ :request_http => "http://session:5555",
66
+ :server => @server
53
67
  end
54
68
 
55
69
  it "should request a session" do
56
- @repository.should_receive(:request).with(
70
+ @repository.should_receive(:request_http).with(
57
71
  :post, "/repositories/test_repository/session", :expected_status_code => 200
58
72
  ).and_return("http://session:5555")
59
73
  AllegroGraph::Session.create @repository
@@ -1,15 +1,13 @@
1
1
  require 'rubygems'
2
2
  gem 'rspec', '>= 2'
3
3
  require 'rspec'
4
+ require 'transport/spec'
4
5
 
5
6
  require File.join(File.dirname(__FILE__), "..", "lib", "allegro_graph")
6
7
  require File.join(File.dirname(__FILE__), "fake_transport_helper")
7
8
 
8
- FakeTransport.enable!
9
- RSpec.configure do |configuration|
10
- configuration.before :each do
11
- FakeTransport.fake!
12
- end
9
+ def fake_transport!
10
+ Transport::Spec::Faker.fake! File.join(File.dirname(__FILE__), "fake_transport.yml")
13
11
  end
14
12
 
15
13
  def use_real_transport!
metadata CHANGED
@@ -5,19 +5,60 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 1
8
- - 2
9
- version: 0.1.2
8
+ - 3
9
+ version: 0.1.3
10
10
  platform: ruby
11
11
  authors:
12
- - Philipp Bruell
12
+ - "Philipp Br\xC3\xBCll"
13
13
  autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-11-17 00:00:00 +01:00
17
+ date: 2010-11-29 00:00:00 +01:00
18
18
  default_executable:
19
- dependencies: []
20
-
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: transport
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ segments:
29
+ - 1
30
+ - 0
31
+ - 0
32
+ version: 1.0.0
33
+ type: :runtime
34
+ version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ name: rspec
37
+ prerelease: false
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ segments:
44
+ - 2
45
+ version: "2"
46
+ type: :development
47
+ version_requirements: *id002
48
+ - !ruby/object:Gem::Dependency
49
+ name: reek
50
+ prerelease: false
51
+ requirement: &id003 !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ segments:
57
+ - 1
58
+ - 2
59
+ version: "1.2"
60
+ type: :development
61
+ version_requirements: *id003
21
62
  description: The gem provides a client for the AllegroGraph 4.x RDF graph database. Features like searching geo-spatial data, type mapping and transactions are supported.
22
63
  email: b.phifty@gmail.com
23
64
  executables: []
@@ -36,9 +77,7 @@ files:
36
77
  - lib/allegro_graph/catalog.rb
37
78
  - lib/allegro_graph/resource.rb
38
79
  - lib/allegro_graph/utility.rb
39
- - lib/allegro_graph/extended_transport.rb
40
80
  - lib/allegro_graph/utility/parameter_mapper.rb
41
- - lib/allegro_graph/transport.rb
42
81
  - lib/allegro_graph/session.rb
43
82
  - lib/allegro_graph/proxy.rb
44
83
  - lib/allegro_graph/proxy/query.rb
@@ -56,10 +95,8 @@ files:
56
95
  - spec/lib/allegro_graph/catalog_spec.rb
57
96
  - spec/lib/allegro_graph/resource_spec.rb
58
97
  - spec/lib/allegro_graph/session_spec.rb
59
- - spec/lib/allegro_graph/transport_spec.rb
60
98
  - spec/lib/allegro_graph/utility/parameter_mapper_spec.rb
61
99
  - spec/lib/allegro_graph/repository_spec.rb
62
- - spec/lib/allegro_graph/extended_transport_spec.rb
63
100
  - spec/lib/allegro_graph/proxy/mapping_spec.rb
64
101
  - spec/lib/allegro_graph/proxy/query_spec.rb
65
102
  - spec/lib/allegro_graph/proxy/geometric_spec.rb
@@ -83,8 +120,10 @@ required_ruby_version: !ruby/object:Gem::Requirement
83
120
  - - ">="
84
121
  - !ruby/object:Gem::Version
85
122
  segments:
86
- - 0
87
- version: "0"
123
+ - 1
124
+ - 8
125
+ - 7
126
+ version: 1.8.7
88
127
  required_rubygems_version: !ruby/object:Gem::Requirement
89
128
  none: false
90
129
  requirements:
@@ -1,84 +0,0 @@
1
- require 'json'
2
-
3
- module AllegroGraph
4
-
5
- # Extended transport layer for http transfers. Basic authorization and JSON transfers are supported.
6
- class ExtendedTransport < Transport
7
-
8
- # The UnexpectedStatusCodeError is raised if the :expected_status_code option is given to
9
- # the :request method and the responded status code is different from the expected one.
10
- class UnexpectedStatusCodeError < StandardError
11
-
12
- attr_reader :status_code
13
- attr_reader :message
14
-
15
- def initialize(status_code, message)
16
- @status_code, @message = status_code, message
17
- end
18
-
19
- def to_s
20
- "#{super} received status code #{self.status_code}" + (@message ? " [#{@message}]" : "")
21
- end
22
-
23
- end
24
-
25
- attr_reader :expected_status_code
26
- attr_reader :auth_type
27
- attr_reader :username
28
- attr_reader :password
29
-
30
- def initialize(http_method, url, options = { })
31
- super http_method, url, options
32
- @expected_status_code = options[:expected_status_code]
33
- @auth_type = options[:auth_type]
34
- @username = options[:username]
35
- @password = options[:password]
36
- end
37
-
38
- def perform
39
- initialize_headers
40
- super
41
- check_status_code
42
- parse_response
43
- end
44
-
45
- private
46
-
47
- def initialize_headers
48
- @headers["Accept"] = "application/json"
49
- end
50
-
51
- def initialize_request
52
- super
53
- if @auth_type == :basic
54
- @request.basic_auth @username, @password
55
- elsif !@auth_type.nil?
56
- raise NotImplementedError, "the given auth_type [#{@auth_type}] is not implemented"
57
- end
58
- end
59
-
60
- def initialize_request_body
61
- super
62
- if @body
63
- @request.body = @body.to_json
64
- @request["Content-Type"] = "application/json"
65
- end
66
- end
67
-
68
- def check_status_code
69
- return unless @expected_status_code
70
- response_code = @response.code
71
- response_body = @response.body
72
- raise UnexpectedStatusCodeError.new(response_code.to_i, response_body) if @expected_status_code.to_s != response_code
73
- end
74
-
75
- def parse_response
76
- body = @response.body
77
- @response = body.nil? ? nil : JSON.parse(body)
78
- rescue JSON::ParserError
79
- @response = body.to_s
80
- end
81
-
82
- end
83
-
84
- end
@@ -1,100 +0,0 @@
1
- require 'uri'
2
- require 'cgi'
3
- require 'net/http'
4
-
5
- module AllegroGraph
6
-
7
- # Common transport layer for http transfers.
8
- class Transport
9
-
10
- attr_reader :http_method
11
- attr_reader :url
12
- attr_reader :options
13
- attr_reader :headers
14
- attr_reader :parameters
15
- attr_reader :body
16
- attr_reader :response
17
-
18
- def initialize(http_method, url, options = { })
19
- @http_method = http_method
20
- @uri = URI.parse url
21
- @headers = options[:headers] || { }
22
- @parameters = options[:parameters] || { }
23
- @body = options[:body]
24
- end
25
-
26
- def perform
27
- initialize_request_class
28
- initialize_request_path
29
- initialize_request
30
- initialize_request_body
31
- perform_request
32
- end
33
-
34
- private
35
-
36
- def initialize_request_class
37
- request_class_name = @http_method.to_s.capitalize
38
- raise NotImplementedError, "the request method #{http_method} is not implemented" unless Net::HTTP.const_defined?(request_class_name)
39
- @request_class = Net::HTTP.const_get request_class_name
40
- end
41
-
42
- def initialize_request_path
43
- @request_path = @uri.path # + (@uri.query ? "?" + @uri.query : "")
44
- unless parameter_body?
45
- serialize_parameters
46
- @request_path += @serialized_parameters
47
- end
48
- end
49
-
50
- def serialize_parameters
51
- quote_parameters
52
- @serialized_parameters = if @parameters.nil? || @parameters.empty?
53
- ""
54
- else
55
- "?" + @quoted_parameters.collect do |key, value|
56
- value.is_a?(Array) ?
57
- value.map{ |element| "#{key}=#{element}" }.join("&") :
58
- "#{key}=#{value}"
59
- end.join("&")
60
- end
61
- end
62
-
63
- def quote_parameters
64
- @quoted_parameters = { }
65
- @parameters.each do |key, value|
66
- quoted_key = CGI.escape(key.to_s)
67
- @quoted_parameters[quoted_key] = value.is_a?(Array) ? value.map{ |element| CGI.escape element } : CGI.escape(value)
68
- end
69
- end
70
-
71
- def initialize_request
72
- @request = @request_class.new @request_path, @headers
73
- end
74
-
75
- def initialize_request_body
76
- if parameter_body?
77
- serialize_parameters
78
- @request.body = @body ? @body : @serialized_parameters.sub(/^\?/, "")
79
- end
80
- end
81
-
82
- def perform_request
83
- @response = Net::HTTP.start(@uri.host, @uri.port) do |connection|
84
- connection.request @request
85
- end
86
- end
87
-
88
- def parameter_body?
89
- [ :post, :put ].include? @http_method.to_sym
90
- end
91
-
92
- def self.request(http_method, url, options = { })
93
- transport = new http_method, url, options
94
- transport.perform
95
- transport.response
96
- end
97
-
98
- end
99
-
100
- end
@@ -1,59 +0,0 @@
1
- require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "spec_helper"))
2
- require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "..", "lib", "allegro_graph", "extended_transport"))
3
-
4
- describe AllegroGraph::ExtendedTransport do
5
-
6
- use_real_transport!
7
-
8
- describe "request" do
9
-
10
- before :each do
11
- @http_method = :get
12
- @url = "http://localhost:5984/"
13
- @options = {
14
- :auth_type => :basic,
15
- :username => "test",
16
- :password => "test",
17
- :expected_status_code => 200
18
- }
19
-
20
- @request = Net::HTTP::Get.new "/", { }
21
- @response = Object.new
22
- @response.stub!(:code).and_return("200")
23
- @response.stub!(:body).and_return("{\"test\":\"test\"}")
24
- Net::HTTP.stub!(:start).and_return(@response)
25
- end
26
-
27
- def do_request(options = { })
28
- AllegroGraph::ExtendedTransport.request @http_method, @url, @options.merge(options)
29
- end
30
-
31
- it "should initialize the correct request object" do
32
- Net::HTTP::Get.should_receive(:new).with("/", { "Accept" => "application/json" }).and_return(@request)
33
- do_request
34
- end
35
-
36
- it "should perform the request" do
37
- Net::HTTP.should_receive(:start).and_return(@response)
38
- do_request
39
- end
40
-
41
- it "should return the parsed response" do
42
- do_request.should == { "test" => "test" }
43
- end
44
-
45
- it "should raise NotImplementedError if the given auth_type is wrong" do
46
- lambda do
47
- do_request :auth_type => :invalid
48
- end.should raise_error(NotImplementedError)
49
- end
50
-
51
- it "should raise UnexpectedStatusCodeError if responded status code is wrong" do
52
- lambda do
53
- do_request :expected_status_code => 201
54
- end.should raise_error(AllegroGraph::ExtendedTransport::UnexpectedStatusCodeError)
55
- end
56
-
57
- end
58
-
59
- end
@@ -1,57 +0,0 @@
1
- require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "spec_helper"))
2
- require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "..", "lib", "allegro_graph", "transport"))
3
-
4
- describe AllegroGraph::Transport do
5
-
6
- use_real_transport!
7
-
8
- describe "request" do
9
-
10
- before :each do
11
- @http_method = :get
12
- @url = "http://localhost:5984/"
13
- @options = { }
14
-
15
- @request = Net::HTTP::Get.new "/", { }
16
- @response = Object.new
17
- @response.stub!(:code).and_return("200")
18
- @response.stub!(:body).and_return("test")
19
- Net::HTTP.stub!(:start).and_return(@response)
20
- end
21
-
22
- def do_request(options = { })
23
- AllegroGraph::Transport.request @http_method, @url, @options.merge(options)
24
- end
25
-
26
- it "should initialize the correct request object" do
27
- Net::HTTP::Get.should_receive(:new).with("/", { }).and_return(@request)
28
- do_request
29
- end
30
-
31
- it "should perform the request" do
32
- Net::HTTP.should_receive(:start).and_return(@response)
33
- do_request
34
- end
35
-
36
- it "should return the response" do
37
- do_request.body.should == "test"
38
- end
39
-
40
- context "with parameters" do
41
-
42
- before :each do
43
- @options.merge! :parameters => { :foo => "bar", :test => [ "value1", "value2" ] }
44
- end
45
-
46
- it "should initialize the correct request object" do
47
- Net::HTTP::Get.should_receive(:new).with(
48
- "/?foo=bar&test=value1&test=value2", { }
49
- ).and_return(@request)
50
- do_request
51
- end
52
-
53
- end
54
-
55
- end
56
-
57
- end