bel 0.3.3 → 0.4.0.beta1

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 (73) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +53 -8
  3. data/bel.gemspec +10 -15
  4. data/bin/bel +63 -4
  5. data/bin/bel2rdf.rb +1 -1
  6. data/bin/bel_compare.rb +1 -1
  7. data/bin/bel_parse.rb +1 -1
  8. data/bin/bel_rdfschema.rb +1 -1
  9. data/bin/bel_summarize.rb +1 -1
  10. data/bin/bel_upgrade.rb +1 -1
  11. data/lib/bel.rb +8 -10
  12. data/lib/bel/completion.rb +3 -2
  13. data/lib/bel/completion/value_match_rule.rb +10 -0
  14. data/lib/bel/evidence_model/citation.rb +101 -43
  15. data/lib/bel/evidence_model/evidence.rb +2 -2
  16. data/lib/bel/evidence_model/experiment_context.rb +1 -0
  17. data/lib/bel/evidence_model/metadata.rb +15 -2
  18. data/lib/bel/evidence_model/references.rb +10 -10
  19. data/lib/bel/json.rb +63 -0
  20. data/lib/bel/json/adapter/multi_json.rb +36 -0
  21. data/lib/bel/json/adapter/oj.rb +65 -0
  22. data/lib/bel/json/adapter/ruby_json.rb +28 -0
  23. data/lib/bel/json/reader.rb +9 -0
  24. data/lib/bel/json/writer.rb +9 -0
  25. data/lib/bel/libbel.rb +1 -4
  26. data/lib/bel/parser.rb +2 -2
  27. data/lib/bel/rdf_repository.rb +18 -0
  28. data/lib/bel/rdf_repository/plugins/memory.rb +28 -0
  29. data/lib/bel/rdf_repository/plugins/mongo.rb +28 -0
  30. data/lib/bel/resource.rb +24 -0
  31. data/lib/bel/resource/namespace.rb +122 -0
  32. data/lib/bel/resource/namespace_value.rb +69 -0
  33. data/lib/bel/resource/namespaces.rb +83 -0
  34. data/lib/bel/resource/search.rb +26 -0
  35. data/lib/bel/resource/search/api.rb +36 -0
  36. data/lib/bel/resource/search/search_result.rb +32 -0
  37. data/lib/bel/translate.rb +108 -0
  38. data/lib/bel/translator.rb +69 -0
  39. data/lib/bel/translator/plugins/bel_script.rb +36 -0
  40. data/lib/bel/translator/plugins/bel_script/bel_yielder.rb +144 -0
  41. data/lib/bel/translator/plugins/bel_script/evidence_yielder.rb +95 -0
  42. data/lib/bel/translator/plugins/bel_script/translator.rb +24 -0
  43. data/lib/bel/translator/plugins/jgf.rb +37 -0
  44. data/lib/bel/translator/plugins/jgf/translator.rb +160 -0
  45. data/lib/bel/translator/plugins/json_evidence.rb +38 -0
  46. data/lib/bel/translator/plugins/json_evidence/translator.rb +90 -0
  47. data/lib/bel/translator/plugins/rdf.rb +48 -0
  48. data/lib/bel/translator/plugins/rdf/bel_schema.rb +339 -0
  49. data/lib/bel/translator/plugins/rdf/monkey_patch.rb +310 -0
  50. data/lib/bel/translator/plugins/rdf/reader.rb +173 -0
  51. data/lib/bel/translator/plugins/rdf/translator.rb +40 -0
  52. data/lib/bel/translator/plugins/rdf/writer.rb +45 -0
  53. data/lib/bel/translator/plugins/xbel.rb +36 -0
  54. data/lib/bel/translator/plugins/xbel/evidence_handler.rb +468 -0
  55. data/lib/bel/translator/plugins/xbel/evidence_yielder.rb +24 -0
  56. data/lib/bel/translator/plugins/xbel/translator.rb +24 -0
  57. data/lib/bel/translator/plugins/xbel/xbel_yielder.rb +414 -0
  58. data/lib/bel/vendor/little-plugger.rb +323 -0
  59. data/lib/bel/version.rb +1 -1
  60. metadata +44 -158
  61. data/lib/bel/extension.rb +0 -37
  62. data/lib/bel/extension_format.rb +0 -207
  63. data/lib/bel/extensions/bel.rb +0 -258
  64. data/lib/bel/extensions/jgf.rb +0 -219
  65. data/lib/bel/extensions/json/jrjackson.rb +0 -31
  66. data/lib/bel/extensions/json/json.rb +0 -133
  67. data/lib/bel/extensions/json/multi_json.rb +0 -29
  68. data/lib/bel/extensions/json/oj.rb +0 -68
  69. data/lib/bel/extensions/json/ruby_json.rb +0 -29
  70. data/lib/bel/extensions/rdf/bel_rdf.rb +0 -338
  71. data/lib/bel/extensions/rdf/rdf.rb +0 -584
  72. data/lib/bel/extensions/xbel.rb +0 -923
  73. data/lib/bel/format.rb +0 -58
