openbel-api 0.6.2-java → 1.0.0-java

Sign up to get free protection for your applications and to get access to all the features.
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