Class: Puppet::Functions::LocalTypeAliasesBuilder
- Defined in:
- lib/puppet/functions.rb
Overview
The LocalTypeAliasBuilder is used by the ‘local_types’ method to collect the individual type aliases given by the function’s author.
Instance Attribute Summary collapse
- #loader ⇒ Object readonly
- #local_types ⇒ Object readonly
- #parser ⇒ Object readonly
Instance Method Summary collapse
-
#initialize(loader, name) ⇒ LocalTypeAliasesBuilder
constructor
A new instance of LocalTypeAliasesBuilder.
-
#type(assignment_string) ⇒ Object
Defines a local type alias, the given string should be a Puppet Language type alias expression in string form without the leading ‘type’ keyword.
Constructor Details
#initialize(loader, name) ⇒ LocalTypeAliasesBuilder
Returns a new instance of LocalTypeAliasesBuilder.
609 610 611 612 613 614 |
# File 'lib/puppet/functions.rb', line 609 def initialize(loader, name) @loader = Puppet::Pops::Loader::PredefinedLoader.new(loader, :"local_function_#{name}", loader.environment) @local_types = [] # get the shared parser used by puppet's compiler @parser = Puppet::Pops::Parser::EvaluatingParser.singleton() end |
Instance Attribute Details
#loader ⇒ Object (readonly)
607 608 609 |
# File 'lib/puppet/functions.rb', line 607 def loader @loader end |
#local_types ⇒ Object (readonly)
607 608 609 |
# File 'lib/puppet/functions.rb', line 607 def local_types @local_types end |
#parser ⇒ Object (readonly)
607 608 609 |
# File 'lib/puppet/functions.rb', line 607 def parser @parser end |
Instance Method Details
#type(assignment_string) ⇒ Object
Defines a local type alias, the given string should be a Puppet Language type alias expression in string form without the leading ‘type’ keyword. Calls to local_type must be made before the first parameter definition or an error will be raised.
624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 |
# File 'lib/puppet/functions.rb', line 624 def type(assignment_string) # Get location to use in case of error - this produces ruby filename and where call to 'type' occurred # but strips off the rest of the internal "where" as it is not meaningful to user. # rb_location = caller(1, 1).first begin result = parser.parse_string("type #{assignment_string}", nil) rescue StandardError => e rb_location = rb_location.gsub(/:in.*$/, '') # Create a meaningful location for parse errors - show both what went wrong with the parsing # and in which ruby file it was found. raise ArgumentError, _("Parsing of 'type \"%{assignment_string}\"' failed with message: <%{message}>.\n" \ "Called from <%{ruby_file_location}>") % { assignment_string: assignment_string, message: e., ruby_file_location: rb_location } end unless result.body.is_a?(Puppet::Pops::Model::TypeAlias) rb_location = rb_location.gsub(/:in.*$/, '') raise ArgumentError, _("Expected a type alias assignment on the form 'AliasType = T', got '%{assignment_string}'.\n" \ "Called from <%{ruby_file_location}>") % { assignment_string: assignment_string, ruby_file_location: rb_location } end @local_types << result.body end |