Module: Opencdd::Cddal

Defined in:
lib/opencdd/cddal.rb,
lib/opencdd/cddal/ast.rb,
lib/opencdd/cddal/lexer.rb,
lib/opencdd/cddal/parser.rb,
lib/opencdd/cddal/builder.rb,
lib/opencdd/cddal/fetcher.rb,
lib/opencdd/cddal/resolver.rb,
lib/opencdd/cddal/serializer.rb,
lib/opencdd/cddal/fetcher/net_http.rb,
lib/opencdd/cddal/generated_parser.rb,
lib/opencdd/cddal/value_serializer.rb,
lib/opencdd/cddal/fetcher/in_memory.rb

Defined Under Namespace

Modules: AST, Fetcher, ValueSerializer Classes: Builder, Error, GeneratedParser, ImportError, LexError, Lexer, ParseError, Parser, ResolutionError, Resolver, Serializer, SourceLocation, Token

Class Method Summary collapse

Class Method Details

.default_resolverObject



25
26
27
# File 'lib/opencdd/cddal.rb', line 25

def default_resolver
  @default_resolver ||= Resolver.new
end

.parse(source, database: nil, resolver: nil, fetcher: nil, source_file: nil) ⇒ Object

Parse source (a CDDAL string) into a Opencdd::Database.

Options:

database: - existing Database to merge into (default: new)
resolver: - Opencdd::Cddal::Resolver for module imports
          (default: a fresh Resolver with default fetcher)
fetcher:  - shortcut; if supplied, wraps in a new Resolver
source_file: - path/URL the source came from. Used for
          diagnostics and for resolving relative imports.


38
39
40
41
42
43
44
45
46
# File 'lib/opencdd/cddal.rb', line 38

def parse(source, database: nil, resolver: nil, fetcher: nil,
          source_file: nil)
  tokens = Lexer.new(source.to_s).tokens
  declarations = Parser.new(tokens).parse
  effective_resolver =
    resolver || (fetcher ? Resolver.new(fetcher: fetcher) : default_resolver)
  Builder.new(database, resolver: effective_resolver, source_file: source_file)
    .build(declarations)
end

.parse_file(path, database: nil, resolver: nil, fetcher: nil) ⇒ Object



48
49
50
51
52
# File 'lib/opencdd/cddal.rb', line 48

def parse_file(path, database: nil, resolver: nil, fetcher: nil)
  source = File.read(path)
  parse(source, database: database,
        resolver: resolver, fetcher: fetcher, source_file: path)
end

.serialize(database) ⇒ Object



54
55
56
# File 'lib/opencdd/cddal.rb', line 54

def serialize(database)
  Serializer.new(database).to_cddal
end

.serialize_to_file(database, path) ⇒ Object



58
59
60
61
# File 'lib/opencdd/cddal.rb', line 58

def serialize_to_file(database, path)
  File.write(path, serialize(database))
  self
end