bel_parser 1.0.0.alpha.26 → 1.0.0.alpha.27

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: df1f9b77e3d50d1fbc4f3e1d7ec078ac080ad8ff
4
- data.tar.gz: 19f2384635d650ddab69298083097c4b50cb180d
3
+ metadata.gz: 14fda40968c24d90cd1cfa3ea7d07709f6319ab0
4
+ data.tar.gz: 1285d3eb7fbfdf1ba027557002531d60581bcd1d
5
5
  SHA512:
6
- metadata.gz: 3d8f1151e39925b828ea0da44ebd3a295c6efd260f4e16ce81505035ea9dc7ebdebd6093d2f8d79089dc74579a32288bd466361492612a53ee64bbf5de84db8a
7
- data.tar.gz: b31046eaee38798816cdccdff33b429ac35a9e9b1257830679c9826959993ed948a3aa15fb4b2bbcded6ea8ac1e5988146e530d4892d88e8da614acf2367239a
6
+ metadata.gz: c8050d7c6c61eb227b44818518716df1ba9189d848650b7a37f5f8a8eb26b664f0dbec0b6ad3448006d73c031897e4effca36e8ca2f4b28f43a9776aac04ba3f
7
+ data.tar.gz: bc3a9ba66774a2dedc2ccb1fad3a3e3abce361444587cc16d404aded69a2fba4bf46ee56707844748a16b5e1f11b4c21a9883f7363275c3f4a447269a665f43d
data/.gemspec CHANGED
@@ -11,7 +11,7 @@ Gem::Specification.new do |spec|
11
11
  'Anthony Bargnesi',
12
12
  'Nick Bargnesi',
13
13
  ]
14
- spec.date = %q{2016-05-09}
14
+ spec.date = %q{2016-05-11}
15
15
  spec.email = %q{abargnesi@selventa.com}
