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

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.
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