pho 0.7.4 → 0.7.5

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.
Files changed (39) hide show
  1. data/CHANGES +9 -0
  2. data/Rakefile +1 -1
  3. data/doc/index.html +1 -1
  4. data/doc/rdoc/classes/Pho/CommandLine.html +108 -108
  5. data/doc/rdoc/classes/Pho/DatatypeProperty.html +12 -12
  6. data/doc/rdoc/classes/Pho/Enrichment/StoreEnricher.html +29 -29
  7. data/doc/rdoc/classes/Pho/Etags.html +36 -36
  8. data/doc/rdoc/classes/Pho/Facet/Results.html +19 -19
  9. data/doc/rdoc/classes/Pho/Facet/Term.html +6 -6
  10. data/doc/rdoc/classes/Pho/FieldPredicateMap.html +146 -112
  11. data/doc/rdoc/classes/Pho/FieldWeighting.html +12 -12
  12. data/doc/rdoc/classes/Pho/Job.html +64 -64
  13. data/doc/rdoc/classes/Pho/Jobs.html +60 -60
  14. data/doc/rdoc/classes/Pho/OAI.html +1 -0
  15. data/doc/rdoc/classes/Pho/OAI/Record.html +1 -1
  16. data/doc/rdoc/classes/Pho/OAI/Records.html +4 -4
  17. data/doc/rdoc/classes/Pho/QueryProfile.html +66 -66
  18. data/doc/rdoc/classes/Pho/RDF/Parser.html +24 -24
  19. data/doc/rdoc/classes/Pho/ResourceHash/Converter.html +36 -36
  20. data/doc/rdoc/classes/Pho/ResourceHash/SetAlgebra.html +12 -12
  21. data/doc/rdoc/classes/Pho/Snapshot.html +35 -35
  22. data/doc/rdoc/classes/Pho/Status.html +26 -26
  23. data/doc/rdoc/classes/Pho/Store.html +215 -215
  24. data/doc/rdoc/classes/Pho/StoreSparqlClient.html +12 -12
  25. data/doc/rdoc/classes/String.html +1 -1
  26. data/doc/rdoc/created.rid +1 -1
  27. data/doc/rdoc/files/CHANGES.html +17 -1
  28. data/doc/rdoc/files/lib/pho/field_predicate_map_rb.html +1 -1
  29. data/doc/rdoc/files/lib/pho/oai_rb.html +1 -1
  30. data/doc/rdoc/files/lib/pho_rb.html +2 -1
  31. data/doc/rdoc/fr_class_index.html +1 -0
  32. data/doc/rdoc/fr_method_index.html +152 -149
  33. data/lib/pho.rb +1 -0
  34. data/lib/pho/field_predicate_map.rb +18 -7
  35. data/lib/pho/oai.rb +25 -0
  36. data/tests/tc_command_line.rb +1 -1
  37. data/tests/tc_field_predicate_map.rb +36 -5
  38. data/tests/tc_oai.rb +37 -0
  39. metadata +4 -4
data/lib/pho.rb CHANGED
@@ -4,6 +4,7 @@ require 'json'
4
4
  require 'yaml'
5
5
  require 'date'
6
6
  require 'rexml/document'
7
+ require 'md5'
7
8
 
8
9
  require 'pho/etags'
9
10
  require 'pho/store'
@@ -134,7 +134,7 @@ module Pho
134
134
  return fpmap
135
135
  end
136
136
 
137
- #Create a DatatypeProperty instance, automatically assigning a unique identifier to it, and adding
137
+ #Create a DatatypeProperty instance, automatically assigning a unique identifier to it, and
138
138
  #validating the supplied data to ensure it matches the platform rules
139
139
  def FieldPredicateMap.create_mapping(store, property_uri, name, analyzer=nil)
140
140
  check_value("property_uri", property_uri)
@@ -150,6 +150,16 @@ module Pho
150
150
  return DatatypeProperty.new(mapping_uri, property_uri, name, analyzer)
151
151
  end
152
152
 
153
+ #Create a DatatypeProperty instance, automatically assigning a unique identifier to it, and
154
+ #validating the supplied data to ensure it matches the platform rules.
155
+ #
156
+ #Then automatically appends it to the provided fpmap instance
157
+ def FieldPredicateMap.add_mapping(fpmap, store, property_uri, name, analyzer=nil)
158
+ mapping = create_mapping(store, property_uri, name, analyzer)
159
+ fpmap << mapping
160
+ return mapping
161
+ end
162
+
153
163
  def initialize(uri, label, datatype_properties = [])
154
164
  @uri = uri
155
165
  @label = label
@@ -162,7 +172,7 @@ module Pho
162
172
  def <<(obj)
163
173
  @datatype_properties << obj
164
174
  end
165
-
175
+
166
176
  #Lookup the name mapped to the specified uri
167
177
  #
168
178
  #uri:: the property uri to search for
@@ -265,11 +275,12 @@ module Pho
265
275
 
266
276
  private
267
277
  def FieldPredicateMap.get_suffix(uri)
