rdf-sesame 0.3.0 → 1.1.0

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.
@@ -6,9 +6,14 @@ module RDF::Sesame
6
6
  # one or more readable and/or writable RDF {Repository repositories}.
7
7
  #
8
8
  # @example Connecting to a Sesame server
9
- # url = RDF::URI("http://localhost:8080/openrdf-sesame")
9
+ # url = URI.parse("http://localhost:8080/openrdf-sesame")
10
10
  # server = RDF::Sesame::Server.new(url)
11
11
  #
12
+ # @example Connecting to a Sesame server using Basic Auth & local proxy
13
+ # server = RDF::Sesame::Server.new("http://localhost:8080/openrdf-sesame", {:user=> 'username', :pass => 'password',
14
+ # :proxy_host => 'localhost', :proxy_port => 8888})
15
+ # repo = server.repositories['repositoryname']
16
+ #
12
17
  # @example Retrieving the server's protocol version
13
18
  # server.protocol #=> 4
14
19
  #
@@ -37,15 +42,21 @@ module RDF::Sesame
37
42
  class Server
38
43
  include Enumerable
39
44
 
40
- ACCEPT_JSON = {'Accept' => 'application/sparql-results+json'}
41
- ACCEPT_XML = {'Accept' => 'application/sparql-results+xml'}
42
- ACCEPT_BOOL = {'Accept' => 'text/boolean'}
43
-
44
- # @return [RDF::URI]
45
- attr_reader :url
46
-
47
- # @return [Hash{Symbol => Object}]
48
- attr_reader :options
45
+ ACCEPT_JSON = {'Accept' => 'application/sparql-results+json'}.freeze
46
+ ACCEPT_NTRIPLES = {'Accept' => 'text/plain'}.freeze
47
+ ACCEPT_XML = {'Accept' => 'application/sparql-results+xml'}.freeze
48
+ ACCEPT_BOOL = {'Accept' => 'text/boolean'}.freeze
49
+ ACCEPT_XML_PURE = {'Accept' => 'application/rdf+xml' }.freeze
50
+ ACCEPT_TURTLE = {'Accept' => 'application/x-turtle'}.freeze
51
+ ACCEPT_N3 = {'Accept' => 'text/rdf+n3'}.freeze
52
+ ACCEPT_TRIX = {'Accept' => 'application/trix'}.freeze
53
+ ACCEPT_TRIG = {'Accept' => 'application/x-trig'}.freeze
54
+ ACCEPT_BINARY = {'Accept' => 'application/x-binary-rdf'}.freeze
55
+ ACCEPT_BINARY_TABLE = {'Accept' => 'application/x-binary-rdf-results-table'}.freeze
56
+
57
+ RESULT_BOOL = 'text/boolean'.freeze
58
+ RESULT_JSON = 'application/sparql-results+json'.freeze
59
+ RESULT_XML = 'application/sparql-results+xml'.freeze
49
60
 
50
61
  # @return [Connection]
51
62
  attr_reader :connection
@@ -53,21 +64,13 @@ module RDF::Sesame
53
64
  ##
54
65
  # Initializes this `Server` instance.
55
66
  #
56
- # @param [RDF::URI] url
67
+ # @param [URI, #to_s] url
57
68
  # @param [Hash{Symbol => Object}] options
58
69
  # @option options [Connection] :connection (nil)
59
70
  # @yield [connection]
60
71
  # @yieldparam [Server]
61
72
  def initialize(url, options = {}, &block)
62
- require 'addressable/uri' unless defined?(Addressable)
63
- @url = case url
64
- when Addressable::URI then url
65
- else Addressable::URI.parse(url.to_s)
66
- end
67
- @url = RDF::URI.new(@url)
68
-
69
- @connection = options.delete(:connection) || Connection.new(@url)
70
- @options = options
73
+ @connection = options.delete(:connection) || Connection.new(url, options)
71
74
 
72
75
  if block_given?
73
76
  case block.arity
@@ -81,15 +84,15 @@ module RDF::Sesame
81
84
  # Returns the URL for the given server-relative `path`.
