rdf-sesame 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/README CHANGED
@@ -1,7 +1,11 @@
1
1
  RDF::Sesame: Sesame 2.0 Adapter for RDF.rb
2
2
  ==========================================
3
3
 
4
- This is a Sesame 2.0 adapter for [RDF.rb](http://rdf.rubyforge.org/).
4
+ This is an [RDF.rb](http://rdf.rubyforge.org/) plugin that adds support for
5
+ Sesame 2.0-compatible RDF repositories accessed using Sesame's
6
+ [HTTP API](http://www.openrdf.org/doc/sesame2/system/ch08.html).
7
+
8
+ * <http://github.com/bendiken/rdf-sesame>
5
9
 
6
10
  ### About Sesame
7
11
 
@@ -10,13 +14,13 @@ This is a Sesame 2.0 adapter for [RDF.rb](http://rdf.rubyforge.org/).
10
14
  Documentation
11
15
  -------------
12
16
 
13
- * [`RDF::Sesame`](http://rdf.rubyforge.org/RDF/Sesame.html)
17
+ * {RDF::Sesame}
14
18
 
15
19
  Dependencies
16
20
  ------------
17
21
 
18
- * [RDF.rb](http://rdf.rubyforge.org/) (>= 0.0.6)
19
- * [JSON](http://flori.github.com/json/) (>= 1.2.0)
22
+ * [RDF.rb](http://gemcutter.org/gems/rdf) (>= 0.0.9)
23
+ * [JSON](http://gemcutter.org/gems/json_pure) (>= 1.2.0)
20
24
 
21
25
  Installation
22
26
  ------------
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.1
1
+ 0.1.0
@@ -7,8 +7,8 @@ module RDF
7
7
  # Dependencies
8
8
  # ------------
9
9
  #
10
- # * [RDF.rb](http://rdf.rubyforge.org/) (>= 0.0.6)
11
- # * [JSON](http://flori.github.com/json/) (>= 1.2.0)
10
+ # * [RDF.rb](http://gemcutter.org/gems/rdf) (>= 0.0.9)
11
+ # * [JSON](http://gemcutter.org/gems/json_pure) (>= 1.2.0)
12
12
  #
13
13
  # Installation
14
14
  # ------------
@@ -92,7 +92,7 @@ module RDF::Sesame
92
92
 
93
93
  # Preserve only those URI components that we actually require for
94
94
  # establishing a connection to the HTTP server in question:
95
- @url = RDF::URI.new(Addressable::URI.new(to_hash))
95
+ @url = RDF::URI.new(to_hash)
96
96
 
97
97
  @headers = options.delete(:headers) || {}
98
98
  @options = options
@@ -307,12 +307,20 @@ module RDF::Sesame
307
307
  # Performs an HTTP POST request for the given Sesame `path`.
308
308
  #
309
309
  # @param [String, #to_s] path
310
+ # @param [String, #to_s] data
310
311
  # @param [Hash{String => String}] headers
311
312
  # @yield [response]
312
313
  # @yieldparam [Net::HTTPResponse] response
313
314
  # @return [Net::HTTPResponse]
314
- def post(path, headers = {}, &block)
315
- # TODO
315
+ def post(path, data, headers = {}, &block)
316
+ Net::HTTP.start(host, port) do |http|
317
+ response = http.post(path.to_s, data.to_s, @headers.merge(headers))
318
+ if block_given?
319
+ block.call(response)
320
+ else
321
+ response
322
+ end
323
+ end
316
324
  end
317
325
 
318
326
  ##
@@ -336,7 +344,14 @@ module RDF::Sesame
336
344
  # @yieldparam [Net::HTTPResponse] response
337
345
  # @return [Net::HTTPResponse]
338
346
  def delete(path, headers = {}, &block)
339
- # TODO
347
+ Net::HTTP.start(host, port) do |http|
348
+ response = http.delete(path.to_s, @headers.merge(headers))
349
+ if block_given?
350
+ block.call(response)
351
+ else
352
+ response
353
+ end
354
+ end
340
355
  end
341
356
  end
342
357
  end
@@ -6,22 +6,20 @@ module RDF::Sesame
6
6
  # servers.
7
7
  #
8
8
  # @example Opening a Sesame repository (1)
9
- # url = "http://localhost:8080/openrdf-sesame/repositories/SYSTEM"
10
- # db = RDF::Sesame::Repository.new(url)
9
+ # url = "http://localhost:8080/openrdf-sesame/repositories/SYSTEM"
10
+ # repository = RDF::Sesame::Repository.new(url)
11
11
  #
12
12
  # @example Opening a Sesame repository (2)
13
13
  # server = RDF::Sesame::Server.new("http://localhost:8080/openrdf-sesame")
14
- # db = RDF::Sesame::Repository.new(:server => server, :id => :SYSTEM)
14
+ # repository = RDF::Sesame::Repository.new(:server => server, :id => :SYSTEM)
15
15
  #
16
16
  # @example Opening a Sesame repository (3)
17
17
  # server = RDF::Sesame::Server.new("http://localhost:8080/openrdf-sesame")
18
- # db = server.repository(:SYSTEM)
18
+ # repository = server.repository(:SYSTEM)
19
19
  #
20
20
  # @see RDF::Sesame
21
21
  # @see http://www.openrdf.org/doc/sesame2/system/ch08.html
22
22
  class Repository < RDF::Repository
23
- include Enumerable
24
-
25
23
  # @return [RDF::URI]
26
24
  attr_reader :url
27
25
  alias_method :uri, :url
@@ -55,18 +53,19 @@ module RDF::Sesame
55
53
  case url_or_options
56
54
  when String
57
55
  initialize(RDF::URI.new(url_or_options), &block)
56
+
58
57
  when RDF::URI
59
- require 'addressable/uri' unless defined?(Addressable)
60
58
  require 'pathname' unless defined?(Pathname)
61
59
  @uri = url_or_options
62
- @server = Server.new(RDF::URI.new(Addressable::URI.new({
60
+ @server = Server.new(RDF::URI.new({
63
61
  :scheme => @uri.scheme,
64
62
  :userinfo => @uri.userinfo,
65
63
  :host => @uri.host,
66
64
  :port => @uri.port,
67
65
  :path => Pathname.new(@uri.path).parent.parent.to_s, # + '../..'
68
- })))
66
+ }))
69
67
  @options = {}
68
+
70
69
  when Hash
71
70
  raise ArgumentError.new("missing options[:server]") unless url_or_options.has_key?(:server)
72
71
  raise ArgumentError.new("missing options[:id]") unless url_or_options.has_key?(:id)
@@ -75,6 +74,7 @@ module RDF::Sesame
75
74
  @id = @options.delete(:id)
76
75
  @uri = @options.delete(:uri) || server.url("repositories/#{@id}")
77
76
  @title = @options.delete(:title)
77
+
78
78
  else
79
79
  raise ArgumentError.new("wrong argument type #{url_or_options.class} (expected String, RDF::URI or Hash)")
80
80
  end
@@ -90,21 +90,53 @@ module RDF::Sesame
90
90
  ##
91
91
  # Returns the URL for the given repository-relative `path`.
92
92
  #
93
- # @param [String, #to_s] path
93
+ # @param [String, #to_s] path
94
+ # @param [Hash, RDF::Statement] query
94
95
  # @return [RDF::URI]
95
- def url(path = nil)
96
- path ? RDF::URI.new("#{@uri}/#{path}") : @uri # FIXME
96
+ def url(path = nil, query = {})
97
+ url = path ? RDF::URI.new("#{@uri}/#{path}") : @uri.dup # FIXME
98
+ unless query.nil?
99
+ case query
100
+ when RDF::Statement
101
+ writer = RDF::NTriples::Writer.new
102
+ query = {
103
+ :subj => writer.format_value(query.subject),
104
+ :pred => writer.format_value(query.predicate),
105
+ :obj => writer.format_value(query.object),
106
+ }
107
+ url.query_values = query
108
+ when Hash then query
109
+ url.query_values = query unless query.empty?
110
+ end
111
+ end
112
+ return url
97
113
  end
98
114
 
99
115
  alias_method :uri, :url
100
116
 
117
+ ##
118
+ # Returns `true` to indicate that this repository is durable.
119
+ #
120
+ # @return [Boolean]
121
+ def durable?
122
+ true # FIXME
123
+ end
124
+
125
+ ##
126
+ # Returns `true` if this repository contains no RDF statements.
127
+ #
128
+ # @return [Boolean]
129
+ def empty?
130
+ count.zero?
131
+ end
132
+
101
133
  ##
102
134
  # Returns the number of RDF statements in this repository.
103
135
  #
104
136
  # @return [Integer]
105
137
  # @see http://www.openrdf.org/doc/sesame2/system/ch08.html#d0e569
106
- def size
107
- get(:size) do |response|
138
+ def count
139
+ server.get(url(:size)) do |response|
108
140
  case response
109
141
  when Net::HTTPSuccess
110
142
  size = response.body
@@ -114,21 +146,83 @@ module RDF::Sesame
114
146
  end
115
147
  end
116
148
 
117
- protected
118
-
119
- ##
120
- # Performs an HTTP GET request for the given Sesame repository `path`.
121
- #
122
- # @param [String, #to_s] path
123
- # @param [Hash{String => String}] headers
124
- # @yield [response]
125
- # @yieldparam [Net::HTTPResponse] response
126
- # @return [Net::HTTPResponse]
127
- def get(path, headers = {}, &block)
128
- @server.connection.open do
129
- @server.connection.get(url(path), headers, &block)
149
+ ##
150
+ # Returns `true` if this repository contains the given RDF statement.
151
+ #
152
+ # @param [RDF::Statement] statement
153
+ # @return [Boolean]
154
+ # @see http://www.openrdf.org/doc/sesame2/system/ch08.html#d0e304
155
+ def has_statement?(statement)
156
+ server.get(url(:statements, statement), 'Accept' => 'text/plain') do |response|
157
+ case response
158
+ when Net::HTTPSuccess
159
+ reader = RDF::NTriples::Reader.new(response.body)
160
+ reader.include?(statement)
161
+ else false
130
162
  end
131
163
  end
164
+ end
132
165
 
166
+ ##
167
+ # Enumerates each RDF statement in this repository.
168
+ #
169
+ # @yield [statement]
170
+ # @yieldparam [RDF::Statement] statement
171
+ # @return [Enumerator]
172
+ # @see http://www.openrdf.org/doc/sesame2/system/ch08.html#d0e304
173
+ def each(&block)
174
+ server.get(url(:statements), 'Accept' => 'text/plain') do |response|
175
+ case response
176
+ when Net::HTTPSuccess
177
+ reader = RDF::NTriples::Reader.new(response.body)
178
+ reader.each_statement(&block)
179
+ end
180
+ end
181
+ end
182
+
183
+ ##
184
+ # Inserts the given RDF statement into this repository.
185
+ #
186
+ # @param [RDF::Statement] statement
187
+ # @return [Boolean]
188
+ # @see http://www.openrdf.org/doc/sesame2/system/ch08.html#d0e304
189
+ def insert_statement(statement)
190
+ data = RDF::NTriples::Writer.buffer { |writer| writer << statement } # FIXME for RDF.rb 0.1.0
191
+ server.post(url(:statements), data, 'Content-Type' => 'text/plain') do |response|
192
+ case response
193
+ when Net::HTTPSuccess then true
194
+ else false
195
+ end
196
+ end
197
+ end
198
+
199
+ ##
200
+ # Deletes the given RDF statement from this repository.
201
+ #
202
+ # @param [RDF::Statement] statement
203
+ # @return [Boolean]
204
+ # @see http://www.openrdf.org/doc/sesame2/system/ch08.html#d0e304
205
+ def delete_statement(statement)
206
+ server.delete(url(:statements, statement)) do |response|
207
+ case response
208
+ when Net::HTTPSuccess then true
209
+ else false
210
+ end
211
+ end
212
+ end
213
+
214
+ ##
215
+ # Deletes all RDF statements from this repository.
216
+ #
217
+ # @return [Boolean]
218
+ # @see http://www.openrdf.org/doc/sesame2/system/ch08.html#d0e304
219
+ def clear_statements
220
+ server.delete(url(:statements)) do |response|
221
+ case response
222
+ when Net::HTTPSuccess then true
223
+ else false
224
+ end
225
+ end
226
+ end
133
227
  end
134
228
  end
@@ -128,7 +128,7 @@ module RDF::Sesame
128
128
  # @return [Integer]
129
129
  # @see http://www.openrdf.org/doc/sesame2/system/ch08.html#d0e180
130
130
  def protocol
131
- get(:protocol) do |response|
131
+ get(url(:protocol)) do |response|
132
132
  case response
133
133
  when Net::HTTPSuccess
134
134
  version = response.body
@@ -186,7 +186,7 @@ module RDF::Sesame
186
186
  def repositories
187
187
  require 'json' unless defined?(JSON)
188
188
 
189
- get(:repositories, ACCEPT_JSON) do |response|
189
+ get(url(:repositories), ACCEPT_JSON) do |response|
190
190
  case response
191
191
  when Net::HTTPSuccess
192
192
  json = JSON.parse(response.body)
@@ -206,21 +206,22 @@ module RDF::Sesame
206
206
  end
207
207
  end
208
208
 
209
- protected
210
-
211
- ##
212
- # Performs an HTTP GET request for the given Sesame server `path`.
213
- #
214
- # @param [String, #to_s] path
215
- # @param [Hash{String => String}] headers
216
- # @yield [response]
217
- # @yieldparam [Net::HTTPResponse] response
218
- # @return [Net::HTTPResponse]
219
- def get(path, headers = {}, &block)
220
- @connection.open do
221
- @connection.get(url(path), headers, &block)
222
- end
209
+ def get(path, headers = {}, &block) # @private
210
+ self.connection.open do
211
+ self.connection.get(path, headers, &block)
223
212
  end
213
+ end
224
214
 
215
+ def post(path, data, headers = {}, &block) # @private
216
+ self.connection.open do
217
+ self.connection.post(path, data, headers, &block)
218
+ end
219
+ end
220
+
221
+ def delete(path, headers = {}, &block) # @private
222
+ self.connection.open do
223
+ self.connection.delete(path, headers, &block)
224
+ end
225
+ end
225
226
  end
226
227
  end
@@ -1,8 +1,8 @@
1
1
  module RDF module Sesame
2
2
  module VERSION
3
3
  MAJOR = 0
4
- MINOR = 0
5
- TINY = 1
4
+ MINOR = 1
5
+ TINY = 0
6
6
  EXTRA = nil
7
7
 
8
8
  STRING = [MAJOR, MINOR, TINY].join('.')
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rdf-sesame
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Arto Bendiken
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2010-01-01 00:00:00 +01:00
12
+ date: 2010-02-02 00:00:00 +01:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -40,10 +40,10 @@ dependencies:
40
40
  requirements:
41
41
  - - ">="
42
42
  - !ruby/object:Gem::Version
43
- version: 0.0.6
43
+ version: 0.0.9
44
44
  version:
45
45
  - !ruby/object:Gem::Dependency
46
- name: json
46
+ name: json_pure
47
47
  type: :runtime
48
48
  version_requirement:
49
49
  version_requirements: !ruby/object:Gem::Requirement
@@ -52,7 +52,7 @@ dependencies:
52
52
  - !ruby/object:Gem::Version
53
53
  version: 1.2.0
54
54
  version:
55
- description: RDF::Sesame is a Sesame 2.0 adapter for RDF.rb.
55
+ description: RDF.rb plugin providing a Sesame 2.0 storage adapter.
56
56
  email: arto.bendiken@gmail.com
57
57
  executables: []
58
58