@@ -13,7 +13,7 @@ module BEL
13
13
  def self.create(hash)
14
14
  ev = Evidence.new
15
15
  ev.bel_statement = hash[:bel_statement] || nil
16
- ev.citation = Citation.create(hash[:citation] || {})
16
+ ev.citation = Citation.new(hash[:citation] || {})
17
17
  ev.summary_text.value = hash[:summary_text] || nil
18
18
  ev.experiment_context = ExperimentContext.new(hash[:experiment_context] || [])
19
19
  ev.references = References.new(hash[:references] || {})
@@ -77,7 +77,7 @@ module BEL
77
77
  :summary_text => @summary_text.value,
78
78
  :experiment_context => @experiment_context.values,
79
79
  :references => @references.values,
80
- :metadata => @metadata.values
80
+ :metadata => @metadata.to_a
81
81
  }
82
82
  )
83
83
  hash
@@ -3,6 +3,7 @@ require 'forwardable'
3
3
  module BEL
4
4
  module Model
5
5
  class ExperimentContext
6
+
6
7
  attr_reader :values
7
8
 
8
9
  extend Forwardable
@@ -9,10 +9,14 @@ module BEL
9
9
  extend Forwardable
10
10
  include Enumerable
11
11
 
12
- DOCUMENT_HEADER = :document_header
12
+ DOCUMENT_HEADER = :document_header
13
13
 
14
14
  def initialize(values = {})
15
- @values = values
15
+ if values.is_a? Array
16
+ @values = Hash[values.map { |item| item.values_at(:name, :value) }]
17
+ else
18
+ @values = values
19
+ end
16
20
  end
17
21
 
18
22
  def document_header
@@ -23,6 +27,15 @@ module BEL
23
27
  @values[DOCUMENT_HEADER] = document_header
24
28
  end
25
29
 
30
+ def to_a
31
+ @values.each_pair.map { |key, value|
32
+ {
33
+ name: key,
34
+ value: value
35
+ }
36
+ }
37
+ end
38
+
26
39
  def_delegators :@values, :[], :"[]=", :delete_if, :each, :each_pair,
27
40
  :fetch, :keys, :size, :sort, :store
28
41
  end
@@ -9,27 +9,27 @@ module BEL
9
9
  extend Forwardable
10
10
  include Enumerable
11
11
 
12
- ANNOTATION_DEFINITIONS = :annotation_definitions
13
- NAMESPACE_DEFINITIONS = :namespace_definitions
12
+ ANNOTATIONS = :annotations
13
+ NAMESPACES = :namespaces
14
14
 
15
15
  def initialize(values = {})
16
16
  @values = values
17
17
  end
18
18
 
19
- def annotation_definitions
20
- @values[ANNOTATION_DEFINITIONS] ||= {}
19
+ def annotations
20
+ @values[ANNOTATIONS] ||= {}
21
21
  end
22
22
 
23
- def annotation_definitions=(annotation_definitions)
24
- @values[ANNOTATION_DEFINITIONS] = annotation_definitions
23
+ def annotations=(annotations)
24
+ @values[ANNOTATIONS] = annotations
25
25
  end
26
26
 
27
- def namespace_definitions
28
- @values[NAMESPACE_DEFINITIONS] ||= {}
27
+ def namespaces
28
+ @values[NAMESPACES] ||= {}
29
29
  end
30
30
 
31
- def namespace_definitions=(namespace_definitions)
32
- @values[NAMESPACE_DEFINITIONS] = namespace_definitions
31
+ def namespaces=(namespaces)
32
+ @values[NAMESPACES] = namespaces
33
33
  end
34
34
 
35
35
  def_delegators :@values, :[], :"[]=", :delete_if, :each, :each_pair,
