bel 0.3.0.beta1-x86-mingw32

Sign up to get free protection for your applications and to get access to all the features.
data/lib/features.rb ADDED
@@ -0,0 +1,21 @@
1
+ # vim: ts=2 sw=2:
2
+ module BEL
3
+ module Features
4
+
5
+ # check for rdf support
6
+ begin
7
+ require 'rdf'
8
+ require 'addressable/uri'
9
+ require 'uuid'
10
+ @@rdf_support = true
11
+ rescue LoadError => e
12
+ # exceptional condition; missing non-optional or downstream deps
13
+ @@rdf_support = false
14
+ raise unless e.message =~ /rdf/ or e.message =~ /addressable/
15
+ end
16
+
17
+ def self.rdf_support?
18
+ @@rdf_support
19
+ end
20
+ end
21
+ end
data/lib/libbel.rb ADDED
@@ -0,0 +1,201 @@
1
+ module LibBEL
2
+
3
+ class << self
4
+
5
+ def rubinius?
6
+ defined?(RUBY_ENGINE) && ("rbx" == RUBY_ENGINE)
7
+ end
8
+
9
+ # @api_private
10
+ # Determine FFI constant for this ruby engine.
11
+ def find_ffi
12
+ if rubinius?
13
+ # Use ffi gem instead of rubinius-bundled FFI
14
+ # Rubinius 2.5.2 does not seem to support FFI::ManagedStruct
15
+ require "ffi"
16
+ ::FFI
17
+ else # mri, jruby, etc
18
+ require "ffi"
19
+ ::FFI
20
+ end
21
+ end
22
+
23
+ # @api_private
24
+ # Extend with the correct ffi implementation.
25
+ def load_ffi
26
+ ffi_module = LibBEL::find_ffi
27
+ extend ffi_module::Library
28
+ ffi_module
29
+ end
30
+
31
+ # @api_private
32
+ # Loads the libkyotocabinet shared library.
33
+ def load_libBEL
34
+ ffi_module = find_ffi
35
+ extend ffi_module::Library
36
+
37
+ # libbel.so: Linux and MinGW
38
+ # libbel.bundle: Mac OSX
39
+ messages = []
40
+ library_loaded = ['libbel.so', 'libbel.bundle'].map { |library_file|
41
+ File.join(
42
+ File.expand_path(File.dirname(__FILE__)),
43
+ library_file
44
+ )
45
+ }.any? do |library_path|
46
+ begin
47
+ ffi_lib library_path
48
+ true
49
+ rescue LoadError => exception
50
+ messages << exception.to_s
51
+ false
52
+ end
53
+ end
54
+
55
+ if !library_loaded
56
+ msg = messages.map { |msg| " #{msg}" }.join("\n")
57
+ fail LoadError.new("Failed to load libbel library. Details:\n#{msg}")
58
+ end
59
+ end
60
+ end
61
+
62
+ # Constant holding the FFI module for this ruby engine.
63
+ FFI = LibBEL::load_ffi
64
+ LibBEL::load_libBEL
65
+
66
+ # typedef enum bel_token_type
67
+ enum :bel_token_type, [
68
+ :IDENT, 0,
69
+ :STRING,
70
+ :O_PAREN,
71
+ :C_PAREN,
72
+ :COLON,
73
+ :COMMA,
74
+ :SPACES
75
+ ]
76
+
77
+ class BelToken < FFI::Struct
78
+
79
+ layout :type, :bel_token_type,
80
+ :pos_start, :int,
81
+ :pos_end, :int,
82
+ :value, :pointer
83
+
84
+ def type
85
+ self[:type]
86
+ end
87
+
88
+ def pos_start
89
+ self[:pos_start]
90
+ end
91
+
92
+ def pos_end
93
+ self[:pos_end]
94
+ end
95
+
96
+ def value
97
+ self[:value].read_string
98
+ end
99
+
100
+ def hash
101
+ [self.type, self.value, self.pos_start, self.pos_end].hash
102
+ end
103
+
104
+ def ==(other)
105
+ return false if other == nil
106
+ self.type == other.type && self.value == other.value &&
107
+ self.pos_start == other.pos_start && self.pos_end == other.pos_end
108
+ end
109
+
110
+ alias_method :eql?, :'=='
111
+ end
112
+
113
+ class BelTokenList < FFI::ManagedStruct
114
+ include Enumerable
115
+
116
+ layout :length, :int,
117
+ :tokens, BelToken.ptr
118
+
119
+ def each
120
+ if block_given?
121
+ iterator = LibBEL::bel_new_token_iterator(self.pointer)
122
+ while LibBEL::bel_token_iterator_end(iterator).zero?
123
+ current_token = LibBEL::bel_token_iterator_get(iterator)
124
+ yield LibBEL::BelToken.new(current_token)
125
+ LibBEL::bel_token_iterator_next(iterator)
126
+ end
127
+ LibBEL::free_bel_token_iterator(iterator)
128
+ else
129
+ enum_for(:each)
130
+ end
131
+ end
132
+
133
+ def token_at(position)
134
+ self.each_with_index { |tk, index|
135
+ if (tk.pos_start..tk.pos_end).include? position
136
+ return [tk, index]
137
+ end
138
+ }
139
+ nil
140
+ end
141
+
142
+ def self.release(ptr)
143
+ LibBEL::free_bel_token_list(ptr)
144
+ end
145
+ end
146
+
147
+ class BelTokenIterator < FFI::ManagedStruct
148
+ include Enumerable
149
+
150
+ layout :index, :int,
151
+ :list, :pointer,
152
+ :current_token, :pointer
153
+
154
+ def each
155
+ if self.null? or not LibBEL::bel_token_iterator_end(self).zero?
156
+ fail StopIteration, "bel_token_iterator reached end"
157
+ end
158
+
159
+ if block_given?
160
+ while LibBEL::bel_token_iterator_end(self.pointer).zero?
161
+ current_token = LibBEL::bel_token_iterator_get(self.pointer)
162
+ yield LibBEL::BelToken.new(current_token)
163
+ LibBEL::bel_token_iterator_next(self.pointer)
164
+ end
165
+ else
166
+ enum_for(:each)
167
+ end
168
+ end
169
+
170
+ def self.release(ptr)
171
+ LibBEL::free_bel_token_iterator(ptr)
172
+ end
173
+ end
174
+
175
+ attach_function :bel_new_token, [:bel_token_type, :pointer, :pointer, :pointer], :pointer
176
+ attach_function :bel_new_token_list, [:int ], :pointer
177
+ attach_function :bel_new_token_iterator, [:pointer ], :pointer
178
+ attach_function :bel_token_iterator_get, [:pointer ], :pointer
179
+ attach_function :bel_token_iterator_next, [:pointer ], :void
180
+ attach_function :bel_token_iterator_end, [:pointer ], :int
181
+ attach_function :bel_parse_term, [:string ], :pointer
182
+ attach_function :bel_tokenize_term, [:string ], :pointer
183
+ attach_function :bel_print_token, [:pointer ], :void
184
+ attach_function :bel_print_token_list, [:pointer ], :void
185
+ attach_function :free_bel_token, [:pointer ], :void
186
+ attach_function :free_bel_token_list, [:pointer ], :void
187
+ attach_function :free_bel_token_iterator, [:pointer ], :void
188
+
189
+ def self.tokenize_term(string)
190
+ LibBEL::BelTokenList.new(self.bel_tokenize_term(string))
191
+ end
192
+
193
+ def self.print_token(token)
194
+ self.bel_print_token(token.pointer)
195
+ end
196
+
197
+ def self.print_token_list(list)
198
+ self.bel_print_token_list(list.pointer)
199
+ end
200
+ end
201
+
data/lib/libbel.so ADDED
Binary file
data/lib/util.rb ADDED
@@ -0,0 +1,125 @@
1
+ require 'digest'
2
+ require 'open-uri'
3
+ require 'pathname'
4
+ require 'tempfile'
5
+
6
+ module BEL
7
+
8
+ def self.read_all(reference)
9
+ if self.cached? reference
10
+ self.read_cached reference do |cf|
11
+ return cf.read
12
+ end
13
+ end
14
+
15
+ self.multi_open(reference) do |f|
16
+ content = f.read
17
+ self.write_cached reference, content
18
+ return content
19
+ end
20
+ end
21
+
22
+ def self.read_lines(reference)
23
+ if self.cached? reference
24
+ self.read_cached reference do |cf|
25
+ return cf.readlines
26
+ end
27
+ end
28
+
29
+ self.multi_open(reference) do |f|
30
+ content = f.read
31
+ self.write_cached reference, content
32
+ f.rewind
33
+ return f.readlines
34
+ end
35
+ end
36
+
37
+ private
38
+
39
+ def self.multi_open(reference)
40
+ if self.cached? reference
41
+ self.read_cached reference do |cf|
42
+ if block_given?
43
+ yield cf
44
+ else
45
+ return cf
46
+ end
47
+ end
48
+ return
49
+ end
50
+
51
+ if File.exists? reference
52
+ File.open(reference) do |f|
53
+ if block_given?
54
+ yield f
55
+ else
56
+ return f
57
+ end
58
+ end
59
+ elsif reference.start_with? 'file:'
60
+ File.open(URI(reference).path) do |f|
61
+ if block_given?
62
+ yield f
63
+ else
64
+ return f
65
+ end
66
+ end
67
+ else
68
+ open(reference) do |f|
69
+ if block_given?
70
+ yield f
71
+ else
72
+ return f
73
+ end
74
+ end
75
+ end
76
+ end
77
+
78
+ def self.cached?(identifier, options = {})
79
+ options = {
80
+ temp_dir: Dir::tmpdir
81
+ }.merge(options)
82
+ cached_name = cached_filename_for identifier
83
+ path = Pathname(options[:temp_dir]) + cached_name
84
+ File.exist? path
85
+ end
86
+
87
+ def self.read_cached(identifier, options = {})
88
+ options = {
89
+ temp_dir: Dir::tmpdir
90
+ }.merge(options)
91
+ cached_name = cached_filename_for identifier
92
+ path = Pathname(options[:temp_dir]) + cached_name
93
+ File.open(path, "r") do |f|
94
+ if block_given?
95
+ yield f
96
+ else
97
+ return f.read
98
+ end
99
+ end
100
+ path.to_s
101
+ end
102
+
103
+ def self.write_cached(identifier, data = '', options = {})
104
+ options = {
105
+ temp_dir: Dir::tmpdir
106
+ }.merge(options)
107
+ cached_name = cached_filename_for identifier
108
+ path = Pathname(options[:temp_dir]) + cached_name
109
+ File.open(path, "w") do |f|
110
+ if block_given?
111
+ yield f
112
+ else
113
+ f.write(data)
114
+ end
115
+ end
116
+ path.to_s
117
+ end
118
+
119
+ def self.cached_filename_for(identifier)
120
+ return nil unless identifier
121
+ "#{self.to_s}_#{Digest::SHA256.hexdigest identifier}"
122
+ end
123
+ end
124
+ # vim: ts=2 sw=2
125
+ # encoding: utf-8
metadata ADDED
@@ -0,0 +1,269 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: bel
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.0.beta1
5
+ prerelease: 6
6
+ platform: x86-mingw32
7
+ authors:
8
+ - Anthony Bargnesi
9
+ - Natalie Catlett
10
+ - Nick Bargnesi
11
+ - William Hayes
12
+ autorequire:
13
+ bindir: bin
14
+ cert_chain: []
15
+ date: 2015-03-14 00:00:00.000000000 Z
16
+ dependencies:
17
+ - !ruby/object:Gem::Dependency
18
+ name: ffi
19
+ requirement: !ruby/object:Gem::Requirement
20
+ none: false
21
+ requirements:
22
+ - - ~>
23
+ - !ruby/object:Gem::Version
24
+ version: '1.9'
25
+ type: :runtime
26
+ prerelease: false
27
+ version_requirements: !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ~>
31
+ - !ruby/object:Gem::Version
32
+ version: '1.9'
33
+ - !ruby/object:Gem::Dependency
34
+ name: uuid
35
+ requirement: !ruby/object:Gem::Requirement
36
+ none: false
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '2.3'
41
+ type: :development
42
+ prerelease: false
43
+ version_requirements: !ruby/object:Gem::Requirement
44
+ none: false
45
+ requirements:
46
+ - - ~>
47
+ - !ruby/object:Gem::Version
48
+ version: '2.3'
49
+ - !ruby/object:Gem::Dependency
50
+ name: addressable
51
+ requirement: !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ~>
55
+ - !ruby/object:Gem::Version
56
+ version: '2.3'
57
+ type: :development
58
+ prerelease: false
59
+ version_requirements: !ruby/object:Gem::Requirement
60
+ none: false
61
+ requirements:
62
+ - - ~>
63
+ - !ruby/object:Gem::Version
64
+ version: '2.3'
65
+ - !ruby/object:Gem::Dependency
66
+ name: rdf
67
+ requirement: !ruby/object:Gem::Requirement
68
+ none: false
69
+ requirements:
70
+ - - ~>
71
+ - !ruby/object:Gem::Version
72
+ version: '1.1'
73
+ type: :development
74
+ prerelease: false
75
+ version_requirements: !ruby/object:Gem::Requirement
76
+ none: false
77
+ requirements:
78
+ - - ~>
79
+ - !ruby/object:Gem::Version
80
+ version: '1.1'
81
+ - !ruby/object:Gem::Dependency
82
+ name: bundler
83
+ requirement: !ruby/object:Gem::Requirement
84
+ none: false
85
+ requirements:
86
+ - - ~>
87
+ - !ruby/object:Gem::Version
88
+ version: '1.7'
89
+ type: :development
90
+ prerelease: false
91
+ version_requirements: !ruby/object:Gem::Requirement
92
+ none: false
93
+ requirements:
94
+ - - ~>
95
+ - !ruby/object:Gem::Version
96
+ version: '1.7'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rake
99
+ requirement: !ruby/object:Gem::Requirement
100
+ none: false
101
+ requirements:
102
+ - - ~>
103
+ - !ruby/object:Gem::Version
104
+ version: '10.4'
105
+ type: :development
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ none: false
109
+ requirements:
110
+ - - ~>
111
+ - !ruby/object:Gem::Version
112
+ version: '10.4'
113
+ - !ruby/object:Gem::Dependency
114
+ name: rake-compiler
115
+ requirement: !ruby/object:Gem::Requirement
116
+ none: false
117
+ requirements:
118
+ - - ~>
119
+ - !ruby/object:Gem::Version
120
+ version: '0.9'
121
+ type: :development
122
+ prerelease: false
123
+ version_requirements: !ruby/object:Gem::Requirement
124
+ none: false
125
+ requirements:
126
+ - - ~>
127
+ - !ruby/object:Gem::Version
128
+ version: '0.9'
129
+ - !ruby/object:Gem::Dependency
130
+ name: rspec
131
+ requirement: !ruby/object:Gem::Requirement
132
+ none: false
133
+ requirements:
134
+ - - ~>
135
+ - !ruby/object:Gem::Version
136
+ version: '3.2'
137
+ type: :development
138
+ prerelease: false
139
+ version_requirements: !ruby/object:Gem::Requirement
140
+ none: false
141
+ requirements:
142
+ - - ~>
143
+ - !ruby/object:Gem::Version
144
+ version: '3.2'
145
+ - !ruby/object:Gem::Dependency
146
+ name: yard
147
+ requirement: !ruby/object:Gem::Requirement
148
+ none: false
149
+ requirements:
150
+ - - ~>
151
+ - !ruby/object:Gem::Version
152
+ version: '0.8'
153
+ type: :development
154
+ prerelease: false
155
+ version_requirements: !ruby/object:Gem::Requirement
156
+ none: false
157
+ requirements:
158
+ - - ~>
159
+ - !ruby/object:Gem::Version
160
+ version: '0.8'
161
+ - !ruby/object:Gem::Dependency
162
+ name: rdoc
163
+ requirement: !ruby/object:Gem::Requirement
164
+ none: false
165
+ requirements:
166
+ - - ~>
167
+ - !ruby/object:Gem::Version
168
+ version: '4.2'
169
+ type: :development
170
+ prerelease: false
171
+ version_requirements: !ruby/object:Gem::Requirement
172
+ none: false
173
+ requirements:
174
+ - - ~>
175
+ - !ruby/object:Gem::Version
176
+ version: '4.2'
177
+ description: ! ' The BEL gem allows the reading, writing, and processing of BEL (Biological
178
+ Expression Language) with a natural DSL. '
179
+ email:
180
+ - abargnesi@selventa.com
181
+ - ncatlett@selventa.com
182
+ - nbargnesi@selventa.com
183
+ - whayes@selventa.com
184
+ executables:
185
+ - bel_summarize
186
+ - bel_rdfschema
187
+ - bel_upgrade_term
188
+ - bel2rdf
189
+ - bel_parse
190
+ - bel_compare
191
+ - bel_upgrade
192
+ extensions: []
193
+ extra_rdoc_files: []
194
+ files:
195
+ - lib/util.rb
196
+ - lib/libbel.rb
197
+ - lib/bel/quoting.rb
198
+ - lib/bel/rdf.rb
199
+ - lib/bel/completion.rb
200
+ - lib/bel/completion_rule.rb
201
+ - lib/bel/script.rb
202
+ - lib/bel/language.rb
203
+ - lib/bel/namespace.rb
204
+ - lib/features.rb
205
+ - lib/bel.rb
206
+ - ext/mri/bel-token.c
207
+ - ext/mri/bel-ast.c
208
+ - ext/mri/bel-tokenize-term.c
209
+ - ext/mri/libbel.c
210
+ - ext/mri/bel-parser.c
211
+ - ext/mri/bel-parse-statement.c
212
+ - ext/mri/bel-parse-term.c
213
+ - ext/mri/bel-node-stack.c
214
+ - ext/mri/bel-token.h
215
+ - ext/mri/bel-node-stack.h
216
+ - ext/mri/bel-parser.h
217
+ - ext/mri/bel-ast.h
218
+ - ext/mri/libbel.def
219
+ - bel.gemspec
220
+ - LICENSE
221
+ - INSTALL.md
222
+ - INSTALL_RUBY.md
223
+ - README.md
224
+ - bin/bel_summarize
225
+ - bin/bel_rdfschema
226
+ - bin/bel_upgrade_term
227
+ - bin/bel2rdf
228
+ - bin/bel_parse
229
+ - bin/bel_compare
230
+ - bin/bel_upgrade
231
+ - ext/mri/extconf.rb
232
+ - lib/libbel.so
233
+ homepage: https://github.com/OpenBEL/bel.rb
234
+ licenses:
235
+ - Apache-2.0
236
+ post_install_message:
237
+ rdoc_options:
238
+ - --title
239
+ - BEL Ruby Documentation
240
+ - --main
241
+ - README.md
242
+ - --line-numbers
243
+ - --exclude
244
+ - lib/bel/script.rb
245
+ - README.md
246
+ - INSTALL.md
247
+ - INSTALL_RUBY.md
248
+ - LICENSE
249
+ require_paths:
250
+ - lib
251
+ required_ruby_version: !ruby/object:Gem::Requirement
252
+ none: false
253
+ requirements:
254
+ - - ! '>='
255
+ - !ruby/object:Gem::Version
256
+ version: 1.9.2
257
+ required_rubygems_version: !ruby/object:Gem::Requirement
258
+ none: false
259
+ requirements:
260
+ - - ! '>'
261
+ - !ruby/object:Gem::Version
262
+ version: 1.3.1
263
+ requirements: []
264
+ rubyforge_project:
265
+ rubygems_version: 1.8.23.2
266
+ signing_key:
267
+ specification_version: 3
268
+ summary: Process BEL with ruby.
269
+ test_files: []