82
85
  #
83
86
  # @example Getting a Sesame server's URL
84
- # server.url #=> RDF::URI("http://localhost:8080/openrdf-sesame")
87
+ # server.url #=> "http://localhost:8080/openrdf-sesame"
85
88
  #
86
89
  # @example Getting a Sesame server's protocol URL
87
- # server.url(:protocol) #=> RDF::URI("http://localhost:8080/openrdf-sesame/protocol")
90
+ # server.url(:protocol) #=> "http://localhost:8080/openrdf-sesame/protocol"
88
91
  #
89
92
  # @param [String, #to_s] path
90
- # @return [RDF::URI]
93
+ # @return [String]
91
94
  def url(path = nil)
92
- path ? RDF::URI.new("#{@url}/#{path}") : @url # FIXME
95
+ self.connection.url(path)
93
96
  end
94
97
 
95
98
  alias_method :uri, :url
@@ -97,9 +100,9 @@ module RDF::Sesame
97
100
  ##
98
101
  # Returns the URL of this server.
99
102
  #
100
- # @return [RDF::URI]
103
+ # @return [URI]
101
104
  def to_uri
102
- url
105
+ URI.parse(url)
103
106
  end
104
107
 
105
108
  ##
@@ -107,7 +110,7 @@ module RDF::Sesame
107
110
  #
108
111
  # @return [String]
109
112
  def to_s
110
- url.to_s
113
+ url
111
114
  end
112
115
 
113
116
  ##
@@ -127,14 +130,9 @@ module RDF::Sesame
127
130
  # @return [Integer]
128
131
  # @see http://www.openrdf.org/doc/sesame2/system/ch08.html#d0e180
129
132
  def protocol
130
- get(url(:protocol)) do |response|
131
- case response
132
- when Net::HTTPSuccess
133
- version = response.body
134
- version.to_i rescue 0
135
- else 0
136
- end
137
- end
133
+ response = get(:protocol)
134
+ version = response.body
135
+ version.to_i rescue 0
138
136
  end
139
137
 
140
138
  alias_method :protocol_version, :protocol
@@ -185,42 +183,69 @@ module RDF::Sesame
185
183
  def repositories
186
184
  require 'json' unless defined?(::JSON)
187
185
 
188
- get(url(:repositories), ACCEPT_JSON) do |response|
189
- case response
190
- when Net::HTTPSuccess
191
- json = ::JSON.parse(response.body)
192
- json['results']['bindings'].inject({}) do |repositories, binding|
193
- repository = Repository.new({
194
- :server => self,
195
- :uri => (uri = RDF::URI.new(binding['uri']['value'])),
196
- :id => (id = binding['id']['value']),
197
- :title => (title = binding['title']['value']),
198
- :readable => binding['readable']['value'].to_s == 'true',
199
- :writable => binding['writable']['value'].to_s == 'true',
200
- })
201
- repositories.merge({id => repository})
202
- end
203
- else [] # FIXME
204
- end
186
+ response = get(:repositories, ACCEPT_JSON)
187
+
188
+ json = ::JSON.parse(response.body)
189
+ json['results']['bindings'].inject({}) do |repositories, binding|
190
+ repository_id = binding['id']['value']
191
+ repository = Repository.new(:server => self,
192
+ :uri => RDF::URI.new(binding['uri']['value']),
193
+ :id => repository_id,
194
+ :title => binding['title']['value'],
195
+ :readable => binding['readable']['value'].to_s == 'true',
196
+ :writable => binding['writable']['value'].to_s == 'true')
197
+ repositories.merge!(repository_id => repository)
205
198
  end
206
199
  end
207
200
 
208
- def get(path, headers = {}, &block) # @private
201
+ def get(path, headers = {})
209
202
  self.connection.open do
210
- self.connection.get(path, headers, &block)
203
+ process_response self.connection.get(path, headers)
211
204
  end
212
205
  end
213
206
 
214
- def post(path, data, headers = {}, &block) # @private
207
+ def post(path, data, headers = {})
215
208
  self.connection.open do