16
16
  spec.files = [
17
17
  Dir.glob('lib/**/*.{rb,rl}'),
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.0.alpha.26
1
+ 1.0.0.alpha.27
@@ -0,0 +1,31 @@
1
+ require_relative '../ast_filter'
2
+
3
+ module BELParser
4
+ module Expression
5
+ # Filter will enumerate {BELParser::Parsers::AST::Node AST nodes} that make
6
+ # up BEL expressions. It selects the relevant nodes
7
+ # from an {BELParser::Parsers::AST::Node AST node} enumerator.
8
+ class Filter
9
+ # Represents BEL expression node types.
10
+ TYPES = [
11
+ :simple_statement,
12
+ :observed_term,
13
+ :nested_statement,
14
+ :term,
15
+ :parameter
16
+ ]
17
+
18
+ def initialize(ast_enum)
19
+ @ast_filter = BELParser::ASTFilter.new(ast_enum, *TYPES)
20
+ end
21
+
22
+ def each(&block)
23
+ if block_given?
24
+ @ast_filter.each(&block)
25
+ else
26
+ enum_for(:each)
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -1,34 +1,61 @@
1
- require_relative '../ast_filter'
2
1
  require_relative '../ast_generator'
3
2
  require_relative '../parsers/common'
4
3
  require_relative '../parsers/expression'
5
- require_relative '../mixin/line_mapping'
6
4
 
7
5
  module BELParser
8
6
  module Expression
9
7
  # Parser for BEL Expression.
10
8
  class Parser
11
- include BELParser::Parsers::Common
12
- include BELParser::Parsers::Expression
9
+ def parse(input, &block)
10
+ case input
11
+ when String
12
+ parse_string(input, &block)
13
+ when Array
14
+ parse_array(input, &block)
15
+ when IO, StringIO
16
+ parse_io(input, &block)
17
+ else
18
+ raise ArgumentError,
19
+ %(expected "input" to be one of String, Array, IO: #{input.class})
20
+ end
21
+ end
22
+
23
+ protected
13
24
 
14
- TYPES = [
15
- :parameter,
16
- :term,
17
- :simple_statement,
18
- :observed_term,
19
- :nested_statement
20
- ]
25
+ def parse_string(string)
26
+ filter = Filter.new(
27
+ BELParser::ASTGenerator.new(StringIO.new(string)))
28
+ num, line, results = filter.each.first
29
+ if block_given?
30
+ yield results
31
+ nil
32
+ else
33
+ results
34
+ end
35
+ end
36
+
37
+ def parse_array(array)
38
+ if block_given?
39
+ array.each do |expression|
40
+ yield parse_string(expression.to_s)
41
+ end
42
+ nil
43
+ else
44
+ array.map do |expression|
45
+ parse_string(expression.to_s)
46
+ end
47
+ end
48
+ end
21
49
 
22
- def each(io)
50
+ def parse_io(io)
23
51
  if block_given?
24
- filter = BELParser::ASTFilter.new(
25
- BELParser::ASTGenerator.new(io),
26
- *TYPES)
27
- filter.each do |results|
52
+ filter = Filter.new(BELParser::ASTGenerator.new(io))
53
+ filter.each do |(num, line, results)|
28
54
  yield results
29
55
  end
56
+ nil
30
57
  else
31
- enum_for(:each, io)
58
+ enum_for(:parse_io, io)
32
59
  end
33
60
  end
34
61
  end
@@ -0,0 +1,3 @@
1
+ require_relative 'expression/filter'
2
+ require_relative 'expression/parser'
3
+ require_relative 'expression/validator'
@@ -1,6 +1,6 @@
1
1
  require 'base64'
2
2
  require 'digest'
3
- require 'gdbm'
3
+ require 'dbm'
4
4
  require 'net/http'
5
5
  require 'tempfile'
6
6
  require 'uri'
@@ -12,26 +12,34 @@ module BELParser
12
12
  module Resource
13
13
  # ResourceURLReader retrieves {Dataset datasets} and {Value values} from
14
14
  # Annotation (i.e. belanno extension) and Namespace (i.e. belns extension)
15
- # files. Value and encoding are stored in GDBM database files to reduce the
15
+ # files. Value and encoding are stored in DBM database files to reduce the
16
16
  # runtime memory usage (22 resources loaded, totaling 100MB memory usage).
17
17
  #
18
18
  # Only supports resource identifiers with an HTTP or HTTPS scheme.
19
19
  class ResourceURLReader
20
20
  include Reader
21
21
 
22
- # Class ivars for tracking open {GDBM} databases.
22
+ # Class ivars for tracking open {DBM} databases.
23
23
  @dataset_file = nil
24
24
  @resource_files = {}
25
25
 
26
26
  DEFAULT_RESOURCE_VALUE_DELIMITER = '|'
27
27
  private_constant :DEFAULT_RESOURCE_VALUE_DELIMITER
28
28
 
29
+ # Initializes a {ResourceURLReader}.
30
+ #
31
+ # @param [Boolean] reuse_database_files specify +true+ to reuse database
32
+ # files; +false+ to create new database files (default)
29
33
  def initialize(reuse_database_files = false)
30
34
  @resources = {}
31
35
  @datasets = ResourceURLReader.open_datasets_file
32
36
  @reuse = reuse_database_files
33
37
  end
34
38
 
39
+ # Retrieve the resource identified by +resource_identifier+.
40
+ #
41
+ # @param [String] resource_identifier the resource identifier
42
+ # @return [FileResource] the file resource
35
43
  def retrieve_resource(resource_identifier)
36
44
  read_resource(resource_identifier)[:dataset]
37
45
  end
@@ -134,11 +142,11 @@ module BELParser
134
142
  end
135
143
 
136
144
  def self.open_datasets_file
137
- @dataset_file ||= ::GDBM.new(_temporary_datasets_file)
145
+ @dataset_file ||= ::DBM.open(_temporary_datasets_file)
138
146
  end
139
147
 
140
148
  def self.open_resource_file(url)
141
- @resource_files[url] ||= ::GDBM.new(_temporary_resource_file(url))
149
+ @resource_files[url] ||= ::DBM.open(_temporary_resource_file(url))
142
150
  end
143
151
 
144
152
  def self._temporary_datasets_file
data/lib/bel_parser.rb CHANGED
@@ -16,5 +16,8 @@ require 'bel_parser/ast_filter'
16
16
  # Language; version-independent classes
17
17
  require 'bel_parser/language'
18
18
 
19
+ # BEL expression support
20
+ require 'bel_parser/expression'
21
+
19
22
  # BEL Script support
20
23
  require 'bel_parser/script'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bel_parser
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.alpha.26
4
+ version: 1.0.0.alpha.27
5
5
  platform: ruby
6
6
  authors:
7
7
  - Anthony Bargnesi
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2016-05-09 00:00:00.000000000 Z
12
+ date: 2016-05-11 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: Implements language versions 1.0 and 2.0.
15
15
  email: abargnesi@selventa.com
@@ -37,6 +37,8 @@ files:
37
37
  - lib/bel_parser.rb
38
38
  - lib/bel_parser/ast_filter.rb
39
39
  - lib/bel_parser/ast_generator.rb
40
+ - lib/bel_parser/expression.rb
41
+ - lib/bel_parser/expression/filter.rb
40
42
  - lib/bel_parser/expression/parser.rb
41
43
  - lib/bel_parser/expression/validator.rb
42
44
  - lib/bel_parser/language.rb