openbel-api 0.6.2-java → 1.0.0-java

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 (38) hide show
  1. checksums.yaml +4 -4
  2. data/.gemspec +11 -14
  3. data/CHANGELOG.md +18 -12
  4. data/README.md +25 -36
  5. data/VERSION +1 -1
  6. data/app/openbel/api/app.rb +13 -12
  7. data/app/openbel/api/config.rb +53 -11
  8. data/app/openbel/api/helpers/{evidence.rb → nanopub.rb} +13 -14
  9. data/app/openbel/api/middleware/auth.rb +22 -29
  10. data/app/openbel/api/resources/annotation.rb +7 -7
  11. data/app/openbel/api/resources/function.rb +12 -35
  12. data/app/openbel/api/resources/namespace.rb +13 -13
  13. data/app/openbel/api/resources/{evidence.rb → nanopub.rb} +23 -23
  14. data/app/openbel/api/resources/{evidence_transform.rb → nanopub_transform.rb} +8 -8
  15. data/app/openbel/api/resources/relationship.rb +74 -0
  16. data/app/openbel/api/routes/annotations.rb +1 -1
  17. data/app/openbel/api/routes/base.rb +11 -7
  18. data/app/openbel/api/routes/datasets.rb +74 -84
  19. data/app/openbel/api/routes/expressions.rb +86 -396
  20. data/app/openbel/api/routes/language.rb +118 -0
  21. data/app/openbel/api/routes/namespaces.rb +2 -2
  22. data/app/openbel/api/routes/{evidence.rb → nanopubs.rb} +68 -69
  23. data/app/openbel/api/routes/root.rb +2 -2
  24. data/app/openbel/api/routes/version.rb +37 -23
  25. data/app/openbel/api/schemas/annotation_resource.schema.json +1 -1
  26. data/app/openbel/api/schemas/{evidence.schema.json → nanopub.schema.json} +10 -10
  27. data/app/openbel/api/schemas/{evidence_collection.schema.json → nanopub_collection.schema.json} +5 -5
  28. data/app/openbel/api/schemas/{evidence_resource.schema.json → nanopub_resource.schema.json} +4 -4
  29. data/config/config.yml +15 -5
  30. data/lib/openbel/api/helpers/uuid_generator.rb +22 -0
  31. data/lib/openbel/api/{evidence → nanopub}/api.rb +9 -9
  32. data/lib/openbel/api/{evidence → nanopub}/facet_api.rb +2 -2
  33. data/lib/openbel/api/{evidence → nanopub}/facet_filter.rb +6 -6
  34. data/lib/openbel/api/{evidence → nanopub}/mongo.rb +54 -52
  35. data/lib/openbel/api/{evidence → nanopub}/mongo_facet.rb +17 -28
  36. data/lib/openbel/api/plugin/{evidence/evidence.rb → nanopub/nanopub.rb} +7 -7
  37. metadata +44 -56
  38. data/app/openbel/api/routes/functions.rb +0 -41
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-04/schema",
3
3
  "title": "Annotation",
4
- "description": "A vocabulary of terms for describing evidence resources.",
4
+ "description": "A vocabulary of terms for describing nanopub resources.",
5
5
  "type": "object",
6
6
  "additionalProperties": false,
