Class: Puppet::Pops::Model::Factory
- Inherits:
-
Object
- Object
- Puppet::Pops::Model::Factory
show all
- Defined in:
- lib/puppet/pops/model/factory.rb
Overview
TODO:
All those uppercase methods … they look bad in one way, but stand out nicely in the grammar… decide if they should change into lower case names (some of the are lower case)…
Factory is a helper class that makes construction of a Pops Model much more convenient. It can be viewed as a small internal DSL for model constructions. For usage see tests using the factory.
Defined Under Namespace
Classes: ArgsToNonCallError
Constant Summary
collapse
- Model =
Puppet::Pops::Model
- STATEMENT_CALLS =
{
'require' => true,
'realize' => true,
'include' => true,
'contain' => true,
'tag' => true,
'debug' => true,
'info' => true,
'notice' => true,
'warning' => true,
'error' => true,
'fail' => true,
'import' => true }
- @@build_visitor =
Shared build_visitor, since there are many instances of Factory being used
Puppet::Pops::Visitor.new(self, "build")
- @@interpolation_visitor =
Puppet::Pops::Visitor.new(self, "interpolate")
Instance Attribute Summary collapse
Class Method Summary
collapse
-
.ATTR(name, type_expr = nil) ⇒ Object
-
.ATTRIBUTE_OP(name, op, expr) ⇒ Object
-
.ATTRIBUTES_OP(expr) ⇒ Object
-
.block(*args) ⇒ Object
-
.block_or_expression(*args) ⇒ Object
Builds a BlockExpression if args size > 1, else the single expression/value in args.
-
.CALL_METHOD(functor, argument_list) ⇒ Object
-
.CALL_NAMED(name, rval_required, argument_list) ⇒ Object
-
.CASE(test_e, *options) ⇒ Object
-
.COLLECT(type_expr, query_expr, attribute_operations) ⇒ Object
-
.concat(*args) ⇒ Object
-
.DEFINITION(name, parameters, body) ⇒ Object
-
.ENUM(*args) ⇒ Object
-
.EPP(parameters, body) ⇒ Object
-
.EXPORTED_QUERY(query_expr) ⇒ Object
-
.fqn(o) ⇒ Object
Creates a QualifiedName representation of o, unless o already represents a QualifiedName in which case it is returned.
-
.fqr(o) ⇒ Object
Creates a QualifiedName representation of o, unless o already represents a QualifiedName in which case it is returned.
-
.HASH(entries) ⇒ Object
-
.HEREDOC(name, expr) ⇒ Object
-
.HOSTCLASS(name, parameters, parent, body) ⇒ Object
-
.IF(test_e, then_e, else_e) ⇒ Object
-
.KEY_ENTRY(key, val) ⇒ Object
-
.LAMBDA(parameters, body) ⇒ Object
-
.LIST(entries) ⇒ Object
-
.literal(o) ⇒ Object
-
.MAP(match, value) ⇒ Object
-
.minus(o) ⇒ Object
-
.NAMED_ACCESS(type_name, bodies) ⇒ Object
-
.NODE(hosts, parent, body) ⇒ Object
-
.nop?(o) ⇒ Boolean
-
.NUMBER(name_or_numeric) ⇒ Object
-
.PARAM(name, expr = nil) ⇒ Object
-
.PROGRAM(body, definitions, locator) ⇒ Object
-
.QNAME(name) ⇒ Object
TODO: This is the same a fqn factory method, don’t know if callers to fqn and QNAME can live with the same result or not yet - refactor into one method when decided.
-
.QNAME_OR_NUMBER(name) ⇒ Object
Convert input string to either a qualified name, a LiteralInteger with radix, or a LiteralFloat.
-
.QREF(name) ⇒ Object
-
.record_position(o, start_locatable, end_locateable) ⇒ Object
-
.RENDER_EXPR(expr) ⇒ Object
-
.RENDER_STRING(o) ⇒ Object
-
.RESERVED(name) ⇒ Object
-
.RESOURCE(type_name, bodies) ⇒ Object
-
.RESOURCE_BODY(resource_title, attribute_operations) ⇒ Object
-
.RESOURCE_DEFAULTS(type_name, attribute_operations) ⇒ Object
-
.RESOURCE_OVERRIDE(resource_ref, attribute_operations) ⇒ Object
-
.resource_shape(expr) ⇒ Object
Returns symbolic information about an expected shape of a resource expression given the LHS of a resource expr.
-
.set_resource_form(expr, form) ⇒ Object
Sets the form of the resource expression (:regular (the default), :virtual, or :exported).
-
.string(*args) ⇒ Object
-
.SUBLOCATE(token, expr) ⇒ Object
-
.TEXT(expr) ⇒ Object
-
.text(o) ⇒ Object
-
.transform_calls(expressions) ⇒ Object
Transforms an array of expressions containing literal name expressions to calls if followed by an expression, or expression list.
-
.transform_resource_wo_title(left, attribute_ops) ⇒ Object
Transforms a left expression followed by an untitled resource (in the form of attribute_operations).
-
.TYPE(name, super_name = nil) ⇒ Object
-
.unfold(o) ⇒ Object
-
.UNLESS(test_e, then_e, else_e) ⇒ Object
-
.var(o) ⇒ Object
-
.VIRTUAL_QUERY(query_expr) ⇒ Object
-
.WHEN(values_list, block) ⇒ Object
Instance Method Summary
collapse
-
#%(r) ⇒ Object
-
#*(r) ⇒ Object
-
#+(r) ⇒ Object
-
#-(r) ⇒ Object
-
#/(r) ⇒ Object
-
#<(r) ⇒ Object
-
#<<(r) ⇒ Object
-
#<=(r) ⇒ Object
-
#==(r) ⇒ Object
-
#=~(r) ⇒ Object
-
#>(r) ⇒ Object
-
#>=(r) ⇒ Object
-
#>>(r) ⇒ Object
-
#[](*r) ⇒ Object
-
#and(r) ⇒ Object
-
#attributes(*args) ⇒ Object
-
#build(o, *args) ⇒ Object
-
#build_AccessExpression(o, left, *keys) ⇒ Object
-
#build_ArithmeticExpression(o, op, a, b) ⇒ Object
Building of Model classes.
-
#build_Array(o) ⇒ Object
Creates a LiteralList instruction from an Array, where the entries are built.
-
#build_AssignmentExpression(o, op, a, b) ⇒ Object
-
#build_AttributeOperation(o, name, op, value) ⇒ Object
-
#build_AttributesOperation(o, value) ⇒ Object
-
#build_BinaryExpression(o, left, right) ⇒ Object
-
#build_BlockExpression(o, *args) ⇒ Object
-
#build_CallExpression(o, functor, rval_required, *args) ⇒ Object
-
#build_CallMethodExpression(o, functor, rval_required, lambda, *args) ⇒ Object
-
#build_CaseExpression(o, test, *args) ⇒ Object
-
#build_CaseOption(o, value_list, then_expr) ⇒ Object
-
#build_Class(o, *args) ⇒ Object
Build a Class by creating an instance of it, and then calling build on the created instance with the given arguments.
-
#build_CollectExpression(o, type_expr, query_expr, attribute_operations) ⇒ Object
-
#build_ComparisonExpression(o, op, a, b) ⇒ Object
-
#build_ConcatenatedString(o, *args) ⇒ Object
-
#build_CreateAttributeExpression(o, name, datatype_expr) ⇒ Object
-
#build_CreateEnumExpression(o, *args) ⇒ Object
-
#build_CreateTypeExpression(o, name, super_name = nil) ⇒ Object
-
#build_EppExpression(o, parameters_specified, body) ⇒ Object
-
#build_Factory(o) ⇒ Object
If building a factory, simply unwrap the model oject contained in the factory.
-
#build_FalseClass(o) ⇒ Object
-
#build_Fixnum(o) ⇒ Object
-
#build_Float(o) ⇒ Object
-
#build_Hash(o) ⇒ Object
Create a LiteralHash instruction from a hash, where keys and values are built The hash entries are added in sorted order based on key.to_s.
-
#build_HeredocExpression(o, name, expr) ⇒ Object
-
#build_HostClassDefinition(o, name, parameters, parent_class_name, body) ⇒ Model::HostClassDefinition
Configured from the parameters.
-
#build_IfExpression(o, t, ift, els) ⇒ Object
-
#build_KeyedEntry(o, k, v) ⇒ Object
-
#build_LambdaExpression(o, parameters, body) ⇒ Object
-
#build_LiteralFloat(o, val) ⇒ Object
-
#build_LiteralHash(o, *keyed_entries) ⇒ Object
-
#build_LiteralInteger(o, val, radix) ⇒ Object
-
#build_LiteralList(o, *values) ⇒ Object
-
#build_MatchExpression(o, op, a, b) ⇒ Object
-
#build_NamedDefinition(o, name, parameters, body) ⇒ Object
-
#build_NilClass(o) ⇒ Object
-
#build_NodeDefinition(o, hosts, parent, body) ⇒ Object
-
#build_Parameter(o, name, expr) ⇒ Object
-
#build_Program(o, body, definitions, locator) ⇒ Object
-
#build_QualifiedName(o, name) ⇒ Object
-
#build_QualifiedReference(o, name) ⇒ Object
-
#build_QueryExpression(o, expr) ⇒ Object
-
#build_Regexp(o) ⇒ Object
-
#build_RelationshipExpression(o, op, a, b) ⇒ Object
-
#build_RenderStringExpression(o, string) ⇒ Object
-
#build_ReservedWord(o, name) ⇒ Object
-
#build_ResourceBody(o, title_expression, attribute_operations) ⇒ Object
-
#build_ResourceDefaultsExpression(o, type_ref, attribute_operations) ⇒ Object
-
#build_ResourceExpression(o, type_name, bodies) ⇒ Object
-
#build_ResourceOverrideExpression(o, resources, attribute_operations) ⇒ Object
-
#build_SelectorEntry(o, matching, value) ⇒ Object
-
#build_SelectorExpression(o, left, *selectors) ⇒ Object
-
#build_String(o) ⇒ Object
Building model equivalences of Ruby objects Allows passing regular ruby objects to the factory to produce instructions that when evaluated produce the same thing.
-
#build_SubLocatedExpression(o, token, expression) ⇒ Object
Builds a SubLocatedExpression - this wraps the expression in a sublocation configured from the given token A SubLocated holds its own locator that is used for subexpressions holding positions relative to what it describes.
-
#build_Symbol(o) ⇒ Object
Creates a String literal, unless the symbol is one of the special :undef, or :default which instead creates a LiterlUndef, or a LiteralDefault.
-
#build_TokenValue(o) ⇒ Object
-
#build_TrueClass(o) ⇒ Object
-
#build_UnaryExpression(o, expr) ⇒ Object
-
#captures_rest ⇒ Object
Mark parameter as capturing the rest of arguments.
-
#default(r) ⇒ Object
For CaseExpression, setting the default for an already build CaseExpression.
-
#dot(r) ⇒ Object
-
#f_arithmetic(op, r) ⇒ Object
-
#f_build_binary(klazz, left, right) ⇒ Object
-
#f_build_binary_op(klazz, op, left, right) ⇒ Object
-
#f_build_body(body) ⇒ Object
Builds body :) from different kinds of input.
-
#f_build_unary(klazz, expr) ⇒ Object
Puppet::Pops::Model::Factory helpers.
-
#f_build_vararg(klazz, left, *arg) ⇒ Object
-
#f_comparison(op, r) ⇒ Object
-
#f_match(op, r) ⇒ Object
-
#in(r) ⇒ Object
-
#initialize(o, *args) ⇒ Factory
constructor
Initialize a factory with a single object, or a class with arguments applied to build of created instance.
-
#interpolate ⇒ Object
-
#interpolate_AccessExpression(o) ⇒ Object
rewrite left expression to variable if it is name, number, and recurse if it is an access expression this is for interpolation support in new lexer ($NAME, $NAME[}, $Factory.NUMBER, $NUMBER[] - all other expressions requires variables to be preceded with $.
-
#interpolate_CallMethodExpression(o) ⇒ Object
Rewrite method calls on the form $… to $$x$x.each.
-
#interpolate_Factory(o) ⇒ Object
-
#interpolate_LiteralInteger(o) ⇒ Object
-
#interpolate_NamedAccessExpression(o) ⇒ Object
-
#interpolate_Object(o) ⇒ Object
-
#interpolate_QualifiedName(o) ⇒ Object
-
#is_interop_rewriteable?(o) ⇒ Boolean
-
#lambda=(lambda) ⇒ Object
-
#loc ⇒ Puppet::Pops::Adapters::SourcePosAdapter
With location information.
-
#method_missing(meth, *args, &block) ⇒ Object
Catch all delegation to current.
-
#minus ⇒ Object
-
#minus_set(r) ⇒ Object
-
#mne(r) ⇒ Object
-
#name_is_statement(name) ⇒ Object
Returns true if the given name is a “statement keyword” (require, include, contain, error, notice, info, debug.
-
#ne(r) ⇒ Object
-
#not ⇒ Object
-
#or(r) ⇒ Object
-
#paren ⇒ Object
-
#plus_set(r) ⇒ Object
-
#record_position(start_locatable, end_locatable) ⇒ Object
Records the position (start -> end) and computes the resulting length.
-
#relop(op, r) ⇒ Object
-
#respond_to?(meth, include_all = false) ⇒ Boolean
-
#select(*args) ⇒ Object
-
#set(r) ⇒ Object
-
#text ⇒ Object
-
#to_ops(o, *args) ⇒ Object
Checks if the object is already a model object, or build it.
-
#to_s ⇒ Object
-
#type_expr(o) ⇒ Object
Set Expression that should evaluate to the parameter’s type.
-
#unfold ⇒ Object
-
#var ⇒ Object
Constructor Details
#initialize(o, *args) ⇒ Factory
Initialize a factory with a single object, or a class with arguments applied to build of created instance
23
24
25
26
27
28
29
30
31
32
|
# File 'lib/puppet/pops/model/factory.rb', line 23
def initialize o, *args
@current = case o
when Model::PopsObject
o
when Puppet::Pops::Model::Factory
o.current
else
build(o, *args)
end
end
|
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(meth, *args, &block) ⇒ Object
Catch all delegation to current
468
469
470
471
472
473
474
|
# File 'lib/puppet/pops/model/factory.rb', line 468
def method_missing(meth, *args, &block)
if current.respond_to?(meth)
current.send(meth, *args, &block)
else
super
end
end
|
Instance Attribute Details
#current ⇒ Object
Also known as:
model
12
13
14
|
# File 'lib/puppet/pops/model/factory.rb', line 12
def current
@current
end
|
Class Method Details
.ATTR(name, type_expr = nil) ⇒ Object
568
|
# File 'lib/puppet/pops/model/factory.rb', line 568
def self.ATTR(name, type_expr=nil); new(Model::CreateAttributeExpression, name, type_expr); end
|
.ATTRIBUTE_OP(name, op, expr) ⇒ Object
693
694
695
|
# File 'lib/puppet/pops/model/factory.rb', line 693
def self.ATTRIBUTE_OP(name, op, expr)
new(Model::AttributeOperation, name, op, expr)
end
|
.ATTRIBUTES_OP(expr) ⇒ Object
697
698
699
|
# File 'lib/puppet/pops/model/factory.rb', line 697
def self.ATTRIBUTES_OP(expr)
new(Model::AttributesOperation, expr)
end
|
.block(*args) ⇒ Object
550
|
# File 'lib/puppet/pops/model/factory.rb', line 550
def self.block(*args); new(Model::BlockExpression, *args); end
|
.block_or_expression(*args) ⇒ Object
Builds a BlockExpression if args size > 1, else the single expression/value in args
741
742
743
744
745
746
747
|
# File 'lib/puppet/pops/model/factory.rb', line 741
def self.block_or_expression(*args)
if args.size > 1
new(Model::BlockExpression, *args)
else
new(args[0])
end
end
|
.CALL_METHOD(functor, argument_list) ⇒ Object
708
709
710
|
# File 'lib/puppet/pops/model/factory.rb', line 708
def self.CALL_METHOD(functor, argument_list)
new(Model::CallMethodExpression, functor, true, nil, *argument_list)
end
|
.CALL_NAMED(name, rval_required, argument_list) ⇒ Object
701
702
703
704
705
706
|
# File 'lib/puppet/pops/model/factory.rb', line 701
def self.CALL_NAMED(name, rval_required, argument_list)
unless name.kind_of?(Model::PopsObject)
name = Puppet::Pops::Model::Factory.fqn(name) unless name.is_a?(Puppet::Pops::Model::Factory)
end
new(Model::CallNamedFunctionExpression, name, rval_required, *argument_list)
end
|
.CASE(test_e, *options) ⇒ Object
560
|
# File 'lib/puppet/pops/model/factory.rb', line 560
def self.CASE(test_e,*options); new(Model::CaseExpression, test_e, *options); end
|
.COLLECT(type_expr, query_expr, attribute_operations) ⇒ Object
712
713
714
|
# File 'lib/puppet/pops/model/factory.rb', line 712
def self.COLLECT(type_expr, query_expr, attribute_operations)
new(Model::CollectExpression, type_expr, query_expr, attribute_operations)
end
|
.concat(*args) ⇒ Object
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
|
# File 'lib/puppet/pops/model/factory.rb', line 1038
def self.concat(*args)
new(args.map do |e|
e = e.current if e.is_a?(self)
case e
when Model::LiteralString
e.value
when String
e
else
raise ArgumentError, "can only concatenate strings, got #{e.class}"
end
end.join(''))
end
|
.DEFINITION(name, parameters, body) ⇒ Object
753
754
755
|
# File 'lib/puppet/pops/model/factory.rb', line 753
def self.DEFINITION(name, parameters, body)
new(Model::ResourceTypeDefinition, name, parameters, body)
end
|
.ENUM(*args) ⇒ Object
570
|
# File 'lib/puppet/pops/model/factory.rb', line 570
def self.ENUM(*args); new(Model::CreateEnumExpression, *args); end
|
.EPP(parameters, body) ⇒ Object
630
631
632
633
634
635
636
637
638
639
|
# File 'lib/puppet/pops/model/factory.rb', line 630
def self.EPP(parameters, body)
if parameters.nil?
params = []
parameters_specified = false
else
params = parameters
parameters_specified = true
end
LAMBDA(params, new(Model::EppExpression, parameters_specified, body))
end
|
.EXPORTED_QUERY(query_expr) ⇒ Object
689
690
691
|
# File 'lib/puppet/pops/model/factory.rb', line 689
def self.EXPORTED_QUERY(query_expr)
new(Model::ExportedQuery, query_expr)
end
|
Creates a QualifiedName representation of o, unless o already represents a QualifiedName in which case it is returned.
602
603
604
605
606
|
# File 'lib/puppet/pops/model/factory.rb', line 602
def self.fqn(o)
o = o.current if o.is_a?(Puppet::Pops::Model::Factory)
o = new(Model::QualifiedName, o) unless o.is_a? Model::QualifiedName
o
end
|
Creates a QualifiedName representation of o, unless o already represents a QualifiedName in which case it is returned.
611
612
613
614
615
|
# File 'lib/puppet/pops/model/factory.rb', line 611
def self.fqr(o)
o = o.current if o.is_a?(Puppet::Pops::Model::Factory)
o = new(Model::QualifiedReference, o) unless o.is_a? Model::QualifiedReference
o
end
|
.HASH(entries) ⇒ Object
574
|
# File 'lib/puppet/pops/model/factory.rb', line 574
def self.HASH(entries); new(Model::LiteralHash, *entries); end
|
.HEREDOC(name, expr) ⇒ Object
576
|
# File 'lib/puppet/pops/model/factory.rb', line 576
def self.HEREDOC(name, expr); new(Model::HeredocExpression, name, expr); end
|
.HOSTCLASS(name, parameters, parent, body) ⇒ Object
749
750
751
|
# File 'lib/puppet/pops/model/factory.rb', line 749
def self.HOSTCLASS(name, parameters, parent, body)
new(Model::HostClassDefinition, name, parameters, parent, body)
end
|
.IF(test_e, then_e, else_e) ⇒ Object
556
|
# File 'lib/puppet/pops/model/factory.rb', line 556
def self.IF(test_e,then_e,else_e); new(Model::IfExpression, test_e, then_e, else_e); end
|
.KEY_ENTRY(key, val) ⇒ Object
572
|
# File 'lib/puppet/pops/model/factory.rb', line 572
def self.KEY_ENTRY(key, val); new(Model::KeyedEntry, key, val); end
|
.LAMBDA(parameters, body) ⇒ Object
757
758
759
|
# File 'lib/puppet/pops/model/factory.rb', line 757
def self.LAMBDA(parameters, body)
new(Model::LambdaExpression, parameters, body)
end
|
.LIST(entries) ⇒ Object
580
|
# File 'lib/puppet/pops/model/factory.rb', line 580
def self.LIST(entries); new(Model::LiteralList, *entries); end
|
.literal(o) ⇒ Object
542
|
# File 'lib/puppet/pops/model/factory.rb', line 542
def self.literal(o); new(o); end
|
.MAP(match, value) ⇒ Object
564
|
# File 'lib/puppet/pops/model/factory.rb', line 564
def self.MAP(match, value); new(Model::SelectorEntry, match, value); end
|
544
|
# File 'lib/puppet/pops/model/factory.rb', line 544
def self.minus(o); new(o).minus; end
|
.NAMED_ACCESS(type_name, bodies) ⇒ Object
716
717
718
|
# File 'lib/puppet/pops/model/factory.rb', line 716
def self.NAMED_ACCESS(type_name, bodies)
new(Model::NamedAccessExpression, type_name, bodies)
end
|
.NODE(hosts, parent, body) ⇒ Object
584
|
# File 'lib/puppet/pops/model/factory.rb', line 584
def self.NODE(hosts, parent, body); new(Model::NodeDefinition, hosts, parent, body); end
|
.nop?(o) ⇒ Boolean
761
762
763
|
# File 'lib/puppet/pops/model/factory.rb', line 761
def self.nop? o
o.nil? || o.is_a?(Puppet::Pops::Model::Nop)
end
|
.NUMBER(name_or_numeric) ⇒ Object
652
653
654
655
656
657
658
659
660
661
662
663
664
|
# File 'lib/puppet/pops/model/factory.rb', line 652
def self.NUMBER(name_or_numeric)
if n_radix = Puppet::Pops::Utils.to_n_with_radix(name_or_numeric)
val, radix = n_radix
if val.is_a?(Float)
new(Model::LiteralFloat, val)
else
new(Model::LiteralInteger, val, radix)
end
else
raise ArgumentError, "Internal Error, NUMBER token does not contain a valid number, #{name_or_numeric}"
end
end
|
.PARAM(name, expr = nil) ⇒ Object
582
|
# File 'lib/puppet/pops/model/factory.rb', line 582
def self.PARAM(name, expr=nil); new(Model::Parameter, name, expr); end
|
.PROGRAM(body, definitions, locator) ⇒ Object
736
737
738
|
# File 'lib/puppet/pops/model/factory.rb', line 736
def self.PROGRAM(body, definitions, locator)
new(Model::Program, body, definitions, locator)
end
|
.QNAME(name) ⇒ Object
TODO: This is the same a fqn factory method, don’t know if callers to fqn and QNAME can live with the same result or not yet - refactor into one method when decided.
648
649
650
|
# File 'lib/puppet/pops/model/factory.rb', line 648
def self.QNAME(name)
new(Model::QualifiedName, name)
end
|
.QNAME_OR_NUMBER(name) ⇒ Object
Convert input string to either a qualified name, a LiteralInteger with radix, or a LiteralFloat
668
669
670
671
672
673
674
675
676
677
678
679
|
# File 'lib/puppet/pops/model/factory.rb', line 668
def self.QNAME_OR_NUMBER(name)
if n_radix = Puppet::Pops::Utils.to_n_with_radix(name)
val, radix = n_radix
if val.is_a?(Float)
new(Model::LiteralFloat, val)
else
new(Model::LiteralInteger, val, radix)
end
else
new(Model::QualifiedName, name)
end
end
|
.QREF(name) ⇒ Object
681
682
683
|
# File 'lib/puppet/pops/model/factory.rb', line 681
def self.QREF(name)
new(Model::QualifiedReference, name)
end
|
.record_position(o, start_locatable, end_locateable) ⇒ Object
480
481
482
|
# File 'lib/puppet/pops/model/factory.rb', line 480
def self.record_position(o, start_locatable, end_locateable)
new(o).record_position(start_locatable, end_locateable)
end
|
.RENDER_EXPR(expr) ⇒ Object
626
627
628
|
# File 'lib/puppet/pops/model/factory.rb', line 626
def self.RENDER_EXPR(expr)
new(Model::RenderExpression, expr)
end
|
.RENDER_STRING(o) ⇒ Object
622
623
624
|
# File 'lib/puppet/pops/model/factory.rb', line 622
def self.RENDER_STRING(o)
new(Model::RenderStringExpression, o)
end
|
.RESERVED(name) ⇒ Object
641
642
643
|
# File 'lib/puppet/pops/model/factory.rb', line 641
def self.RESERVED(name)
new(Model::ReservedWord, name)
end
|
.RESOURCE(type_name, bodies) ⇒ Object
720
721
722
|
# File 'lib/puppet/pops/model/factory.rb', line 720
def self.RESOURCE(type_name, bodies)
new(Model::ResourceExpression, type_name, bodies)
end
|
.RESOURCE_BODY(resource_title, attribute_operations) ⇒ Object
732
733
734
|
# File 'lib/puppet/pops/model/factory.rb', line 732
def self.RESOURCE_BODY(resource_title, attribute_operations)
new(Model::ResourceBody, resource_title, attribute_operations)
end
|
.RESOURCE_DEFAULTS(type_name, attribute_operations) ⇒ Object
724
725
726
|
# File 'lib/puppet/pops/model/factory.rb', line 724
def self.RESOURCE_DEFAULTS(type_name, attribute_operations)
new(Model::ResourceDefaultsExpression, type_name, attribute_operations)
end
|
.RESOURCE_OVERRIDE(resource_ref, attribute_operations) ⇒ Object
728
729
730
|
# File 'lib/puppet/pops/model/factory.rb', line 728
def self.RESOURCE_OVERRIDE(resource_ref, attribute_operations)
new(Model::ResourceOverrideExpression, resource_ref, attribute_operations)
end
|
.resource_shape(expr) ⇒ Object
Returns symbolic information about an expected shape of a resource expression given the LHS of a resource expr.
-
‘name { }` => `:resource`, create a resource of the given type
-
‘Name { }` => ’:defaults`, set defaults for the referenced type
-
‘Name[] { }` => `:override`, overrides instances referenced by LHS
-
_any other_ => ‘:error’, all other are considered illegal
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
|
# File 'lib/puppet/pops/model/factory.rb', line 520
def self.resource_shape(expr)
expr = expr.current if expr.is_a?(Puppet::Pops::Model::Factory)
case expr
when Model::QualifiedName
:resource
when Model::QualifiedReference
:defaults
when Model::AccessExpression
if expr.left_expr.is_a?(Model::QualifiedReference) && expr.left_expr.value == 'resource' && expr.keys.size == 1
:defaults
else
:override
end
when 'class'
:class
else
:error
end
end
|
Sets the form of the resource expression (:regular (the default), :virtual, or :exported). Produces true if the expression was a resource expression, false otherwise.
505
506
507
508
509
510
511
|
# File 'lib/puppet/pops/model/factory.rb', line 505
def self.set_resource_form(expr, form)
expr = expr.current if expr.is_a?(Puppet::Pops::Model::Factory)
return false unless expr.is_a?(Puppet::Pops::Model::AbstractResource)
expr.form = form
return true
end
|
.string(*args) ⇒ Object
552
|
# File 'lib/puppet/pops/model/factory.rb', line 552
def self.string(*args); new(Model::ConcatenatedString, *args); end
|
.SUBLOCATE(token, expr) ⇒ Object
578
|
# File 'lib/puppet/pops/model/factory.rb', line 578
def self.SUBLOCATE(token, expr) new(Model::SubLocatedExpression, token, expr); end
|
.TEXT(expr) ⇒ Object
617
618
619
|
# File 'lib/puppet/pops/model/factory.rb', line 617
def self.TEXT(expr)
new(Model::TextExpression, new(expr).interpolate)
end
|
554
|
# File 'lib/puppet/pops/model/factory.rb', line 554
def self.text(o); new(o).text; end
|
Transforms an array of expressions containing literal name expressions to calls if followed by an expression, or expression list.
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
|
# File 'lib/puppet/pops/model/factory.rb', line 799
def self.transform_calls(expressions)
expressions.reduce([]) do |memo, expr|
expr = expr.current if expr.is_a?(Puppet::Pops::Model::Factory)
name = memo[-1]
if name.is_a?(Model::QualifiedName) && STATEMENT_CALLS[name.value]
if expr.is_a?(Array)
expr = expr.reject {|e| e.is_a?(Puppet::Pops::Parser::LexerSupport::TokenValue) }
else
expr = [expr]
end
the_call = Puppet::Pops::Model::Factory.CALL_NAMED(name, false, expr)
record_position(the_call, name, expr.is_a?(Array) ? expr[-1] : expr)
memo[-1] = the_call
if expr.is_a?(Model::CallNamedFunctionExpression)
expr.rval_required = true
end
elsif expr.is_a?(Array)
raise ArgsToNonCallError.new(expr, name)
else
memo << expr
if expr.is_a?(Model::CallNamedFunctionExpression)
expr.rval_required = false
end
end
memo
end
end
|
Transforms a left expression followed by an untitled resource (in the form of attribute_operations)
836
837
838
839
840
841
842
843
844
845
846
|
# File 'lib/puppet/pops/model/factory.rb', line 836
def self.transform_resource_wo_title(left, attribute_ops)
return nil unless attribute_ops.is_a? Array
return nil unless left.current.is_a?(Puppet::Pops::Model::QualifiedName)
keyed_entries = attribute_ops.map do |ao|
return nil if ao.operator == :'+>'
KEY_ENTRY(ao.attribute_name, ao.value_expr)
end
result = block_or_expression(*transform_calls([left, HASH(keyed_entries)]))
result
end
|
.TYPE(name, super_name = nil) ⇒ Object
566
|
# File 'lib/puppet/pops/model/factory.rb', line 566
def self.TYPE(name, super_name=nil); new(Model::CreateTypeExpression, name, super_name); end
|
.unfold(o) ⇒ Object
546
|
# File 'lib/puppet/pops/model/factory.rb', line 546
def self.unfold(o); new(o).unfold; end
|
.UNLESS(test_e, then_e, else_e) ⇒ Object
558
|
# File 'lib/puppet/pops/model/factory.rb', line 558
def self.UNLESS(test_e,then_e,else_e); new(Model::UnlessExpression, test_e, then_e, else_e); end
|
548
|
# File 'lib/puppet/pops/model/factory.rb', line 548
def self.var(o); new(o).var; end
|
.VIRTUAL_QUERY(query_expr) ⇒ Object
685
686
687
|
# File 'lib/puppet/pops/model/factory.rb', line 685
def self.VIRTUAL_QUERY(query_expr)
new(Model::VirtualQuery, query_expr)
end
|
.WHEN(values_list, block) ⇒ Object
562
|
# File 'lib/puppet/pops/model/factory.rb', line 562
def self.WHEN(values_list, block); new(Model::CaseOption, values_list, block); end
|
Instance Method Details
404
|
# File 'lib/puppet/pops/model/factory.rb', line 404
def % r; f_arithmetic(:%, r); end
|
402
|
# File 'lib/puppet/pops/model/factory.rb', line 402
def * r; f_arithmetic(:*, r); end
|
396
|
# File 'lib/puppet/pops/model/factory.rb', line 396
def + r; f_arithmetic(:+, r); end
|
398
|
# File 'lib/puppet/pops/model/factory.rb', line 398
def - r; f_arithmetic(:-, r); end
|
400
|
# File 'lib/puppet/pops/model/factory.rb', line 400
def / r; f_arithmetic(:/, r); end
|
410
|
# File 'lib/puppet/pops/model/factory.rb', line 410
def < r; f_comparison(:<, r); end
|
406
|
# File 'lib/puppet/pops/model/factory.rb', line 406
def << r; f_arithmetic(:<<, r); end
|
412
|
# File 'lib/puppet/pops/model/factory.rb', line 412
def <= r; f_comparison(:<=, r); end
|
418
|
# File 'lib/puppet/pops/model/factory.rb', line 418
def == r; f_comparison(:==, r); end
|
422
|
# File 'lib/puppet/pops/model/factory.rb', line 422
def =~ r; f_match(:'=~', r); end
|
414
|
# File 'lib/puppet/pops/model/factory.rb', line 414
def > r; f_comparison(:>, r); end
|
416
|
# File 'lib/puppet/pops/model/factory.rb', line 416
def >= r; f_comparison(:>=, r); end
|
408
|
# File 'lib/puppet/pops/model/factory.rb', line 408
def >> r; f_arithmetic(:>>, r); end
|
392
|
# File 'lib/puppet/pops/model/factory.rb', line 392
def [](*r); f_build_vararg(Model::AccessExpression, current, *r); end
|
380
|
# File 'lib/puppet/pops/model/factory.rb', line 380
def and(r) f_build_binary(Model::AndExpression, current, r); end
|
#attributes(*args) ⇒ Object
462
463
464
465
|
# File 'lib/puppet/pops/model/factory.rb', line 462
def attributes(*args)
args.each {|a| current.addAttributes(build(a)) }
self
end
|
#build(o, *args) ⇒ Object
35
36
37
38
39
40
41
42
|
# File 'lib/puppet/pops/model/factory.rb', line 35
def build(o, *args)
begin
@@build_visitor.visit_this(self, o, *args)
rescue =>e
raise e
end
end
|
#build_AccessExpression(o, left, *keys) ⇒ Object
78
79
80
81
82
|
# File 'lib/puppet/pops/model/factory.rb', line 78
def build_AccessExpression(o, left, *keys)
o.left_expr = to_ops(left)
keys.each {|expr| o.addKeys(to_ops(expr)) }
o
end
|
#build_ArithmeticExpression(o, op, a, b) ⇒ Object
Building of Model classes
56
57
58
59
|
# File 'lib/puppet/pops/model/factory.rb', line 56
def build_ArithmeticExpression(o, op, a, b)
o.operator = op
build_BinaryExpression(o, a, b)
end
|
#build_Array(o) ⇒ Object
Creates a LiteralList instruction from an Array, where the entries are built.
921
922
923
924
925
|
# File 'lib/puppet/pops/model/factory.rb', line 921
def build_Array(o)
x = Model::LiteralList.new
o.each { |v| x.addValues(build(v)) }
x
end
|
#build_AssignmentExpression(o, op, a, b) ⇒ Object
61
62
63
64
|
# File 'lib/puppet/pops/model/factory.rb', line 61
def build_AssignmentExpression(o, op, a, b)
o.operator = op
build_BinaryExpression(o, a, b)
end
|
#build_AttributeOperation(o, name, op, value) ⇒ Object
66
67
68
69
70
71
|
# File 'lib/puppet/pops/model/factory.rb', line 66
def build_AttributeOperation(o, name, op, value)
o.operator = op
o.attribute_name = name.to_s o.value_expr = build(value)
o
end
|
#build_AttributesOperation(o, value) ⇒ Object
73
74
75
76
|
# File 'lib/puppet/pops/model/factory.rb', line 73
def build_AttributesOperation(o, value)
o.expr = build(value)
o
end
|
#build_BinaryExpression(o, left, right) ⇒ Object
84
85
86
87
88
|
# File 'lib/puppet/pops/model/factory.rb', line 84
def build_BinaryExpression(o, left, right)
o.left_expr = to_ops(left)
o.right_expr = to_ops(right)
o
end
|
#build_BlockExpression(o, *args) ⇒ Object
90
91
92
93
|
# File 'lib/puppet/pops/model/factory.rb', line 90
def build_BlockExpression(o, *args)
args.each {|expr| o.addStatements(to_ops(expr)) }
o
end
|
#build_CallExpression(o, functor, rval_required, *args) ⇒ Object
937
938
939
940
941
942
|
# File 'lib/puppet/pops/model/factory.rb', line 937
def build_CallExpression(o, functor, rval_required, *args)
o.functor_expr = to_ops(functor)
o.rval_required = rval_required
args.each {|x| o.addArguments(to_ops(x)) }
o
end
|
#build_CallMethodExpression(o, functor, rval_required, lambda, *args) ⇒ Object
944
945
946
947
948
|
# File 'lib/puppet/pops/model/factory.rb', line 944
def build_CallMethodExpression(o, functor, rval_required, lambda, *args)
build_CallExpression(o, functor, rval_required, *args)
o.lambda = lambda
o
end
|
#build_CaseExpression(o, test, *args) ⇒ Object
950
951
952
953
954
|
# File 'lib/puppet/pops/model/factory.rb', line 950
def build_CaseExpression(o, test, *args)
o.test = build(test)
args.each {|opt| o.addOptions(build(opt)) }
o
end
|
#build_CaseOption(o, value_list, then_expr) ⇒ Object
956
957
958
959
960
961
962
|
# File 'lib/puppet/pops/model/factory.rb', line 956
def build_CaseOption(o, value_list, then_expr)
value_list = [value_list] unless value_list.is_a? Array
value_list.each { |v| o.addValues(build(v)) }
b = f_build_body(then_expr)
o.then_expr = to_ops(b) if b
o
end
|
#build_Class(o, *args) ⇒ Object
Build a Class by creating an instance of it, and then calling build on the created instance with the given arguments
966
967
968
|
# File 'lib/puppet/pops/model/factory.rb', line 966
def build_Class(o, *args)
build(o.new(), *args)
end
|
#build_CollectExpression(o, type_expr, query_expr, attribute_operations) ⇒ Object
95
96
97
98
99
100
|
# File 'lib/puppet/pops/model/factory.rb', line 95
def build_CollectExpression(o, type_expr, query_expr, attribute_operations)
o.type_expr = to_ops(type_expr)
o.query = build(query_expr)
attribute_operations.each {|op| o.addOperations(build(op)) }
o
end
|
#build_ComparisonExpression(o, op, a, b) ⇒ Object
102
103
104
105
|
# File 'lib/puppet/pops/model/factory.rb', line 102
def build_ComparisonExpression(o, op, a, b)
o.operator = op
build_BinaryExpression(o, a, b)
end
|
#build_ConcatenatedString(o, *args) ⇒ Object
107
108
109
110
|
# File 'lib/puppet/pops/model/factory.rb', line 107
def build_ConcatenatedString(o, *args)
args.each {|expr| o.addSegments(build(expr)) }
o
end
|
#build_CreateAttributeExpression(o, name, datatype_expr) ⇒ Object
124
125
126
127
128
|
# File 'lib/puppet/pops/model/factory.rb', line 124
def build_CreateAttributeExpression(o, name, datatype_expr)
o.name = name
o.type = to_ops(datatype_expr)
o
end
|
#build_CreateEnumExpression(o, *args) ⇒ Object
118
119
120
121
122
|
# File 'lib/puppet/pops/model/factory.rb', line 118
def build_CreateEnumExpression(o, *args)
o.name = args.slice(0) if args.size == 2
o.values = build(args.last)
o
end
|
#build_CreateTypeExpression(o, name, super_name = nil) ⇒ Object
112
113
114
115
116
|
# File 'lib/puppet/pops/model/factory.rb', line 112
def build_CreateTypeExpression(o, name, super_name = nil)
o.name = name
o.super_name = super_name
o
end
|
#build_EppExpression(o, parameters_specified, body) ⇒ Object
894
895
896
897
898
899
|
# File 'lib/puppet/pops/model/factory.rb', line 894
def build_EppExpression(o, parameters_specified, body)
o.parameters_specified = parameters_specified
b = f_build_body(body)
o.body = b.current if b
o
end
|
#build_Factory(o) ⇒ Object
If building a factory, simply unwrap the model oject contained in the factory.
902
903
904
|
# File 'lib/puppet/pops/model/factory.rb', line 902
def build_Factory(o)
o.current
end
|
#build_FalseClass(o) ⇒ Object
870
871
872
873
874
|
# File 'lib/puppet/pops/model/factory.rb', line 870
def build_FalseClass(o)
x = Model::LiteralBoolean.new
x.value = o
x
end
|
#build_Fixnum(o) ⇒ Object
876
877
878
879
880
|
# File 'lib/puppet/pops/model/factory.rb', line 876
def build_Fixnum(o)
x = Model::LiteralInteger.new
x.value = o;
x
end
|
#build_Float(o) ⇒ Object
882
883
884
885
886
|
# File 'lib/puppet/pops/model/factory.rb', line 882
def build_Float(o)
x = Model::LiteralFloat.new
x.value = o;
x
end
|
#build_Hash(o) ⇒ Object
Create a LiteralHash instruction from a hash, where keys and values are built The hash entries are added in sorted order based on key.to_s
930
931
932
933
934
|
# File 'lib/puppet/pops/model/factory.rb', line 930
def build_Hash(o)
x = Model::LiteralHash.new
(o.sort_by {|k,v| k.to_s}).each {|k,v| x.addEntries(build(Model::KeyedEntry.new, k, v)) }
x
end
|
#build_HeredocExpression(o, name, expr) ⇒ Object
130
131
132
133
134
|
# File 'lib/puppet/pops/model/factory.rb', line 130
def build_HeredocExpression(o, name, expr)
o.syntax = name
o.text_expr = build(expr)
o
end
|
#build_HostClassDefinition(o, name, parameters, parent_class_name, body) ⇒ Model::HostClassDefinition
Returns configured from the parameters.
142
143
144
145
146
|
# File 'lib/puppet/pops/model/factory.rb', line 142
def build_HostClassDefinition(o, name, parameters, parent_class_name, body)
build_NamedDefinition(o, name, parameters, body)
o.parent_class = parent_class_name if parent_class_name
o
end
|
#build_IfExpression(o, t, ift, els) ⇒ Object
186
187
188
189
190
191
|
# File 'lib/puppet/pops/model/factory.rb', line 186
def build_IfExpression(o, t, ift, els)
o.test = build(t)
o.then_expr = build(ift)
o.else_expr= build(els)
o
end
|
#build_KeyedEntry(o, k, v) ⇒ Object
159
160
161
162
163
|
# File 'lib/puppet/pops/model/factory.rb', line 159
def build_KeyedEntry(o, k, v)
o.key = to_ops(k)
o.value = to_ops(v)
o
end
|
#build_LambdaExpression(o, parameters, body) ⇒ Object
218
219
220
221
222
223
|
# File 'lib/puppet/pops/model/factory.rb', line 218
def build_LambdaExpression(o, parameters, body)
parameters.each {|p| o.addParameters(build(p)) }
b = f_build_body(body)
o.body = to_ops(b) if b
o
end
|
#build_LiteralFloat(o, val) ⇒ Object
175
176
177
178
|
# File 'lib/puppet/pops/model/factory.rb', line 175
def build_LiteralFloat(o, val)
o.value = val
o
end
|
#build_LiteralHash(o, *keyed_entries) ⇒ Object
165
166
167
168
|
# File 'lib/puppet/pops/model/factory.rb', line 165
def build_LiteralHash(o, *keyed_entries)
keyed_entries.each {|entry| o.addEntries build(entry) }
o
end
|
#build_LiteralInteger(o, val, radix) ⇒ Object
180
181
182
183
184
|
# File 'lib/puppet/pops/model/factory.rb', line 180
def build_LiteralInteger(o, val, radix)
o.value = val
o.radix = radix
o
end
|
#build_LiteralList(o, *values) ⇒ Object
170
171
172
173
|
# File 'lib/puppet/pops/model/factory.rb', line 170
def build_LiteralList(o, *values)
values.each {|v| o.addValues build(v) }
o
end
|
#build_MatchExpression(o, op, a, b) ⇒ Object
193
194
195
196
|
# File 'lib/puppet/pops/model/factory.rb', line 193
def build_MatchExpression(o, op, a, b)
o.operator = op
build_BinaryExpression(o, a, b)
end
|
#build_NamedDefinition(o, name, parameters, body) ⇒ Object
225
226
227
228
229
230
231
|
# File 'lib/puppet/pops/model/factory.rb', line 225
def build_NamedDefinition(o, name, parameters, body)
parameters.each {|p| o.addParameters(build(p)) }
b = f_build_body(body)
o.body = b.current if b
o.name = name
o
end
|
#build_NilClass(o) ⇒ Object
859
860
861
862
|
# File 'lib/puppet/pops/model/factory.rb', line 859
def build_NilClass(o)
x = Model::Nop.new
x
end
|
#build_NodeDefinition(o, hosts, parent, body) ⇒ Object
237
238
239
240
241
242
243
|
# File 'lib/puppet/pops/model/factory.rb', line 237
def build_NodeDefinition(o, hosts, parent, body)
hosts.each {|h| o.addHost_matches(build(h)) }
o.parent = build(parent) if parent b = f_build_body(body)
o.body = b.current if b
o
end
|
#build_Parameter(o, name, expr) ⇒ Object
245
246
247
248
249
|
# File 'lib/puppet/pops/model/factory.rb', line 245
def build_Parameter(o, name, expr)
o.name = name
o.value = build(expr) if expr o
end
|
#build_Program(o, body, definitions, locator) ⇒ Object
326
327
328
329
330
331
332
333
334
335
|
# File 'lib/puppet/pops/model/factory.rb', line 326
def build_Program(o, body, definitions, locator)
o.body = to_ops(body)
definitions.each { |d| o.addDefinitions(d) }
o.source_ref = locator.file
o.source_text = locator.string
o.line_offsets = locator.line_index
o.locator = locator
o
end
|
#build_QualifiedName(o, name) ⇒ Object
337
338
339
340
|
# File 'lib/puppet/pops/model/factory.rb', line 337
def build_QualifiedName(o, name)
o.value = name.to_s
o
end
|
#build_QualifiedReference(o, name) ⇒ Object
251
252
253
254
|
# File 'lib/puppet/pops/model/factory.rb', line 251
def build_QualifiedReference(o, name)
o.value = name.to_s.downcase
o
end
|
#build_QueryExpression(o, expr) ⇒ Object
314
315
316
317
318
|
# File 'lib/puppet/pops/model/factory.rb', line 314
def build_QueryExpression(o, expr)
ops = to_ops(expr)
o.expr = ops unless Puppet::Pops::Model::Factory.nop? ops
o
end
|
#build_Regexp(o) ⇒ Object
888
889
890
891
892
|
# File 'lib/puppet/pops/model/factory.rb', line 888
def build_Regexp(o)
x = Model::LiteralRegularExpression.new
x.value = o;
x
end
|
#build_RelationshipExpression(o, op, a, b) ⇒ Object
256
257
258
259
|
# File 'lib/puppet/pops/model/factory.rb', line 256
def build_RelationshipExpression(o, op, a, b)
o.operator = op
build_BinaryExpression(o, a, b)
end
|
#build_RenderStringExpression(o, string) ⇒ Object
267
268
269
270
|
# File 'lib/puppet/pops/model/factory.rb', line 267
def build_RenderStringExpression(o, string)
o.value = string;
o
end
|
#build_ReservedWord(o, name) ⇒ Object
154
155
156
157
|
# File 'lib/puppet/pops/model/factory.rb', line 154
def build_ReservedWord(o, name)
o.word = name
o
end
|
#build_ResourceBody(o, title_expression, attribute_operations) ⇒ Object
272
273
274
275
276
|
# File 'lib/puppet/pops/model/factory.rb', line 272
def build_ResourceBody(o, title_expression, attribute_operations)
o.title = build(title_expression)
attribute_operations.each {|ao| o.addOperations(build(ao)) }
o
end
|
#build_ResourceDefaultsExpression(o, type_ref, attribute_operations) ⇒ Object
278
279
280
281
282
|
# File 'lib/puppet/pops/model/factory.rb', line 278
def build_ResourceDefaultsExpression(o, type_ref, attribute_operations)
o.type_ref = build(type_ref)
attribute_operations.each {|ao| o.addOperations(build(ao)) }
o
end
|
#build_ResourceExpression(o, type_name, bodies) ⇒ Object
261
262
263
264
265
|
# File 'lib/puppet/pops/model/factory.rb', line 261
def build_ResourceExpression(o, type_name, bodies)
o.type_name = build(type_name)
bodies.each {|b| o.addBodies(build(b)) }
o
end
|
#build_ResourceOverrideExpression(o, resources, attribute_operations) ⇒ Object
148
149
150
151
152
|
# File 'lib/puppet/pops/model/factory.rb', line 148
def build_ResourceOverrideExpression(o, resources, attribute_operations)
o.resources = build(resources)
attribute_operations.each {|ao| o.addOperations(build(ao)) }
o
end
|
#build_SelectorEntry(o, matching, value) ⇒ Object
308
309
310
311
312
|
# File 'lib/puppet/pops/model/factory.rb', line 308
def build_SelectorEntry(o, matching, value)
o.matching_expr = build(matching)
o.value_expr = build(value)
o
end
|
#build_SelectorExpression(o, left, *selectors) ⇒ Object
284
285
286
287
288
|
# File 'lib/puppet/pops/model/factory.rb', line 284
def build_SelectorExpression(o, left, *selectors)
o.left_expr = to_ops(left)
selectors.each {|s| o.addSelectors(build(s)) }
o
end
|
#build_String(o) ⇒ Object
Building model equivalences of Ruby objects Allows passing regular ruby objects to the factory to produce instructions that when evaluated produce the same thing.
853
854
855
856
857
|
# File 'lib/puppet/pops/model/factory.rb', line 853
def build_String(o)
x = Model::LiteralString.new
x.value = o;
x
end
|
#build_SubLocatedExpression(o, token, expression) ⇒ Object
Builds a SubLocatedExpression - this wraps the expression in a sublocation configured from the given token A SubLocated holds its own locator that is used for subexpressions holding positions relative to what it describes.
295
296
297
298
299
300
301
302
303
304
305
306
|
# File 'lib/puppet/pops/model/factory.rb', line 295
def build_SubLocatedExpression(o, token, expression)
o.expr = build(expression)
o.offset = token.offset
o.length = token.length
locator = token.locator
o.locator = locator
o.leading_line_count = locator.leading_line_count
o.leading_line_offset = locator.leading_line_offset
o.line_offsets = locator.locator.line_index
o
end
|
#build_Symbol(o) ⇒ Object
Creates a String literal, unless the symbol is one of the special :undef, or :default which instead creates a LiterlUndef, or a LiteralDefault. Supports :undef because nil creates a no-op instruction.
909
910
911
912
913
914
915
916
917
918
|
# File 'lib/puppet/pops/model/factory.rb', line 909
def build_Symbol(o)
case o
when :undef
Model::LiteralUndef.new
when :default
Model::LiteralDefault.new
else
build_String(o.to_s)
end
end
|
#build_TokenValue(o) ⇒ Object
342
343
344
|
# File 'lib/puppet/pops/model/factory.rb', line 342
def build_TokenValue(o)
raise "Factory can not deal with a Lexer Token. Got token: #{o}. Probably caused by wrong index in grammar val[n]."
end
|
#build_TrueClass(o) ⇒ Object
864
865
866
867
868
|
# File 'lib/puppet/pops/model/factory.rb', line 864
def build_TrueClass(o)
x = Model::LiteralBoolean.new
x.value = o
x
end
|
#build_UnaryExpression(o, expr) ⇒ Object
320
321
322
323
324
|
# File 'lib/puppet/pops/model/factory.rb', line 320
def build_UnaryExpression(o, expr)
ops = to_ops(expr)
o.expr = ops unless Puppet::Pops::Model::Factory.nop? ops
o
end
|
#captures_rest ⇒ Object
Mark parameter as capturing the rest of arguments
590
591
592
|
# File 'lib/puppet/pops/model/factory.rb', line 590
def captures_rest()
current.captures_rest = true
end
|
#default(r) ⇒ Object
For CaseExpression, setting the default for an already build CaseExpression
437
438
439
440
|
# File 'lib/puppet/pops/model/factory.rb', line 437
def default r
current.addOptions(Puppet::Pops::Model::Factory.WHEN(:default, r).current)
self
end
|
394
|
# File 'lib/puppet/pops/model/factory.rb', line 394
def dot r; f_build_binary(Model::NamedAccessExpression, current, r); end
|
#f_arithmetic(op, r) ⇒ Object
363
364
365
|
# File 'lib/puppet/pops/model/factory.rb', line 363
def f_arithmetic(op, r)
f_build_binary_op(Model::ArithmeticExpression, op, current, r)
end
|
#f_build_binary(klazz, left, right) ⇒ Object
355
356
357
|
# File 'lib/puppet/pops/model/factory.rb', line 355
def f_build_binary(klazz, left, right)
Puppet::Pops::Model::Factory.new(build(klazz.new, left, right))
end
|
#f_build_binary_op(klazz, op, left, right) ⇒ Object
351
352
353
|
# File 'lib/puppet/pops/model/factory.rb', line 351
def f_build_binary_op(klazz, op, left, right)
Puppet::Pops::Model::Factory.new(build(klazz.new, op, left, right))
end
|
#f_build_body(nothing) ⇒ Object
#f_build_body(array) ⇒ Object
#f_build_body(expr) ⇒ Object
#f_build_body(obj) ⇒ Object
Builds body :) from different kinds of input
207
208
209
210
211
212
213
214
215
216
|
# File 'lib/puppet/pops/model/factory.rb', line 207
def f_build_body(body)
case body
when NilClass
nil
when Array
Puppet::Pops::Model::Factory.new(Model::BlockExpression, *body)
else
build(body)
end
end
|
#f_build_unary(klazz, expr) ⇒ Object
Puppet::Pops::Model::Factory helpers
347
348
349
|
# File 'lib/puppet/pops/model/factory.rb', line 347
def f_build_unary(klazz, expr)
Puppet::Pops::Model::Factory.new(build(klazz.new, expr))
end
|
#f_build_vararg(klazz, left, *arg) ⇒ Object
359
360
361
|
# File 'lib/puppet/pops/model/factory.rb', line 359
def f_build_vararg(klazz, left, *arg)
Puppet::Pops::Model::Factory.new(build(klazz.new, left, *arg))
end
|
#f_comparison(op, r) ⇒ Object
367
368
369
|
# File 'lib/puppet/pops/model/factory.rb', line 367
def f_comparison(op, r)
f_build_binary_op(Model::ComparisonExpression, op, current, r)
end
|
#f_match(op, r) ⇒ Object
371
372
373
|
# File 'lib/puppet/pops/model/factory.rb', line 371
def f_match(op, r)
f_build_binary_op(Model::MatchExpression, op, current, r)
end
|
376
|
# File 'lib/puppet/pops/model/factory.rb', line 376
def in(r) f_build_binary(Model::InExpression, current, r); end
|
#interpolate ⇒ Object
45
46
47
48
49
50
51
52
|
# File 'lib/puppet/pops/model/factory.rb', line 45
def interpolate()
begin
@@interpolation_visitor.visit_this_0(self, current)
rescue =>e
raise e
end
end
|
#interpolate_AccessExpression(o) ⇒ Object
rewrite left expression to variable if it is name, number, and recurse if it is an access expression this is for interpolation support in new lexer ($NAME, $NAME[}, $NUMBER, $NUMBER[] - all other expressions requires variables to be preceded with $
991
992
993
994
995
996
|
# File 'lib/puppet/pops/model/factory.rb', line 991
def interpolate_AccessExpression(o)
if is_interop_rewriteable?(o.left_expr)
o.left_expr = to_ops(self.class.new(o.left_expr).interpolate)
end
o
end
|
#interpolate_CallMethodExpression(o) ⇒ Object
Rewrite method calls on the form $… to $Puppet::Pops::Model::Factory.$x$x.each
1006
1007
1008
1009
1010
1011
|
# File 'lib/puppet/pops/model/factory.rb', line 1006
def interpolate_CallMethodExpression(o)
if is_interop_rewriteable?(o.functor_expr)
o.functor_expr = to_ops(self.class.new(o.functor_expr).interpolate)
end
o
end
|
#interpolate_Factory(o) ⇒ Object
970
971
972
|
# File 'lib/puppet/pops/model/factory.rb', line 970
def interpolate_Factory(o)
interpolate(o.current)
end
|
#interpolate_LiteralInteger(o) ⇒ Object
974
975
976
977
|
# File 'lib/puppet/pops/model/factory.rb', line 974
def interpolate_LiteralInteger(o)
self.class.new(o).var
end
|
#interpolate_NamedAccessExpression(o) ⇒ Object
998
999
1000
1001
1002
1003
|
# File 'lib/puppet/pops/model/factory.rb', line 998
def interpolate_NamedAccessExpression(o)
if is_interop_rewriteable?(o.left_expr)
o.left_expr = to_ops(self.class.new(o.left_expr).interpolate)
end
o
end
|
#interpolate_Object(o) ⇒ Object
979
980
981
|
# File 'lib/puppet/pops/model/factory.rb', line 979
def interpolate_Object(o)
o
end
|
#interpolate_QualifiedName(o) ⇒ Object
983
984
985
|
# File 'lib/puppet/pops/model/factory.rb', line 983
def interpolate_QualifiedName(o)
self.class.new(o).var
end
|
#is_interop_rewriteable?(o) ⇒ Boolean
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
|
# File 'lib/puppet/pops/model/factory.rb', line 1013
def is_interop_rewriteable?(o)
case o
when Model::AccessExpression, Model::QualifiedName,
Model::NamedAccessExpression, Model::CallMethodExpression
true
when Model::LiteralInteger
o.radix == 10
else
false
end
end
|
#lambda=(lambda) ⇒ Object
442
443
444
445
|
# File 'lib/puppet/pops/model/factory.rb', line 442
def lambda=(lambda)
current.lambda = lambda.current
self
end
|
Returns with location information.
384
|
# File 'lib/puppet/pops/model/factory.rb', line 384
def minus(); f_build_unary(Model::UnaryMinusExpression, self); end
|
#minus_set(r) ⇒ Object
458
459
460
|
# File 'lib/puppet/pops/model/factory.rb', line 458
def minus_set(r)
f_build_binary_op(Model::AssignmentExpression, :'-=', current, r)
end
|
424
|
# File 'lib/puppet/pops/model/factory.rb', line 424
def mne r; f_match(:'!~', r); end
|
#name_is_statement(name) ⇒ Object
Returns true if the given name is a “statement keyword” (require, include, contain, error, notice, info, debug
784
785
786
|
# File 'lib/puppet/pops/model/factory.rb', line 784
def name_is_statement(name)
STATEMENT_CALLS[name]
end
|
420
|
# File 'lib/puppet/pops/model/factory.rb', line 420
def ne r; f_comparison(:'!=', r); end
|
382
|
# File 'lib/puppet/pops/model/factory.rb', line 382
def not(); f_build_unary(Model::NotExpression, self); end
|
378
|
# File 'lib/puppet/pops/model/factory.rb', line 378
def or(r) f_build_binary(Model::OrExpression, current, r); end
|
426
|
# File 'lib/puppet/pops/model/factory.rb', line 426
def paren(); f_build_unary(Model::ParenthesizedExpression, current); end
|
#plus_set(r) ⇒ Object
453
454
455
|
# File 'lib/puppet/pops/model/factory.rb', line 453
def plus_set(r)
f_build_binary_op(Model::AssignmentExpression, :'+=', current, r)
end
|
#record_position(start_locatable, end_locatable) ⇒ Object
Records the position (start -> end) and computes the resulting length.
486
487
488
489
490
491
492
493
494
495
|
# File 'lib/puppet/pops/model/factory.rb', line 486
def record_position(start_locatable, end_locatable)
from = start_locatable.is_a?(Puppet::Pops::Model::Factory) ? start_locatable.current : start_locatable
to = end_locatable.is_a?(Puppet::Pops::Model::Factory) ? end_locatable.current : end_locatable
to = from if to.nil? || to.offset.nil?
o = current
o.offset = from.offset
o.length ||= to.offset - from.offset + to.length
self
end
|
#relop(op, r) ⇒ Object
428
429
430
|
# File 'lib/puppet/pops/model/factory.rb', line 428
def relop op, r
f_build_binary_op(Model::RelationshipExpression, op.to_sym, current, r)
end
|
#respond_to?(meth, include_all = false) ⇒ Boolean
476
477
478
|
# File 'lib/puppet/pops/model/factory.rb', line 476
def respond_to?(meth, include_all=false)
current.respond_to?(meth, include_all) || super
end
|
#select(*args) ⇒ Object
432
433
434
|
# File 'lib/puppet/pops/model/factory.rb', line 432
def select *args
Puppet::Pops::Model::Factory.new(build(Model::SelectorExpression, current, *args))
end
|
448
449
450
|
# File 'lib/puppet/pops/model/factory.rb', line 448
def set(r)
f_build_binary_op(Model::AssignmentExpression, :'=', current, r)
end
|
388
|
# File 'lib/puppet/pops/model/factory.rb', line 388
def text(); f_build_unary(Model::TextExpression, self); end
|
#to_ops(o, *args) ⇒ Object
Checks if the object is already a model object, or build it
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
|
# File 'lib/puppet/pops/model/factory.rb', line 1027
def to_ops(o, *args)
case o
when Model::PopsObject
o
when Puppet::Pops::Model::Factory
o.current
else
build(o, *args)
end
end
|
#type_expr(o) ⇒ Object
Set Expression that should evaluate to the parameter’s type
595
596
597
|
# File 'lib/puppet/pops/model/factory.rb', line 595
def type_expr(o)
current.type_expr = to_ops(o)
end
|
386
|
# File 'lib/puppet/pops/model/factory.rb', line 386
def unfold(); f_build_unary(Model::UnfoldExpression, self); end
|
390
|
# File 'lib/puppet/pops/model/factory.rb', line 390
def var(); f_build_unary(Model::VariableExpression, self); end
|