@@ -0,0 +1,63 @@
1
+ # TODO Document.
2
+ #
3
+ # What does this abstraction provide?
4
+ # Why is it here?
5
+ #
6
+ module BEL::JSON
7
+
8
+ # TODO Document.
9
+ #
10
+ # Reads JSON data. Leverages JSON adapters which implement the same signature.
11
+ def self.read(data, options = {})
12
+ @adapter ||= self.adapter
13
+ instance = @adapter.new
14
+
15
+ if block_given?
16
+ instance.read(data, options) { |obj|
17
+ yield obj
18
+ }
19
+ else
20
+ instance.read(data, options)
21
+ end
22
+ end
23
+
24
+ # TODO Document.
25
+ #
26
+ # Writes JSON data. Leverages JSON adapters which implement the same signature.
27
+ def self.write(data, output_io, options = {})
28
+ @adapter ||= self.adapter
29
+ instance = @adapter.new
30
+ instance.write(data, output_io, options)
31
+ end
32
+
33
+ # Load the most suitable JSON implementation available within ruby.
34
+ # The load order attempted is:
35
+ # - oj (provides stream parsing utilizing event callbacks)
36
+ # - multi_json (simple buffering abstraction over multiple ruby libraries)
37
+ # - json (stock ruby implementation)
38
+ def self.adapter
39
+ implementations = [
40
+ 'json/adapter/oj',
41
+ 'json/adapter/multi_json',
42
+ 'json/adapter/ruby_json'
43
+ ]
44
+
45
+ load_success = implementations.any? { |impl|
46
+ begin
47
+ require_relative impl
48
+ true
49
+ rescue LoadError
50
+ # Could not load +impl_module+; try the next one
51
+ false
52
+ end
53
+ }
54
+
55
+ if load_success
56
+ BEL::JSON::Implementation
57
+ else
58
+ mod_s = impl_modules.join(', ')
59
+ msg = "Could not load any JSON implementation (tried: #{mod_s})."
60
+ raise LoadError.new(msg)
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,36 @@
1
+ require 'multi_json'
2
+
3
+ require_relative '../reader'
4
+ require_relative '../writer'
5
+
6
+ module BEL::JSON
7
+
8
+ class Implementation
9
+
10
+ include Reader
11
+ include Writer
12
+
13
+ def read(data, options = {})
14
+ if block_given?
15
+ options = { :symbolize_keys => true }.merge!(options)
16
+ MultiJson.load(data, options).each do |obj|
17
+ yield obj
18
+ end
19
+ else
20
+ to_enum(:read, data, options)
21
+ end
22
+ end
23
+
24
+ def write(data, output_io, options = {})
25
+ json = MultiJson.dump(json_object)
26
+ if output_io
27
+ # write json and return IO
28
+ output_io.write json
29
+ output_io
30
+ else
31
+ # return json string
32
+ json
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,65 @@
1
+ require 'oj'
2
+
3
+ require_relative '../reader'
4
+ require_relative '../writer'
5
+
6
+ module BEL::JSON
7
+
8
+ class Implementation
9
+
10
+ include Reader
11
+ include Writer
12
+
13
+ def read(data, options = {}, &block)
14
+ if block_given?
15
+ options = { :symbol_keys => true }.merge!(options)
16
+ Oj.sc_parse(StreamHandler.new(block), data, options)
17
+ else
18
+ to_enum(:read, data, options)
19
+ end
20
+ end
21
+
22
+ def write(data, output_io, options = {})
23
+ Oj.to_stream(output_io, data)
24
+ end
25
+ end
26
+
27
+ class StreamHandler < Oj::ScHandler
28
+
29
+ def initialize(callable)
30
+ @callable = callable
31
+ end
32
+
33
+ def hash_start
34
+ {}
35
+ end
36
+
37
+ def hash_end
38
+ @callable.call @hash
39
+ end
40
+
41
+ def hash_set(hash, key, value)
42
+ hash[key] = value
43
+ @hash = hash
44
+ end
45
+
46
+ def array_start
47
+ @array = []
48
+ @array
49
+ end
50
+
51
+ def array_append(array, value)
52
+ array << value
53
+ @array = array
54
+ end
55
+
56
+ def array_end()
57
+ @callable.call @array
58
+ end
59
+
60
+ def error(message, line, column)
61
+ msg = "Parse error at line #{line}, column #{column}: #{message}"
62
+ raise Oj::ParseError.new(msg)
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,28 @@
1
+ require 'json'
2
+
3
+ require_relative '../reader'
4
+ require_relative '../writer'
5
+
6
+ module BEL::JSON
7
+
8
+ class Implementation
9
+
10
+ include Reader
11
+ include Writer
12
+
13
+ def read(data, options = {})
14
+ if block_given?
15
+ options = { :symbolize_names => true }.merge!(options)
16
+ JSON.load(data, nil, options).each do |obj|
17
+ yield obj
18
+ end
19
+ else
20
+ to_enum(:read, data, options)
21
+ end
22
+ end
23
+
24
+ def write(data, output_io, options = {})
25
+ JSON.dump(data, output_io)
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,9 @@
1
+ module BEL::JSON
2
+
3
+ module Reader
4
+
5
+ def read(input, options = {})
6
+ raise NotImplementedError.new("#{__method__} is not implemented.")
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module BEL::JSON
2
+
3
+ module Writer
4
+
5
+ def write(data, output, options = {})
6
+ raise NotImplementedError.new("#{__method__} is not implemented.")
7
+ end
8
+ end
9
+ end
@@ -12,7 +12,6 @@ module BEL
12
12
  defined?(RUBY_ENGINE) && ("rbx" == RUBY_ENGINE)
