bel 0.2.1 → 0.3.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.
- data/INSTALL.md +19 -0
- data/INSTALL_RUBY.md +107 -0
- data/README.md +319 -0
- data/bel.gemspec +67 -0
- data/bin/bel2rdf +134 -0
- data/bin/bel_compare +177 -0
- data/bin/bel_parse +60 -0
- data/bin/bel_rdfschema +72 -0
- data/bin/bel_summarize +86 -0
- data/bin/bel_upgrade +77 -55
- data/bin/bel_upgrade_term +163 -0
- data/ext/mri/bel-ast.c +221 -0
- data/ext/mri/bel-ast.h +82 -0
- data/ext/mri/bel-node-stack.c +83 -0
- data/ext/mri/bel-node-stack.h +26 -0
- data/ext/mri/bel-parse-statement.c +122296 -0
- data/ext/mri/bel-parse-term.c +117670 -0
- data/ext/mri/bel-parser.c +91 -0
- data/ext/mri/bel-parser.h +13 -0
- data/ext/mri/bel-token.c +161 -0
- data/ext/mri/bel-token.h +58 -0
- data/ext/mri/bel-tokenize-term.c +391 -0
- data/ext/mri/extconf.rb +8 -0
- data/ext/mri/libbel.c +5 -0
- data/ext/mri/libbel.def +26 -0
- data/lib/bel.rb +12 -2
- data/lib/bel/completion.rb +53 -0
- data/lib/bel/completion_rule.rb +236 -0
- data/lib/bel/language.rb +573 -97
- data/lib/bel/namespace.rb +237 -21
- data/lib/bel/quoting.rb +29 -0
- data/lib/bel/rdf.rb +314 -0
- data/lib/bel/script.rb +206365 -153577
- data/lib/features.rb +21 -0
- data/lib/libbel.rb +201 -0
- data/lib/util.rb +125 -0
- metadata +190 -43
- checksums.yaml +0 -7
- data/lib/bel/parse_objects.rb +0 -115
data/INSTALL.md
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
Install
|
2
|
+
=======
|
3
|
+
|
4
|
+
This library requires [Ruby](https://www.ruby-lang.org) (**>= 1.9.2**). See [how to install ruby](https://github.com/OpenBEL/bel.rb/blob/master/INSTALL_RUBY.md).
|
5
|
+
|
6
|
+
Install from [RubyGems.org](http://rubygems.org/gems/bel)
|
7
|
+
|
8
|
+
```bash
|
9
|
+
gem install bel
|
10
|
+
```
|
11
|
+
|
12
|
+
Build from master branch
|
13
|
+
|
14
|
+
1. Obtain source for master branch.
|
15
|
+
- `git clone git@github.com:OpenBEL/bel.rb.git`
|
16
|
+
|
17
|
+
2. Build
|
18
|
+
- `gem build bel.gemspec`
|
19
|
+
- `gem install bel-[VERSION].gem`
|
data/INSTALL_RUBY.md
ADDED
@@ -0,0 +1,107 @@
|
|
1
|
+
# Install Ruby
|
2
|
+
|
3
|
+
|
4
|
+
## Install Ruby (Windows)
|
5
|
+
|
6
|
+
1. Download [RubyInstaller](http://rubyinstaller.org/downloads).
|
7
|
+
* Versions 1.9.3 and 2.x.x are supported.
|
8
|
+
2. Install RubyInstaller version.
|
9
|
+
* Enable the _Add Ruby executables to your PATH_ option presented during installation.
|
10
|
+
3. Open a command prompt (Windows Key + R then type `cmd`).
|
11
|
+
* Confirm installation by typing `ruby -v`.
|
12
|
+
* The output should show the ruby version (e.g. `ruby 2.0.0p451 (2014-02-24) [x64-mingw32]`).
|
13
|
+
|
14
|
+
Continue with <a href="#install_bel_gem">Install the bel gem</a>.
|
15
|
+
|
16
|
+
## Install Ruby (Mac OSX)
|
17
|
+
|
18
|
+
_Option 1: Homebrew_
|
19
|
+
|
20
|
+
1. Install with homebrew by typing `brew install ruby`.
|
21
|
+
2. Add ruby commands to your PATH.
|
22
|
+
* Add to .bash_profile.
|
23
|
+
* `echo 'export PATH="/usr/local/Cellar/ruby/VERSION/bin:$PATH"' >> .bash_profile`
|
24
|
+
* Update environment by sourcing .bash_profile.
|
25
|
+
* `source ~/.bash_profile`
|
26
|
+
3. Confirm installation by typing `ruby -v`.
|
27
|
+
|
28
|
+
_Option 2: rbenv_
|
29
|
+
|
30
|
+
* _Install with homebrew._
|
31
|
+
* `brew update`
|
32
|
+
* `brew install rbenv ruby-build`
|
33
|
+
* More details [here] (https://github.com/sstephenson/rbenv#homebrew-on-mac-os-x).
|
34
|
+
|
35
|
+
* _Install with git._
|
36
|
+
* Clone rbenv repository.
|
37
|
+
* `git clone https://github.com/sstephenson/rbenv.git ~/.rbenv`
|
38
|
+
* Add to .bash_profile.
|
39
|
+
* `echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile`
|
40
|
+
* Enable shims and autocompletion from the terminal.
|
41
|
+
* `echo 'eval "$(rbenv init -)"' >> ~/.bash_profile`
|
42
|
+
* Clone ruby-build repository.
|
43
|
+
* `git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build`
|
44
|
+
* More details [here] (https://github.com/sstephenson/rbenv#installation).
|
45
|
+
|
46
|
+
Continue with <a href="#install_bel_gem">Install the bel gem</a>.
|
47
|
+
|
48
|
+
## Install Ruby (Linux)
|
49
|
+
|
50
|
+
_Option 1: Install via package manager._
|
51
|
+
|
52
|
+
* Example installation with Ubuntu.
|
53
|
+
* Type `sudo apt-get install ruby` in the terminal.
|
54
|
+
|
55
|
+
_Option 2: rbenv_
|
56
|
+
|
57
|
+
* _Install with git._
|
58
|
+
* Clone rbenv repository.
|
59
|
+
* `git clone https://github.com/sstephenson/rbenv.git ~/.rbenv`
|
60
|
+
* Add to .bash_profile.
|
61
|
+
* `echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile`
|
62
|
+
* Enable shims and autocompletion from the terminal.
|
63
|
+
* `echo 'eval "$(rbenv init -)"' >> ~/.bash_profile`
|
64
|
+
* Clone ruby-build repository.
|
65
|
+
* `git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build`
|
66
|
+
* More details [here] (https://github.com/sstephenson/rbenv#installation).
|
67
|
+
|
68
|
+
Continue with <a href="#install_bel_gem">Install the bel gem</a>.
|
69
|
+
|
70
|
+
<br><br>
|
71
|
+
<div id="install_bel_gem"></div>
|
72
|
+
## Install the _bel_ gem
|
73
|
+
|
74
|
+
1. Open a terminal or command prompt.
|
75
|
+
2. Use the `gem` command to install the `bel` gem.
|
76
|
+
* `gem install bel`
|
77
|
+
3. You should see the following:
|
78
|
+
|
79
|
+
<pre>
|
80
|
+
Fetching: bel-0.2.1.gem (100%)
|
81
|
+
Successfully installed bel-0.2.1
|
82
|
+
Parsing documentation for bel-0.2.1
|
83
|
+
Installing ri documentation for bel-0.2.1
|
84
|
+
1 gem installed
|
85
|
+
</pre>
|
86
|
+
4. Confirm you can access the `bel_upgrade` command.
|
87
|
+
5. Continue with <a href="#upgrading_bel">Upgrading BEL</a>.
|
88
|
+
|
89
|
+
<br><br>
|
90
|
+
<div id="upgrading_bel"></div>
|
91
|
+
## Upgrading BEL
|
92
|
+
|
93
|
+
1. Type `bel_upgrade --help` for option details.
|
94
|
+
2. Run command
|
95
|
+
* Example 1 - convert a BEL file
|
96
|
+
* `bel_upgrade --bel small_corpus.bel --changelog "http://resource.belframework.org/belframework/20131211/change_log.json"
|
97
|
+
* Example 2 - convert BEL from standard in
|
98
|
+
* `curl "http://resource.belframework.org/belframework/1.0/knowledge/small_corpus.bel" | bel_upgrade --changelog "http://resource.belframework.org/belframework/20131211/change_log.json"`
|
99
|
+
* More details [here] (https://github.com/OpenBEL/bel.rb).
|
100
|
+
3. The upgraded BEL will be written to standard out. Simply redirect to a file after that.
|
101
|
+
* `bel_upgrade ... > upgraded-version.bel`
|
102
|
+
|
103
|
+
<br><br>
|
104
|
+
## Issues
|
105
|
+
|
106
|
+
* If you have questions with `bel_upgrade` or the `bel` gem please post to the [openbel-discuss] (https://groups.google.com/forum/#!forum/openbel-discuss) google group.
|
107
|
+
* If you encounter errors please post an issue to [github issues] (https://github.com/OpenBEL/bel.rb/issues).
|
data/README.md
ADDED
@@ -0,0 +1,319 @@
|
|
1
|
+
bel ruby
|
2
|
+
========
|
3
|
+
|
4
|
+
[](http://badge.fury.io/rb/bel)
|
5
|
+
|
6
|
+
The bel ruby gem allows the reading, writing, and processing of BEL (Biological Expression Language) with a natural DSL.
|
7
|
+
|
8
|
+
Learn more on [BEL](http://www.openbel.org/content/bel-lang-language).
|
9
|
+
|
10
|
+
License: [Apache License, Version 2.0](http://opensource.org/licenses/Apache-2.0)
|
11
|
+
|
12
|
+
Dependencies
|
13
|
+
|
14
|
+
- Required
|
15
|
+
|
16
|
+
- Ruby 1.9.2 or greater ([how to install ruby](INSTALL_RUBY.md))
|
17
|
+
|
18
|
+
- Optional
|
19
|
+
|
20
|
+
- *rdf gem*, *addressable gem*, and *uuid gem* for RDF conversion
|
21
|
+
- *rdf-turtle gem* for serializing to RDF turtle format
|
22
|
+
|
23
|
+
Install / Build: See [INSTALL](INSTALL.md).
|
24
|
+
|
25
|
+
branches
|
26
|
+
--------
|
27
|
+
|
28
|
+
- master branch
|
29
|
+
- [](https://travis-ci.org/OpenBEL/bel.rb)
|
30
|
+
|
31
|
+
- next branch
|
32
|
+
- [](https://travis-ci.org/OpenBEL/bel.rb)
|
33
|
+
|
34
|
+
|
35
|
+
executable commands
|
36
|
+
-------------------
|
37
|
+
|
38
|
+
**bel_upgrade**: Upgrade namespaces in BEL content to another version (i.e. *1.0* to *20131211*)
|
39
|
+
|
40
|
+
```bash
|
41
|
+
|
42
|
+
# using BEL file and change log JSON file
|
43
|
+
bel_upgrade --bel small_corpus.bel --changelog change_log.json
|
44
|
+
|
45
|
+
# using BEL file and change log from a URL
|
46
|
+
bel_upgrade --bel small_corpus.bel --changelog http://resource.belframework.org/belframework/20131211/change_log.json
|
47
|
+
|
48
|
+
# using BEL from STDIN and change log from a URL
|
49
|
+
cat small_corpus.bel | bel_upgrade --changelog http://resource.belframework.org/belframework/20131211/change_log.json
|
50
|
+
```
|
51
|
+
|
52
|
+
**bel_upgrade_term**: Upgrade BEL terms to another version (e.g. *1.0* to *20131211*)
|
53
|
+
|
54
|
+
```bash
|
55
|
+
|
56
|
+
# using BEL terms and change log JSON file
|
57
|
+
bel_upgrade_term -t "p(HGNC:A2LD1)\np(EGID:84)\n" -n "1.0" -c change_log.json
|
58
|
+
|
59
|
+
# using BEL terms and change log from a URL
|
60
|
+
bel_upgrade_term -t "p(HGNC:A2LD1)\np(EGID:84)\n" -n "1.0" -c http://resource.belframework.org/belframework/20131211/change_log.json
|
61
|
+
|
62
|
+
# using BEL from STDIN
|
63
|
+
echo -e "p(EGID:84)\np(HGNC:A2LD1)" | bel_upgrade_term -n "1.0" -c change_log.json
|
64
|
+
cat terms.bel | bel_upgrade_term -n "1.0" -c change_log.json
|
65
|
+
```
|
66
|
+
|
67
|
+
**bel_rdfschema**: Dumps the RDF Schema triples for BEL.
|
68
|
+
|
69
|
+
```bash
|
70
|
+
|
71
|
+
# dumps schema in ntriples format (default)
|
72
|
+
bel_rdfschema
|
73
|
+
|
74
|
+
# dumps schema in turtle format
|
75
|
+
# note: requires the 'rdf-turtle' gem
|
76
|
+
bel_rdfschema --format turtle
|
77
|
+
```
|
78
|
+
|
79
|
+
**bel2rdf**: Converts BEL to RDF.
|
80
|
+
|
81
|
+
```bash
|
82
|
+
|
83
|
+
# dumps RDF to standard out in ntriples format (default)
|
84
|
+
# (from file)
|
85
|
+
bel2rdf --bel small_corpus.bel
|
86
|
+
|
87
|
+
# (from standard in)
|
88
|
+
cat small_corpus.bel | bel2rdf
|
89
|
+
|
90
|
+
# dumps RDF to standard out in turtle format
|
91
|
+
# (from file)
|
92
|
+
bel2rdf --bel small_corpus.bel --format turtle
|
93
|
+
|
94
|
+
# (from standard in)
|
95
|
+
cat small_corpus.bel | bel2rdf --format turtle
|
96
|
+
```
|
97
|
+
|
98
|
+
**bel_parse**: Show parsed objects from BEL content for debugging purposes
|
99
|
+
|
100
|
+
```bash
|
101
|
+
|
102
|
+
# ...from file
|
103
|
+
bel_parse --bel small_corpus.bel
|
104
|
+
|
105
|
+
# ...from standard in
|
106
|
+
cat small_corpus.bel | bel_parse
|
107
|
+
```
|
108
|
+
|
109
|
+
api examples
|
110
|
+
------------
|
111
|
+
|
112
|
+
**Use OpenBEL namespaces from the latest release.**
|
113
|
+
|
114
|
+
```ruby
|
115
|
+
|
116
|
+
require 'bel'
|
117
|
+
|
118
|
+
# reference namespace value using standard prefixes (HGNC, MGI, RGD, etc.)
|
119
|
+
HGNC['AKT1']
|
120
|
+
=> #<BEL::Language::Parameter:0x00000004df5bc0
|
121
|
+
@enc=:GRP,
|
122
|
+
@ns_def="BEL::Namespace::HGNC",
|
123
|
+
@value=:AKT1>
|
124
|
+
```
|
125
|
+
|
126
|
+
**Load your own namespace**
|
127
|
+
|
128
|
+
```ruby
|
129
|
+
|
130
|
+
require 'bel'
|
131
|
+
|
132
|
+
# define a NamespaceDefinition with prefix symbol and url
|
133
|
+
PUBCHEM = NamespaceDefinition.new(:PUBCHEM, 'http://your-url.org/pubchem.belns')
|
134
|
+
|
135
|
+
# reference caffeine compound, sip, and enjoy
|
136
|
+
PUBCHEM['2519']
|
137
|
+
```
|
138
|
+
|
139
|
+
**Load namespaces from a published OpenBEL version**
|
140
|
+
|
141
|
+
```ruby
|
142
|
+
|
143
|
+
require 'bel'
|
144
|
+
|
145
|
+
ResourceIndex.openbel_published_index('1.0').namespaces.find { |x| x.prefix == :HGU133P2 }
|
146
|
+
ResourceIndex.openbel_published_index('20131211').namespaces.find { |x| x.prefix == :AFFX }
|
147
|
+
ResourceIndex.openbel_published_index('latest-release').namespaces.find { |x| x.prefix == :AFFX }
|
148
|
+
```
|
149
|
+
|
150
|
+
**Load namespaces from a custom resource index**
|
151
|
+
|
152
|
+
```ruby
|
153
|
+
|
154
|
+
require 'bel'
|
155
|
+
|
156
|
+
ResourceIndex.new('/home/bel/index.xml').namespaces.map(&:prefix)
|
157
|
+
=> ["AFFX", "CHEBIID", "CHEBI", "DOID", "DO", "EGID", "GOBPID", "GOBP",
|
158
|
+
"GOCCID", "GOCC", "HGNC", "MESHPP", "MESHCS", "MESHD", "MGI", "RGD",
|
159
|
+
"SCHEM", "SDIS", "SFAM", "SCOMP", "SPAC", "SP"]
|
160
|
+
```
|
161
|
+
|
162
|
+
**Validate BEL parameters**
|
163
|
+
|
164
|
+
```ruby
|
165
|
+
|
166
|
+
require 'bel'
|
167
|
+
|
168
|
+
# AKT1 contained within HGNC NamespaceDefinition
|
169
|
+
HGNC[:AKT1].valid?
|
170
|
+
=> true
|
171
|
+
|
172
|
+
# not_in_namespace is not contained with HGNC NamespaceDefinition
|
173
|
+
HGNC[:not_in_namespace].valid?
|
174
|
+
=> false
|
175
|
+
|
176
|
+
# namespace is nil so :some_value MAY exist
|
177
|
+
Parameter.new(nil, :some_value).valid?
|
178
|
+
=> true
|
179
|
+
```
|
180
|
+
|
181
|
+
**Validate BEL terms**
|
182
|
+
|
183
|
+
```ruby
|
184
|
+
|
185
|
+
require 'bel'
|
186
|
+
|
187
|
+
tscript(g(HGNC['AKT1'])).valid?
|
188
|
+
=> false
|
189
|
+
tscript(g(HGNC['AKT1'])).valid_signatures
|
190
|
+
=> []
|
191
|
+
tscript(g(HGNC['AKT1'])).invalid_signatures.map(&:to_s)
|
192
|
+
=> ["tscript(F:complex)a", "tscript(F:p)a"]
|
193
|
+
|
194
|
+
tscript(p(HGNC['AKT1'])).valid?
|
195
|
+
=> true
|
196
|
+
tscript(p(HGNC['AKT1'])).valid_signatures.map(&:to_s)
|
197
|
+
=> ["tscript(F:p)a"]
|
198
|
+
tscript(p(HGNC['AKT1'])).invalid_signatures.map(&:to_s)
|
199
|
+
=> ["tscript(F:complex)a"]
|
200
|
+
```
|
201
|
+
|
202
|
+
**Write BEL in Ruby with a DSL**
|
203
|
+
|
204
|
+
```ruby
|
205
|
+
|
206
|
+
require 'bel'
|
207
|
+
|
208
|
+
# create BEL statements
|
209
|
+
p(HGNC['SKIL']).directlyDecreases tscript(p(HGNC['SMAD3']))
|
210
|
+
bp(GO['response to hypoxia']).increases tscript(p(EGID['7157']))
|
211
|
+
```
|
212
|
+
|
213
|
+
**Parse BEL input**
|
214
|
+
|
215
|
+
```ruby
|
216
|
+
|
217
|
+
require 'bel'
|
218
|
+
|
219
|
+
# example BEL document
|
220
|
+
BEL_SCRIPT = <<-EOF
|
221
|
+
SET DOCUMENT Name = "Spec"
|
222
|
+
SET DOCUMENT Authors = User
|
223
|
+
SET Disease = "Atherosclerosis"
|
224
|
+
path(MESHD:Atherosclerosis)
|
225
|
+
path(Atherosclerosis)
|
226
|
+
bp(GO:"lipid oxidation")
|
227
|
+
p(MGI:Mapkap1) -> p(MGI:Akt1,pmod(P,S,473))
|
228
|
+
path(MESHD:Atherosclerosis) => bp(GO:"lipid oxidation")
|
229
|
+
path(MESHD:Atherosclerosis) =| (p(HGNC:MYC) -> bp(GO:"apoptotic process"))
|
230
|
+
EOF
|
231
|
+
|
232
|
+
# BEL::Script.parse returns BEL::Script::Parser
|
233
|
+
BEL::Script.parse('tscript(p(HGNC:AKT1))')
|
234
|
+
=> #<BEL::Script::Parser:0x007f179261d270>
|
235
|
+
|
236
|
+
# BEL::Script::Parser is Enumerable so we can analyze as we parse
|
237
|
+
# for example: count all function types into a hash
|
238
|
+
BEL::Script.parse('tscript(p(HGNC:AKT1))', {HGNC: HGNC}).find_all { |obj|
|
239
|
+
obj.is_a? Term
|
240
|
+
}.map { |term|
|
241
|
+
term.fx
|
242
|
+
}.reduce(Hash.new {|h,k| h[k] = 0}) { |result, function|
|
243
|
+
result[function.short_form] += 1
|
244
|
+
result
|
245
|
+
}
|
246
|
+
=> {:p=>1, :tscript=>1}
|
247
|
+
|
248
|
+
# parse; yield each parsed object to the block
|
249
|
+
namespace_mapping = {GO: GOBP, HGNC: HGNC, MGI: MGI, MESHD: MESHD}
|
250
|
+
BEL::Script.parse(BEL_SCRIPT, namespace_mapping) do |obj|
|
251
|
+
puts "#{obj.class} #{obj}"
|
252
|
+
end
|
253
|
+
=> BEL::Script::DocumentProperty: SET DOCUMENT Name = "Spec"
|
254
|
+
=> BEL::Script::DocumentProperty: SET DOCUMENT Authors = "User"
|
255
|
+
=> BEL::Script::Annotation: SET Disease = "Atherosclerosis"
|
256
|
+
=> BEL::Script::Parameter: MESHD:Atherosclerosis
|
257
|
+
=> BEL::Script::Term: path(MESHD:Atherosclerosis)
|
258
|
+
=> BEL::Script::Statement: path(MESHD:Atherosclerosis)
|
259
|
+
=> BEL::Script::Parameter: Atherosclerosis
|
260
|
+
=> BEL::Script::Term: path(Atherosclerosis)
|
261
|
+
=> BEL::Script::Statement: path(Atherosclerosis)
|
262
|
+
=> BEL::Script::Parameter: GO:"lipid oxidation"
|
263
|
+
=> BEL::Script::Term: bp(GO:"lipid oxidation")
|
264
|
+
=> BEL::Script::Statement: bp(GO:"lipid oxidation")
|
265
|
+
=> BEL::Script::Parameter: MGI:Mapkap1
|
266
|
+
=> BEL::Script::Term: p(MGI:Mapkap1)
|
267
|
+
=> BEL::Script::Parameter: MGI:Akt1
|
268
|
+
=> BEL::Script::Parameter: P
|
269
|
+
=> BEL::Script::Parameter: S
|
270
|
+
=> BEL::Script::Parameter: 473
|
271
|
+
=> BEL::Script::Term: p(MGI:Akt1,pmod(P,S,473))
|
272
|
+
=> BEL::Script::Statement: p(MGI:Mapkap1) -> p(MGI:Akt1,pmod(P,S,473))
|
273
|
+
=> BEL::Script::Parameter: MESHD:Atherosclerosis
|
274
|
+
=> BEL::Script::Term: path(MESHD:Atherosclerosis)
|
275
|
+
=> BEL::Script::Parameter: GO:"lipid oxidation"
|
276
|
+
=> BEL::Script::Term: bp(GO:"lipid oxidation")
|
277
|
+
=> BEL::Script::Statement: path(MESHD:Atherosclerosis) => bp(GO:"lipid oxidation")
|
278
|
+
=> BEL::Script::Parameter: MESHD:Atherosclerosis
|
279
|
+
=> BEL::Script::Term: path(MESHD:Atherosclerosis)
|
280
|
+
=> BEL::Script::Parameter: HGNC:MYC
|
281
|
+
=> BEL::Script::Term: p(HGNC:MYC)
|
282
|
+
=> BEL::Script::Parameter: GO:"apoptotic process"
|
283
|
+
=> BEL::Script::Term: bp(GO:"apoptotic process")
|
284
|
+
=> BEL::Script::Statement: path(MESHD:Atherosclerosis) =| (p(HGNC:MYC) -> bp(GO:"apoptotic process"))
|
285
|
+
```
|
286
|
+
|
287
|
+
**Iteratively parse BEL from file-like object**
|
288
|
+
|
289
|
+
```ruby
|
290
|
+
|
291
|
+
require 'bel'
|
292
|
+
BEL::Script.parse(File.open('/home/user/small_corpus.bel')).find_all { |obj|
|
293
|
+
obj.is_a? Statement
|
294
|
+
}.to_a.size
|
295
|
+
```
|
296
|
+
|
297
|
+
**Parse BEL and convert to RDF (requires the *rdf*, *addressable*, and *uuid* gems)**
|
298
|
+
|
299
|
+
```ruby
|
300
|
+
|
301
|
+
require 'bel'
|
302
|
+
parser = BEL::Script::Parser.new
|
303
|
+
|
304
|
+
rdf_statements = []
|
305
|
+
|
306
|
+
# parse term
|
307
|
+
parser.parse('p(HGNC:AKT1)') do |obj|
|
308
|
+
if obj.is_a? BEL::Language::Term
|
309
|
+
rdf_statements += obj.to_rdf
|
310
|
+
end
|
311
|
+
end
|
312
|
+
|
313
|
+
# parse statement
|
314
|
+
parser.parse("p(HGNC:AKT1) => tscript(g(HGNC:TNF))\n") do |obj|
|
315
|
+
if obj.is_a? BEL::Language::Statement
|
316
|
+
rdf_statements += obj.to_rdf
|
317
|
+
end
|
318
|
+
end
|
319
|
+
```
|
data/bel.gemspec
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
Gem::Specification.new do |spec|
|
2
|
+
spec.name = 'bel'
|
3
|
+
spec.version = '0.3.0.beta1'
|
4
|
+
spec.summary = '''
|
5
|
+
Process BEL with ruby.
|
6
|
+
'''.gsub(%r{^\s+}, ' ').gsub(%r{\n}, '')
|
7
|
+
spec.description = '''
|
8
|
+
The BEL gem allows the reading, writing,
|
9
|
+
and processing of BEL (Biological Expression
|
10
|
+
Language) with a natural DSL.
|
11
|
+
'''.gsub(%r{^\s+}, ' ').gsub(%r{\n}, '')
|
12
|
+
spec.license = 'Apache-2.0'
|
13
|
+
spec.authors = [
|
14
|
+
'Anthony Bargnesi',
|
15
|
+
'Natalie Catlett',
|
16
|
+
'Nick Bargnesi',
|
17
|
+
'William Hayes'
|
18
|
+
]
|
19
|
+
spec.email = [
|
20
|
+
'abargnesi@selventa.com',
|
21
|
+
'ncatlett@selventa.com',
|
22
|
+
'nbargnesi@selventa.com',
|
23
|
+
'whayes@selventa.com'
|
24
|
+
]
|
25
|
+
spec.files = [
|
26
|
+
Dir.glob("lib/**/*.rb"),
|
27
|
+
Dir.glob("ext/**/*.{c,h,def}"),
|
28
|
+
__FILE__,
|
29
|
+
'LICENSE',
|
30
|
+
'INSTALL.md',
|
31
|
+
'INSTALL_RUBY.md',
|
32
|
+
'README.md'
|
33
|
+
].flatten!
|
34
|
+
spec.executables = Dir.glob('bin/*').map(&File.method(:basename))
|
35
|
+
spec.homepage = 'https://github.com/OpenBEL/bel.rb'
|
36
|
+
spec.rdoc_options = [
|
37
|
+
'--title', 'BEL Ruby Documentation',
|
38
|
+
'--main', 'README.md',
|
39
|
+
'--line-numbers',
|
40
|
+
'--exclude', 'lib/bel/script.rb',
|
41
|
+
'README.md',
|
42
|
+
'INSTALL.md',
|
43
|
+
'INSTALL_RUBY.md',
|
44
|
+
'LICENSE'
|
45
|
+
]
|
46
|
+
|
47
|
+
spec.extensions << 'ext/mri/extconf.rb'
|
48
|
+
spec.required_ruby_version = '>= 1.9.2'
|
49
|
+
|
50
|
+
# runtime
|
51
|
+
spec.add_dependency 'ffi', '~> 1.9'
|
52
|
+
|
53
|
+
# test rdf functionality
|
54
|
+
spec.add_development_dependency 'uuid', '~> 2.3'
|
55
|
+
spec.add_development_dependency 'addressable', '~> 2.3'
|
56
|
+
spec.add_development_dependency 'rdf', '~> 1.1'
|
57
|
+
|
58
|
+
# development gems
|
59
|
+
spec.add_development_dependency 'bundler', '~> 1.7'
|
60
|
+
spec.add_development_dependency 'rake', '~> 10.4'
|
61
|
+
spec.add_development_dependency 'rake-compiler', '~> 0.9'
|
62
|
+
spec.add_development_dependency 'rspec', '~> 3.2'
|
63
|
+
spec.add_development_dependency 'yard', '~> 0.8'
|
64
|
+
spec.add_development_dependency 'rdoc', '~> 4.2'
|
65
|
+
end
|
66
|
+
# vim: ts=2 sw=2:
|
67
|
+
# encoding: utf-8
|