7
7
  "required": [
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-04/schema",
3
- "description": "DESCRIBE EVIDENCE",
3
+ "description": "DESCRIBE NANOPUB",
4
4
  "type": "object",
5
5
  "additionalProperties": false,
6
- "required": ["evidence"],
6
+ "required": ["nanopub"],
7
7
  "properties": {
8
- "evidence": {
8
+ "nanopub": {
9
9
  "type": "object",
10
10
  "additionalProperties": false,
11
11
  "required": ["bel_statement", "citation"],
@@ -92,10 +92,10 @@
92
92
  }
93
93
  }
94
94
  },
95
- "summary_text": {
95
+ "support": {
96
96
  "type": ["string", "null"],
97
- "title": "Summary Text",
98
- "description": "Abstract from source text to provide support for this evidence"
97
+ "title": "Support",
98
+ "description": "Abstract from source text to provide support for this nanopub"
99
99
  },
100
100
  "references": {
101
101
  "type": ["object", "null"],
@@ -112,7 +112,7 @@
112
112
  "keyword": {
113
113
  "type": "string",
114
114
  "title": "Keyword",
115
- "description": "Keyword that identifies this annotation resource, but only in the context of this Evidence."
115
+ "description": "Keyword that identifies this annotation resource, but only in the context of this Nanopub."
116
116
  },
117
117
  "uri": {
118
118
  "type": "string",
@@ -134,7 +134,7 @@
134
134
  "keyword": {
135
135
  "type": "string",
136
136
  "title": "Keyword",
137
- "description": "Keyword that identifies this namespace resource, but only in the context of this Evidence."
137
+ "description": "Keyword that identifies this namespace resource, but only in the context of this Nanopub."
138
138
  },
139
139
  "uri": {
140
140
  "type": "string",
@@ -150,8 +150,8 @@
150
150
  },
151
151
  "metadata": {
152
152
  "type": ["array", "null"],
153
- "title": "Evidence resource metadata",
154
- "description": "Metadata that describes the evidence resource.",
153
+ "title": "Nanopub resource metadata",
154
+ "description": "Metadata that describes the nanopub resource.",
155
155
  "items": {
156
156
  "oneOf": [
157
157
  {
@@ -1,20 +1,20 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-04/schema",
3
- "description": "DESCRIBE EVIDENCE COLLECTION",
3
+ "description": "DESCRIBE NANOPUB COLLECTION",
4
4
  "type": "object",
5
5
  "additionalProperties": false,
6
6
  "required": [
7
- "evidence_collection",
7
+ "nanopub_collection",
8
8
  "facets"
9
9
  ],
10
10
  "properties": {
11
- "evidence_collection": {
11
+ "nanopub_collection": {
12
12
  "type": "array",
13
13
  "minItems": 0,
14
14
  "title": "",
15
15
  "description": "",
16
16
  "items": {
17
- "$ref":"evidence_resource.schema.json"
17
+ "$ref":"nanopub_resource.schema.json"
18
18
  }
19
19
  },
20
20
  "facets": {
@@ -53,7 +53,7 @@
53
53
  },
54
54
  "metadata": {
55
55
  "title": "Metadata",
56
- "description": "Data about the evidence collection",
56
+ "description": "Data about the nanopub collection",
57
57
  "type": "object",
58
58
  "additionalProperties": true,
59
59
  "properties": {
@@ -1,16 +1,16 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-04/schema",
3
- "title": "Evidence Resource",
4
- "description": "A single evidence resource.",
3
+ "title": "Nanopub Resource",
4
+ "description": "A single nanopub resource.",
5
5
  "type": "object",
6
6
  "additionalProperties": false,
7
7
  "required": [
8
- "evidence"
8
+ "nanopub"
9
9
  ],
10
10
  "properties": {
11
11
  "allOf": [
12
12
  {
13
- "$ref":"evidence.schema.json"
13
+ "$ref":"nanopub.schema.json"
14
14
  },
15
15
  {
16
16
  "type": "object",
@@ -1,7 +1,17 @@
1
1
  # Configuration template for OpenBEL API
2
2
 
3
- # Storage of evidence through the Mongo database.
4
- evidence_store:
3
+ # BEL configuration.
4
+ bel:
5
+ # The BEL version supported by this OpenBEL API instance.
6
+ # Allowed values:
7
+ # 1.0
8
+ # (BEL version 1.0 specification)
9
+ # 2.0
10
+ # (BEL version 2.0 specification)
11
+ version: 2.0
12
+
13
+ # Storage of nanopubs through the Mongo database.
14
+ nanopub_store:
5
15
  mongo:
6
16
 
7
17
  # The MongoDB host to connect to. For example if MongoDB's net.bindIp
@@ -12,9 +22,9 @@ evidence_store:
12
22
  # The default MongoDB port. Configured under MongoDB's `net.port` setting.
13
23
  port: 27017
14
24
 
15
- # The name of your database. We think "openbel-evidence" should be fine,
25
+ # The name of your database. We think "openbel-nanopubs" should be fine,
16
26
  # but it's up to you.
17
- database: 'openbel-evidence'
27
+ database: 'openbel-nanopubs'
18
28
 
19
29
  # MongoDB authentication and role assignment. These settings are necessary
20
30
  # if you would like to have a MongoDB user authenticated and authorized to
@@ -23,7 +33,7 @@ evidence_store:
23
33
  #First, you will need to create a MongoDB user with the "readWrite" and
24
34
  #"dbAdmin" roles for the "database" value set above. This is to allow read,
25
35
  #write, and index creation in the OpenBEL API application.
26
- #See https://github.com/OpenBEL/openbel-api/wiki/Configuring-the-Evidence-Store#adding-the-openbel-user
36
+ #See https://github.com/OpenBEL/openbel-api/wiki/Configuring-the-Nanopub-Store#adding-the-openbel-user
27
37
  #username: 'openbel-user'
28
38
 
29
39
  #Second, you will need to set a password for the MongoDB user set above.
@@ -0,0 +1,22 @@
1
+ module OpenBEL
2
+ module Helpers
3
+ # Mixin to provide generation of String UUIDs.
4
+ #
5
+ # The {#generate_uuid} instance method is available with a
6
+ # platform-specific implementation.
7
+ module UUIDGenerator
8
+ # Define UUID implementation based on Ruby.
9
+ if RUBY_ENGINE =~ /^jruby/i
10
+ java_import 'java.util.UUID'
11
+ define_method(:generate_uuid) do
12
+ Java::JavaUtil::UUID.random_uuid.to_s
13
+ end
14
+ else
15
+ require 'uuid'
16
+ define_method(:generate_uuid) do
17
+ UUID.generate
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -1,17 +1,17 @@
1
1
  module OpenBEL
2
- module Evidence
2
+ module Nanopub
3
3
  module API
4
4
 
5
5
  # single or array
6
- def create_evidence(evidence)
6
+ def create_nanopub(nanopub)
7
7
  fail NotImplementedError, "#{__method__} is not implemented"
8
8
  end
9
9
 
10
- def find_evidence_by_id(id)
10
+ def find_nanopub_by_id(id)
11
11
  fail NotImplementedError, "#{__method__} is not implemented"
12
12
  end
13
13
 
14
- def find_evidence(filters = [], offset = 0, length = 0, facet = false)
14
+ def find_nanopub(filters = [], offset = 0, length = 0, facet = false)
15
15
  fail NotImplementedError, "#{__method__} is not implemented"
16
16
  end
17
17
 
@@ -23,23 +23,23 @@ module OpenBEL
23
23
  fail NotImplementedError, "#{__method__} is not implemented"
24
24
  end
25
25
 
26
- def count_evidence(filters = [])
26
+ def count_nanopub(filters = [])
27
27
  fail NotImplementedError, "#{__method__} is not implemented"
28
28
  end
29
29
 
30
- def update_evidence_by_id(id, evidence_update)
30
+ def update_nanopub_by_id(id, nanopub_update)
31
31
  fail NotImplementedError, "#{__method__} is not implemented"
32
32
  end
33
33
 
34
- def update_evidence_by_query(query, evidence_update)
34
+ def update_nanopub_by_query(query, nanopub_update)
35
35
  fail NotImplementedError, "#{__method__} is not implemented"
36
36
  end
37
37
 
38
- def delete_evidence_by_id(id)
38
+ def delete_nanopub_by_id(id)
39
39
  fail NotImplementedError, "#{__method__} is not implemented"
40
40
  end
41
41
 
42
- def delete_evidence_by_query(query)
42
+ def delete_nanopub_by_query(query)
43
43
  fail NotImplementedError, "#{__method__} is not implemented"
44
44
  end
45
45
  end
@@ -1,8 +1,8 @@
1
1
  module OpenBEL
2
- module Evidence
2
+ module Nanopub
3
3
  module FacetAPI
4
4
 
5
- def create_facets(evidence)
5
+ def create_facets(nanopub)
6
6
  fail NotImplementedError, "#{__method__} is not implemented"
7
7
  end
8
8
 
@@ -1,16 +1,16 @@
1
1
  require 'multi_json'
2
2
 
3
3
  module OpenBEL
4
- module Evidence
4
+ module Nanopub
5
5
  module FacetFilter
6
6
 
7
7
  EMPTY = []
8
- EVIDENCE_PARTS = [:citation, :experiment_context, :metadata]
8
+ NANOPUB_PARTS = [:citation, :experiment_context, :metadata]
9
9
 
10
- def map_evidence_facets(evidence)
11
- EVIDENCE_PARTS.reduce([]) { |facets, evidence_part|
12
- part = evidence.send(evidence_part)
13
- new_facets = self.send(:"map_#{evidence_part}_facets", part)
10
+ def map_nanopub_facets(nanopub)
11
+ NANOPUB_PARTS.reduce([]) { |facets, nanopub_part|
12
+ part = nanopub.send(nanopub_part)
13
+ new_facets = self.send(:"map_#{nanopub_part}_facets", part)
14
14
  facets.concat(new_facets)
15
15
  }
16
16
  end
@@ -1,13 +1,14 @@
1
1
  require 'bel'
2
- require 'bel/evidence_model/util'
2
+ require 'bel_parser/expression/model'
3
+ require 'bel/nanopub/util'
3
4
  require 'mongo'
4
5
  require_relative 'api'
5
6
  require_relative 'mongo_facet'
6
7
 
7
8
  module OpenBEL
8
- module Evidence
9
+ module Nanopub
9
10
 
10
- class Evidence
11
+ class Nanopub
11
12
  include API
12
13
  include Mongo
13
14
 
@@ -30,42 +31,42 @@ module OpenBEL
30
31
  @db.authenticate(username, password, nil, auth_db)
31
32
  end
32
33
 
33
- @collection = @db[:evidence]
34
- @evidence_facets = EvidenceFacets.new(options)
34
+ @collection = @db[:nanopub]
35
+ @nanopub_facets = NanopubFacets.new(options)
35
36
 
36
37
  # ensure all indexes are created and maintained
37
38
  ensure_all_indexes
38
39
  end
39
40
 
40
- def create_evidence(evidence)
41
- # insert evidence; acknowledge journal
42
- if evidence.respond_to?(:each_pair)
43
- _id = @collection.insert(evidence, :w => 1, :j => true)
41
+ def create_nanopub(nanopub)
42
+ # insert nanopub; acknowledge journal
43
+ if nanopub.respond_to?(:each_pair)
44
+ _id = @collection.insert(nanopub, :w => 1, :j => true)
44
45
 
45
- # remove evidence_facets after insert to facets
46
- remove_evidence_facets(_id)
46
+ # remove nanopub_facets after insert to facets
47
+ remove_nanopub_facets(_id)
47
48
  _id
48
- elsif evidence.respond_to?(:each)
49
- @collection.insert(evidence.to_a, :w => 1, :j => true)
49
+ elsif nanopub.respond_to?(:each)
50
+ @collection.insert(nanopub.to_a, :w => 1, :j => true)
50
51
  else
51
- raise "Evidence type #{evidence.class} cannot be inserted into Mongo."
52
+ raise "nanopub type #{nanopub.class} cannot be inserted into Mongo."
52
53
  end
53
54
  end
54
55
 
55
- def find_evidence_by_id(value)
56
+ def find_nanopub_by_id(value)
56
57
  @collection.find_one(to_id(value))
57
58
  end
58
59
 
59
- def find_evidence(filters = [], offset = 0, length = 0, facet = false, facet_value_limit = -1)
60
+ def find_nanopub(filters = [], offset = 0, length = 0, facet = false, facet_value_limit = -1)
60
61
  if includes_fts_search?(filters)
61
62
  text_search = get_fts_search(filters)
62
- evidence_aggregate(text_search, filters, offset, length, facet, facet_value_limit)
63
+ nanopub_aggregate(text_search, filters, offset, length, facet, facet_value_limit)
63
64
  else
64
- evidence_query(filters, offset, length, facet, facet_value_limit)
65
+ nanopub_query(filters, offset, length, facet, facet_value_limit)
65
66
  end
66
67
  end
67
68
 
68
- def find_dataset_evidence(dataset, filters = [], offset = 0, length = 0, facet = false, facet_value_limit = -1)
69
+ def find_dataset_nanopub(dataset, filters = [], offset = 0, length = 0, facet = false, facet_value_limit = -1)
69
70
  query_hash = to_query(filters)
70
71
  query_hash[:$and] ||= []
71
72
  query_hash[:$and].unshift({
@@ -85,7 +86,7 @@ module OpenBEL
85
86
  :cursor => @collection.find(query_hash, query_opts)
86
87
  }
87
88
  if facet
88
- facets_cursor = @evidence_facets.find_facets(query_hash, filters, facet_value_limit)
89
+ facets_cursor = @nanopub_facets.find_facets(query_hash, filters, facet_value_limit)
89
90
  results[:facets] = facets_cursor.to_a
90
91
  end
91
92
 
@@ -103,7 +104,7 @@ module OpenBEL
103
104
  {
104
105
  :$unwind => "$references.namespaces"
105
106
  },
106
- {
107
+ {
107
108
  :$project => {
108
109
  keyword: "$references.namespaces.keyword",
109
110
  uri: "$references.namespaces.uri"
@@ -137,7 +138,7 @@ module OpenBEL
137
138
  obj = obj.to_h
138
139
  obj[:keyword] = obj.delete("keyword")
139
140
  obj[:uri] = obj.delete("uri")
140
- union, new_remap = BEL::Model.union_namespace_references(union, [obj], 'incr')
141
+ union, new_remap = BEL::Nanopub.union_namespace_references(union, [obj], 'incr')
141
142
  remap.merge!(new_remap)
142
143
  end
143
144
 
@@ -153,7 +154,7 @@ module OpenBEL
153
154
  {
154
155
  :$unwind => "$references.annotations"
155
156
  },
156
- {
157
+ {
157
158
  :$project => {
158
159
  keyword: "$references.annotations.keyword",
159
160
  type: "$references.annotations.type",
@@ -192,38 +193,39 @@ module OpenBEL
192
193
  union = []
193
194
  remap = {}
194
195
  references.each do |obj|
195
- obj = obj.to_h
196
- obj[:keyword] = obj.delete("keyword")
197
- obj[:type] = obj.delete("type")
198
- obj[:domain] = obj.delete("domain")
199
- union, new_remap = BEL::Model.union_annotation_references(union, [obj], 'incr')
196
+ annotation =
197
+ BELParser::Expression::Model::Annotation.new(
198
+ *obj.values_at('keyword', 'type', 'domain')
199
+ )
200
+ union, new_remap =
201
+ BEL::Nanopub.union_annotation_references(union, [annotation], 'incr')
200
202
  remap.merge!(new_remap)
201
203
  end
202
204
 
203
205
  remap
204
206
  end
205
207
 
206
- def count_evidence(filters = [])
208
+ def count_nanopub(filters = [])
207
209
  query_hash = to_query(filters)
208
210
  @collection.count(:query => query_hash)
209
211
  end
210
212
 
211
- def update_evidence_by_id(value, evidence)
213
+ def update_nanopub_by_id(value, nanopub)
212
214
  # add ObjectId to update
213
215
  _id = BSON::ObjectId(value)
214
- evidence_h = evidence.to_h
215
- evidence_h[:_id] = _id
216
+ nanopub_h = nanopub.to_h
217
+ nanopub_h[:_id] = _id
216
218
 
217
- # save evidence; acknowledge journal
218
- @collection.save(evidence_h, :j => true)
219
+ # save nanopub; acknowledge journal
220
+ @collection.save(nanopub_h, :j => true)
219
221
 
220
- # remove evidence_facets after update to facets
221
- remove_evidence_facets(_id)
222
+ # remove nanopub_facets after update to facets
223
+ remove_nanopub_facets(_id)
222
224
  nil
223
225
  end
224
226
 
225
227
  def delete_facets
226
- @evidence_facets.delete_all_facets
228
+ @nanopub_facets.delete_all_facets
227
229
  end
228
230
 
229
231
  def delete_dataset(identifier)
@@ -231,27 +233,27 @@ module OpenBEL
231
233
  { :"_dataset" => identifier },
232
234
  :j => true
233
235
  )
234
- @evidence_facets.delete_all_facets
236
+ @nanopub_facets.delete_all_facets
235
237
  end
236
238
 
237
- def delete_evidence(value)
239
+ def delete_nanopub(value)
238
240
  if value.respond_to?(:each)
239
241
  value.each do |v|
240
- delete_evidence_by_id(v)
242
+ delete_nanopub_by_id(v)
241
243
  end
242
244
  else
243
- delete_evidence_by_id(value)
245
+ delete_nanopub_by_id(value)
244
246
  end
245
247
  end
246
248
 
247
- def delete_evidence_by_query(query)
249
+ def delete_nanopub_by_query(query)
248
250
  @collection.remove(
249
251
  query,
250
252
  :j => true
251
253
  )
252
254
  end
253
255
 
254
- def delete_evidence_by_id(value)
256
+ def delete_nanopub_by_id(value)
255
257
  # convert to ObjectId
256
258
  begin
257
259
  _id = to_id(value)
@@ -260,10 +262,10 @@ module OpenBEL
260
262
  false
261
263
  end
262
264
 
263
- # remove evidence_facets before evidence removal
264
- remove_evidence_facets(_id)
265
+ # remove nanopub_facets before nanopub removal
266
+ remove_nanopub_facets(_id)
265
267
 
266
- # remove evidence; returns true
268
+ # remove nanopub; returns true
267
269
  @collection.remove(
268
270
  {
269
271
  :_id => _id
@@ -297,7 +299,7 @@ module OpenBEL
297
299
 
298
300
  private
299
301
 
300
- def evidence_query(filters = [], offset = 0, length = 0, facet = false, facet_value_limit = -1)
302
+ def nanopub_query(filters = [], offset = 0, length = 0, facet = false, facet_value_limit = -1)
301
303
  query_hash = to_query(filters)
302
304
  query_opts = query_options(
303
305
  query_hash,
@@ -312,14 +314,14 @@ module OpenBEL
312
314
  :cursor => @collection.find(query_hash, query_opts)
313
315
  }
314
316
  if facet
315
- facets_cursor = @evidence_facets.find_facets(query_hash, filters, facet_value_limit)
317
+ facets_cursor = @nanopub_facets.find_facets(query_hash, filters, facet_value_limit)
316
318
  results[:facets] = facets_cursor.to_a
317
319
  end
318
320
 
319
321
  results
320
322
  end
321
323
 
322
- def evidence_aggregate(text_search, filters = [], offset = 0, length = 0, facet = false, facet_value_limit = -1)
324
+ def nanopub_aggregate(text_search, filters = [], offset = 0, length = 0, facet = false, facet_value_limit = -1)
323
325
  match_filters = filters.select { |filter|
324
326
  filter['category'] != 'fts'
325
327
  }
@@ -376,7 +378,7 @@ module OpenBEL
376
378
  facets =
377
379
  if facet
378
380
  query_hash = to_query(filters)
379
- facets_cursor = @evidence_facets.find_facets(query_hash, filters, facet_value_limit)
381
+ facets_cursor = @nanopub_facets.find_facets(query_hash, filters, facet_value_limit)
380
382
  facets_cursor.to_a
381
383
  else
382
384
  nil
@@ -498,13 +500,13 @@ module OpenBEL
498
500
  BSON::ObjectId(value.to_s)
499
501
  end
500
502
 
501
- def remove_evidence_facets(_id)
503
+ def remove_nanopub_facets(_id)
502
504
  doc = @collection.find_one(_id, {
503
505
  :fields => {:_id => 0, :facets => 1}
504
506
  })
505
507
 
506
508
  if doc && doc.has_key?('facets')
507
- @evidence_facets.delete_facets(doc['facets'])
509
+ @nanopub_facets.delete_facets(doc['facets'])
508
510
  end
509
511
  end
510
512
  end