268
- candidate_suffix = uri.split("/").last
269
- if candidate_suffix.index("#") != -1
270
- return candidate_suffix.split("#").last
271
- end
272
- return candidate_suffix
278
+ return Digest::MD5.hexdigest(uri)
279
+ # candidate_suffix = uri.split("/").last
280
+ # if candidate_suffix.index("#") != -1
281
+ # return candidate_suffix.split("#").last
282
+ # end
283
+ # return candidate_suffix
273
284
  end
274
285
 
275
286
  def FieldPredicateMap.check_value(name, val)
@@ -3,6 +3,31 @@ module Pho
3
3
  #OAI-PMH Support
4
4
  module OAI
5
5
 
6
+ #Access basic store statistics via the OAI interface
7
+ class Statistics
8
+
9
+ #Datestamp of last updated record in the store
10
+ #
11
+ #This reads the OAI-PMH interface and retrieves the datestamp of the most
12
+ #recently updated item
13
+ def Statistics.last_updated(store)
14
+ records = Records.read_from_store(store)
15
+ return records.records[0].datestamp
16
+ end
17
+
18
+ #Number of entities in the store. This includes all resources in both the
19
+ #metabox AND the contentbox
20
+ def Statistics.num_of_entities(store)
21
+ records = Records.read_from_store(store)
22
+ if records.resumption_token != nil
23
+ return records.list_size
24
+ else
25
+ return records.records.length
26
+ end
27
+ end
28
+
29
+ end
30
+
6
31
  class Record
7
32
 
8
33
  attr_reader :identifier
@@ -198,7 +198,7 @@ EOL
198
198
  mc = mock()
199
199
  mc.expects(:build_uri).with("/config/fpmaps/1").returns( "http://api.talis.com/stores/testing/config/fpmaps/1" )
200
200
  mc.expects(:get_field_predicate_map).returns( HTTP::Message.new_response(TEST_FPMAP) )