216
- self.connection.post(path, data, headers, &block)
209
+ process_response self.connection.post(path, data, headers)
217
210
  end
218
211
  end
219
212
 
220
- def delete(path, headers = {}, &block) # @private
213
+ def put(path, data, headers = {})
221
214
  self.connection.open do
222
- self.connection.delete(path, headers, &block)
215
+ process_response self.connection.put(path, data, headers)
223
216
  end
224
217
  end
218
+
219
+ def delete(path, headers = {})
220
+ self.connection.open do
221
+ process_response self.connection.delete(path, headers)
222
+ end
223
+ end
224
+
225
+ ##
226
+ # Executes a SPARQL query and returns the Net::HTTP::Response of the result.
227
+ #
228
+ # @param [String, #to_s] url
229
+ # @param [Hash{Symbol => Object}] options
230
+ # @option options [String] :content_type
231
+ # @return [String]
232
+ def process_response(response, options = {})
233
+ @headers['Accept'] = options[:content_type] if options[:content_type]
234
+ if response.is_a?(Net::HTTPSuccess)
235
+ response
236
+ else
237
+ case response
238
+ when Net::HTTPBadRequest # 400 Bad Request
239
+ raise MalformedQuery.new(response.body)
240
+ when Net::HTTPClientError # 4xx
241
+ raise ClientError.new(response.body)
242
+ when Net::HTTPServerError # 5xx
243
+ raise ServerError.new(response.body)
244
+ else
245
+ raise ServerError.new(response.body)
246
+ end
247
+ end
248
+ end
249
+
225
250
  end # class Server
226
251
  end # module RDF::Sesame
@@ -1,7 +1,7 @@
1
1
  module RDF; module Sesame
2
2
  module VERSION
3
- MAJOR = 0
4
- MINOR = 3
3
+ MAJOR = 1
4
+ MINOR = 1
5
5
  TINY = 0
6
6
  EXTRA = nil
7
7
 
metadata CHANGED
@@ -1,142 +1,140 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: rdf-sesame
3
- version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 3
8
- - 0
9
- version: 0.3.0
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.1.0
10
5
  platform: ruby
11
- authors:
6
+ authors:
12
7
  - Arto Bendiken
8
+ - Slava Kravchenko
13
9
  autorequire:
14
10
  bindir: bin
15
11
  cert_chain: []
16
-
17
- date: 2010-12-27 00:00:00 +01:00
18
- default_executable:
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
12
+ date: 2014-09-24 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
21
15
  name: json_pure
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
24
- requirements:
25
- - - ">="
26
- - !ruby/object:Gem::Version
27
- segments:
28
- - 1
29
- - 4
30
- - 2
31
- version: 1.4.2
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - "~>"
19
+ - !ruby/object:Gem::Version
20
+ version: '1.8'
32
21
  type: :runtime
33
- version_requirements: *id001
34
- - !ruby/object:Gem::Dependency
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - "~>"
26
+ - !ruby/object:Gem::Version
27
+ version: '1.8'
28
+ - !ruby/object:Gem::Dependency
35
29
  name: rdf
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - "~>"
33
+ - !ruby/object:Gem::Version
34
+ version: '1.1'
35
+ type: :runtime
36
36
  prerelease: false
37
- requirement: &id002 !ruby/object:Gem::Requirement
38
- requirements:
39
- - - ~>
40
- - !ruby/object:Gem::Version
41
- segments:
42
- - 0
43
- - 3
44
- - 0
45
- version: 0.3.0
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: '1.1'
42
+ - !ruby/object:Gem::Dependency
43
+ name: addressable
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - "~>"
47
+ - !ruby/object:Gem::Version
48
+ version: '2.3'
46
49
  type: :runtime
47
- version_requirements: *id002
48
- - !ruby/object:Gem::Dependency
49
- name: yard
50
50
  prerelease: false
51
- requirement: &id003 !ruby/object:Gem::Requirement
52
- requirements:
53
- - - ">="
54
- - !ruby/object:Gem::Version
55
- segments:
56
- - 0
57
- - 6
58
- - 0
59
- version: 0.6.0
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - "~>"
54
+ - !ruby/object:Gem::Version
55
+ version: '2.3'
56
+ - !ruby/object:Gem::Dependency
57
+ name: yard
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - "~>"
61
+ - !ruby/object:Gem::Version
62
+ version: '0.8'
60
63
  type: :development
61
- version_requirements: *id003
62
- - !ruby/object:Gem::Dependency
63
- name: rspec
64
64
  prerelease: false
65
- requirement: &id004 !ruby/object:Gem::Requirement
66
- requirements:
67
- - - ">="
68
- - !ruby/object:Gem::Version
69
- segments:
70
- - 2
71
- - 1
72
- - 0
73
- version: 2.1.0
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '0.8'
70
+ - !ruby/object:Gem::Dependency
71
+ name: rspec
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - "~>"
75
+ - !ruby/object:Gem::Version
76
+ version: '2'
74
77
  type: :development
75
- version_requirements: *id004
76
- - !ruby/object:Gem::Dependency
77
- name: rdf-spec
78
78
  prerelease: false
79
- requirement: &id005 !ruby/object:Gem::Requirement
80
- requirements:
81
- - - ~>
82
- - !ruby/object:Gem::Version
83
- segments:
84
- - 0
85
- - 3
86
- - 0
87
- version: 0.3.0
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - "~>"
82
+ - !ruby/object:Gem::Version
83
+ version: '2'
84
+ - !ruby/object:Gem::Dependency
85
+ name: rdf-spec
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - "~>"
89
+ - !ruby/object:Gem::Version
90
+ version: '1.1'
88
91
  type: :development
89
- version_requirements: *id005
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - "~>"
96
+ - !ruby/object:Gem::Version
97
+ version: '1.1'
90
98
  description: RDF.rb plugin providing a Sesame 2.0 storage adapter.
91
99
  email: public-rdf-ruby@w3.org
92
100
  executables: []
93
-
94
101
  extensions: []
95
-
96
102
  extra_rdoc_files: []
97
-
98
- files:
103
+ files:
99
104
  - AUTHORS
100
105
  - CREDITS
101
106
  - README
102
107
  - UNLICENSE
103
108
  - VERSION
109
+ - lib/rdf/sesame.rb
104
110
  - lib/rdf/sesame/connection.rb
111
+ - lib/rdf/sesame/exceptions.rb
105
112
  - lib/rdf/sesame/repository.rb
106
113
  - lib/rdf/sesame/server.rb
107
114
  - lib/rdf/sesame/version.rb
108
- - lib/rdf/sesame.rb
109
- has_rdoc: false
110
115
  homepage: http://rdf.rubyforge.org/sesame/
111
- licenses:
116
+ licenses:
112
117
  - Public Domain
118
+ metadata: {}
113
119
  post_install_message:
114
120
  rdoc_options: []
115
-
116
- require_paths:
121
+ require_paths:
117
122
  - lib
118
- required_ruby_version: !ruby/object:Gem::Requirement
119
- requirements:
123
+ required_ruby_version: !ruby/object:Gem::Requirement
124
+ requirements:
120
125
  - - ">="
121
- - !ruby/object:Gem::Version
122
- segments:
123
- - 1
124
- - 8
125
- - 1
126
+ - !ruby/object:Gem::Version
126
127
  version: 1.8.1
127
- required_rubygems_version: !ruby/object:Gem::Requirement
128
- requirements:
128
+ required_rubygems_version: !ruby/object:Gem::Requirement
129
+ requirements:
129
130
  - - ">="
130
- - !ruby/object:Gem::Version
131
- segments:
132
- - 0
133
- version: "0"
131
+ - !ruby/object:Gem::Version
132
+ version: '0'
134
133
  requirements: []
135
-
136
134
  rubyforge_project: rdf
137
- rubygems_version: 1.3.6
135
+ rubygems_version: 2.2.2
138
136
  signing_key:
139
- specification_version: 3
137
+ specification_version: 4
140
138
  summary: Sesame 2.0 adapter for RDF.rb.
141
139
  test_files: []
142
-
140
+ has_rdoc: false