rdf-sesame 0.0.1 → 0.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.
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