Adapts an egrammar/eparser to respond to the public API of the classic parser and makes use of the new evaluator.
# File lib/puppet/parser/e4_parser_adapter.rb, line 26 def file=(file) @file = file @use = :file # watch if possible, but only if the file is something worth watching @file_watcher.watch_file(file) if !file.nil? && file != '' end
# File lib/puppet/parser/e4_parser_adapter.rb, line 33 def parse(string = nil) self.string= string if string if @file =~ /\.rb$/ && @use != :string # Will throw an error parse_ruby_file end parse_result = if @use == :string # Parse with a source_file to set in created AST objects (it was either given, or it may be unknown # if caller did not set a file and the present a string. # @@evaluating_parser.parse_string(@string, @file || "unknown-source-location") else @@evaluating_parser.parse_file(@file) end # the parse_result may be # * empty / nil (no input) # * a Model::Program # * a Model::Expression # model = parse_result.nil? ? nil : parse_result.current args = {} Puppet::Pops::Model::AstTransformer.new(@file).merge_location(args, model) ast_code = if model.is_a? Puppet::Pops::Model::Program Puppet::Parser::AST::PopsBridge::Program.new(model, args) else args[:value] = model Puppet::Parser::AST::PopsBridge::Expression.new(args) end # Create the "main" class for the content - this content will get merged with all other "main" content Puppet::Parser::AST::Hostclass.new('', :code => ast_code) end
# File lib/puppet/parser/e4_parser_adapter.rb, line 78 def parse_ruby_file raise Puppet::ParseError, "Ruby DSL is no longer supported. Attempt to parse #{@file}" end
# File lib/puppet/parser/e4_parser_adapter.rb, line 73 def string=(string) @string = string @use = :string end
@param file_watcher [watch_file] something that can watch a file
# File lib/puppet/parser/e4_parser_adapter.rb, line 18 def initialize(file_watcher = nil) @file_watcher = file_watcher || NullFileWatcher.new @file = '' @string = '' @use = :unspecified @@evaluating_parser ||= Puppet::Pops::Parser::EvaluatingParser.new() end