201
- mc.expects(:build_uri).with("/config/fpmaps/1#test").returns( "http://api.talis.com/stores/testing/config/fpmaps/1#test" )
201
+ mc.expects(:build_uri).with("/config/fpmaps/1##{Digest::MD5.hexdigest("http://www.example.org/test")}").returns( "http://api.talis.com/stores/testing/config/fpmaps/1##{Digest::MD5.hexdigest("http://www.example.org/test")}" )
202
202
  mc.expects(:put_field_predicate_map).returns( HTTP::Message.new_response("") )
203
203
 
204
204
  @opts["field"] = "test"
@@ -253,31 +253,62 @@ EOL
253
253
  end
254
254
 
255
255
  def test_create_mapping_with_slash_uri
256
+ digest = Digest::MD5.hexdigest("http://www.example.org/ns/title")
256
257
  mc = mock()
257
258
  mc.stub_everything
258
- mc.expects(:build_uri).with("/config/fpmaps/1#title").returns("http://api.talis.com/stores/testing/config/fpmaps/1#title")
259
+ mc.expects(:build_uri).with("/config/fpmaps/1##{digest}").returns("http://api.talis.com/stores/testing/config/fpmaps/1##{digest}")
259
260
 
260
261
  mapping = Pho::FieldPredicateMap.create_mapping(mc, "http://www.example.org/ns/title", "title")
261
262
  assert_not_nil(mapping)
262
- assert_equal("http://api.talis.com/stores/testing/config/fpmaps/1#title", mapping.uri)
263
+ assert_equal("http://api.talis.com/stores/testing/config/fpmaps/1##{digest}", mapping.uri)
263
264
  assert_equal("http://www.example.org/ns/title", mapping.property_uri)
264
265
  assert_equal("title", mapping.name)
265
266
  assert_equal(nil, mapping.analyzer)
266
267
  end
267
268
 
268
269
  def test_create_mapping_with_hash_uri
270
+ digest = Digest::MD5.hexdigest("http://www.example.org/ns/things#document")
269
271
  mc = mock()
270
272
  mc.stub_everything
271
- mc.expects(:build_uri).with("/config/fpmaps/1#document").returns("http://api.talis.com/stores/testing/config/fpmaps/1#document")
273
+ mc.expects(:build_uri).with("/config/fpmaps/1##{digest}").returns("http://api.talis.com/stores/testing/config/fpmaps/1##{digest}")
272
274
 
273
275
  mapping = Pho::FieldPredicateMap.create_mapping(mc, "http://www.example.org/ns/things#document", "document", Pho::Analyzers::DUTCH)
274
276
  assert_not_nil(mapping)
275
- assert_equal("http://api.talis.com/stores/testing/config/fpmaps/1#document", mapping.uri)
277
+ assert_equal("http://api.talis.com/stores/testing/config/fpmaps/1##{digest}", mapping.uri)
276
278
  assert_equal("http://www.example.org/ns/things#document", mapping.property_uri)
277
279
  assert_equal("document", mapping.name)
278
280
  assert_equal(Pho::Analyzers::DUTCH, mapping.analyzer)
279
281
  end
280
-
282
+
283
+ def test_add_mapping
284
+ digest = Digest::MD5.hexdigest("http://www.example.org/ns/things#document")
285
+ mc = mock()
286
+ mc.stub_everything
287
+ mc.expects(:build_uri).with("/config/fpmaps/1##{digest}").returns("http://api.talis.com/stores/testing/config/fpmaps/1##{digest}")
288
+
289
+ fpmap = Pho::FieldPredicateMap.new("http://api.talis.com/stores/testing/fpmaps/1#mapping", "Test Mapping")
290
+
291
+ mapping = Pho::FieldPredicateMap.add_mapping(fpmap, mc, "http://www.example.org/ns/things#document", "document", Pho::Analyzers::DUTCH)
292
+ assert_not_nil(mapping)
293
+ assert_equal("http://api.talis.com/stores/testing/config/fpmaps/1##{digest}", mapping.uri)
294
+ assert_equal("http://www.example.org/ns/things#document", mapping.property_uri)
295
+ assert_equal("document", mapping.name)
296
+ assert_equal(Pho::Analyzers::DUTCH, mapping.analyzer)
297
+ end
298
+
299
+ def test_add_mapping_with_similar_uri_suffix
300
+ mc = mock()
301
+ mc.stub_everything
302
+ mc.expects(:build_uri).with("/config/fpmaps/1##{Digest::MD5.hexdigest("http://www.example.org/ns/things#document")}").returns(
303
+ "http://api.talis.com/stores/testing/config/fpmaps/1##{Digest::MD5.hexdigest("http://www.example.org/ns/things#document")}")
304
+
305
+ fpmap = Pho::FieldPredicateMap.new("http://api.talis.com/stores/testing/fpmaps/1#mapping", "Test Mapping")
306
+
307
+ mapping = Pho::FieldPredicateMap.add_mapping(fpmap, mc, "http://www.example.org/ns/things#document", "document", Pho::Analyzers::DUTCH)
308
+ assert_equal("http://api.talis.com/stores/testing/config/fpmaps/1##{Digest::MD5.hexdigest("http://www.example.org/ns/things#document")}", mapping.uri)
309
+
310
+ end
311
+
281
312
  def test_create_mapping_with_invalid_name
282
313
  assert_raise RuntimeError do
283
314
  Pho::FieldPredicateMap.create_mapping(nil, "http://www.example.org/ns/things#document", "12345")
@@ -135,4 +135,41 @@ EOL
135
135
  assert_equal(0, results.cursor)
136
136
  assert_equal("b2FpX2RjfDEwMHwxOTcwLTAxLTAxVDAwOjAwOjAwWnwyMDEwLTA0LTA0VDEzOjU0OjMyWg==", results.resumption_token)
137
137
  end
138
+
139
+ def test_statistics_last_updated
140
+ mc = mock()
141
+ mc.expects(:set_auth)
142
+ mc.expects(:get).with("http://api.talis.com/stores/testing/services/oai-pmh", {"verb" => "ListRecords", "metadataPrefix" => "oai_dc"} ).returns(
143
+ HTTP::Message.new_response(LIST_RECORDS))
144
+
145
+ store = Pho::Store.new("http://api.talis.com/stores/testing", "user", "pass", mc)
146
+
147
+ updated = Pho::OAI::Statistics.last_updated(store)
148
+ assert_equal(DateTime.parse("2010-03-19T12:57:06Z"), updated)
149
+ end
150
+
151
+ def test_statistics_num_entities
152
+ mc = mock()
153
+ mc.expects(:set_auth)
154
+ mc.expects(:get).with("http://api.talis.com/stores/testing/services/oai-pmh", {"verb" => "ListRecords", "metadataPrefix" => "oai_dc"} ).returns(
155
+ HTTP::Message.new_response(LIST_RECORDS))
156
+
157
+ store = Pho::Store.new("http://api.talis.com/stores/testing", "user", "pass", mc)
158
+
159
+ size = Pho::OAI::Statistics.num_of_entities(store)
160
+ assert_equal(2, size)
161
+ end
162
+
163
+ def test_statistics_num_entities_with_resumption
164
+ mc = mock()
165
+ mc.expects(:set_auth)
166
+ mc.expects(:get).with("http://api.talis.com/stores/testing/services/oai-pmh", {"verb" => "ListRecords", "metadataPrefix" => "oai_dc"} ).returns(
167
+ HTTP::Message.new_response(LIST_RECORDS_WITH_TOKEN))
168
+
169
+ store = Pho::Store.new("http://api.talis.com/stores/testing", "user", "pass", mc)
170
+
171
+ size = Pho::OAI::Statistics.num_of_entities(store)
172
+ assert_equal(6151294, size)
173
+ end
174
+
138
175
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pho
3
3
  version: !ruby/object:Gem::Version
4
- hash: 11
4
+ hash: 9
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 7
9
- - 4
10
- version: 0.7.4
9
+ - 5
10
+ version: 0.7.5
11
11
  platform: ruby
12
12
  authors:
13
13
  - Leigh Dodds
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-08-31 00:00:00 +01:00
18
+ date: 2010-09-01 00:00:00 +01:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency