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 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
+ [![Gem Version](https://badge.fury.io/rb/bel.svg)](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
+ - [![Travis CI Build](https://travis-ci.org/OpenBEL/bel.rb.svg?branch=master)](https://travis-ci.org/OpenBEL/bel.rb)
30
+
31
+ - next branch
32
+ - [![Build Status for next branch](https://travis-ci.org/OpenBEL/bel.rb.svg?branch=next)](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