13
13
  end
14
14
 
15
- # @api_private
16
15
  # Determine FFI constant for this ruby engine.
17
16
  def find_ffi
18
17
  if rubinius?
@@ -26,7 +25,6 @@ module BEL
26
25
  end
27
26
  end
28
27
 
29
- # @api_private
30
28
  # Extend with the correct ffi implementation.
31
29
  def load_ffi
32
30
  ffi_module = BEL::LibBEL::find_ffi
@@ -34,7 +32,6 @@ module BEL
34
32
  ffi_module
35
33
  end
36
34
 
37
- # @api_private
38
35
  # Loads the libbel shared library.
39
36
  def load_libBEL
40
37
  ffi_module = find_ffi
@@ -123,7 +120,7 @@ module BEL
123
120
  attach_function :bel_tokenize_term, [:string ], :pointer
124
121
 
125
122
  # parse
126
- attach_function :bel_parse_statement, [:string ], :pointer
123
+ #attach_function :bel_parse_statement, [:string ], :pointer
127
124
  attach_function :bel_parse_term, [:string ], :pointer
128
125
 
129
126
  def self.parse_statement(bel_string)
@@ -3,12 +3,12 @@ require_relative 'libbel'
3
3
  module BEL
4
4
  module Parser
5
5
 
6
- # Parses BEL expressions to a {BelAst}.
6
+ # Parses BEL expressions to a {BEL::LibBEL::BelAst}.
7
7
  #
8
8
  # If +bel_expression+ is +nil+ then +nil+ is returned.
9
9
  #
10
10
  # @param bel_expression [responds to #to_s] the bel expression to parse
11
- # @return [BelAst]
11
+ # @return [BEL::LibBEL::BelAst]
12
12
  def self.parse(bel_expression, options = {})
13
13
  if !bel_expression
14
14
  return nil
@@ -0,0 +1,18 @@
1
+ module BEL
2
+ module RdfRepository
3
+
4
+ module Plugins; end
5
+
6
+ extend LittlePlugger(
7
+ :path => 'bel/rdf_repository/plugins',
8
+ :module => BEL::RdfRepository::Plugins
9
+ )
10
+
11
+ module ClassMethods
12
+
13
+ def create_repository(options = {})
14
+ raise NotImplementedError.new("#{__method__} is not implemented.")
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,28 @@
1
+ # Load RDF library dependencies
2
+ require 'rdf'
3
+ require 'rdf/mongo'
4
+ require 'addressable/uri'
5
+ require 'uuid'
6
+
7
+ module BEL::RdfRepository::Plugins
8
+
9
+ module Memory
10
+
11
+ extend ::BEL::RdfRepository::ClassMethods
12
+
13
+ NAME = 'In-memory RDF Repository'
14
+ DESCRIPTION = 'An in-memory repository provided by default in RDF.rb.'
15
+
16
+ def self.create_repository(options = {})
17
+ RDF::Repository.new(options)
18
+ end
19
+
20
+ def self.name
21
+ NAME
22
+ end
23
+
24
+ def self.description
25
+ DESCRIPTION
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,28 @@
1
+ # Load RDF library dependencies
2
+ require 'rdf'
3
+ require 'rdf/mongo'
4
+ require 'addressable/uri'
5
+ require 'uuid'
6
+
7
+ module BEL::RdfRepository::Plugins
8
+
9
+ module Mongo
10
+
11
+ extend ::BEL::RdfRepository::ClassMethods
12
+
13
+ NAME = 'Mongo RDF Repository'
14
+ DESCRIPTION = 'A repository of RDF data on MongoDB.'
15
+
16
+ def self.create_repository(options = {})
17
+ RDF::Mongo::Repository.new(options)
18
+ end
19
+
20
+ def self.name
21
+ NAME
22
+ end
23
+
24
+ def self.description
25
+ DESCRIPTION
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,24 @@
1
+ require 'rdf'
2
+
3
+ module BEL
4
+ module Resource
5
+
6
+ class BELV < RDF::StrictVocabulary('http://www.openbel.org/vocabulary/')
7
+ term :AnnotationConcept
8
+ term :AnnotationConceptScheme
9
+ term :NamespaceConcept
10
+ term :NamespaceConceptScheme
11
+
12
+ property :prefix
13
+ property :domain
14
+ property :species
15
+ property :inScheme
16
+ property :orthologousMatch
17
+ end
18
+ end
19
+ end
20
+
21
+ require_relative 'resource/namespaces'
22
+ require_relative 'resource/namespace'
23
+ require_relative 'resource/namespace_value'
24
+ require_relative 'resource/search'