class Puppet::Pops::Evaluator::CollectorTransformer
Public Class Methods
new()
click to toggle source
# File lib/puppet/pops/evaluator/collector_transformer.rb 5 def initialize 6 @@query_visitor ||= Visitor.new(nil, "query", 1, 1) 7 @@match_visitor ||= Visitor.new(nil, "match", 1, 1) 8 @@evaluator ||= EvaluatorImpl.new 9 @@compare_operator ||= CompareOperator.new() 10 end
Public Instance Methods
transform(o, scope)
click to toggle source
# File lib/puppet/pops/evaluator/collector_transformer.rb 12 def transform(o, scope) 13 #TRANSLATORS 'CollectExpression' is a class name and should not be translated 14 raise ArgumentError, _("Expected CollectExpression") unless o.is_a? Model::CollectExpression 15 16 raise "LHS is not a type" unless o.type_expr.is_a? Model::QualifiedReference 17 type = o.type_expr.value().downcase() 18 19 if type == 'class' 20 fail "Classes cannot be collected" 21 end 22 23 resource_type = Runtime3ResourceSupport.find_resource_type(scope, type) 24 25 fail "Resource type #{type} doesn't exist" unless resource_type 26 27 if !o.operations.empty? 28 overrides = { 29 :parameters => o.operations.map{ |x| @@evaluator.evaluate(x, scope)}.flatten, 30 :file => o.file, 31 :line => o.line, 32 :source => scope.source, 33 :scope => scope 34 } 35 end 36 37 code = query_unless_nop(o.query, scope) 38 39 case o.query 40 when Model::VirtualQuery 41 newcoll = Collectors::CatalogCollector.new(scope, resource_type, code, overrides) 42 when Model::ExportedQuery 43 match = match_unless_nop(o.query, scope) 44 newcoll = Collectors::ExportedCollector.new(scope, resource_type, match, code, overrides) 45 end 46 47 scope.compiler.add_collection(newcoll) 48 49 newcoll 50 end
Protected Instance Methods
match(o, scope)
click to toggle source
# File lib/puppet/pops/evaluator/collector_transformer.rb 58 def match(o, scope) 59 @@match_visitor.visit_this_1(self, o, scope) 60 end
match_AccessExpression(o, scope)
click to toggle source
# File lib/puppet/pops/evaluator/collector_transformer.rb 171 def match_AccessExpression(o, scope) 172 pops_object = @@evaluator.evaluate(o, scope) 173 174 # Convert to Puppet 3 style objects since that is how they are represented 175 # in the catalog. 176 @@evaluator.convert(pops_object, scope, nil) 177 end
match_AndExpression(o, scope)
click to toggle source
# File lib/puppet/pops/evaluator/collector_transformer.rb 179 def match_AndExpression(o, scope) 180 left_match = match(o.left_expr, scope) 181 right_match = match(o.right_expr, scope) 182 return [left_match, 'and', right_match] 183 end
match_ComparisonExpression(o, scope)
click to toggle source
# File lib/puppet/pops/evaluator/collector_transformer.rb 191 def match_ComparisonExpression(o, scope) 192 left_match = match(o.left_expr, scope) 193 right_match = match(o.right_expr, scope) 194 return [left_match, o.operator.to_s, right_match] 195 end
match_ConcatenatedString(o, scope)
click to toggle source
# File lib/puppet/pops/evaluator/collector_transformer.rb 213 def match_ConcatenatedString(o, scope) 214 @@evaluator.evaluate(o, scope) 215 end
match_LiteralBoolean(o, scope)
click to toggle source
# File lib/puppet/pops/evaluator/collector_transformer.rb 201 def match_LiteralBoolean(o, scope) 202 @@evaluator.evaluate(o, scope) 203 end
match_LiteralNumber(o, scope)
click to toggle source
# File lib/puppet/pops/evaluator/collector_transformer.rb 217 def match_LiteralNumber(o, scope) 218 @@evaluator.evaluate(o, scope) 219 end
match_LiteralString(o, scope)
click to toggle source
# File lib/puppet/pops/evaluator/collector_transformer.rb 205 def match_LiteralString(o, scope) 206 @@evaluator.evaluate(o, scope) 207 end
match_LiteralUndef(o, scope)
click to toggle source
# File lib/puppet/pops/evaluator/collector_transformer.rb 209 def match_LiteralUndef(o, scope) 210 nil 211 end
match_Object(o, scope)
click to toggle source
# File lib/puppet/pops/evaluator/collector_transformer.rb 229 def match_Object(o, scope) 230 raise ArgumentError, _("Cannot transform object of class %{klass}") % { klass: o.class } 231 end
match_OrExpression(o, scope)
click to toggle source
# File lib/puppet/pops/evaluator/collector_transformer.rb 185 def match_OrExpression(o, scope) 186 left_match = match(o.left_expr, scope) 187 right_match = match(o.right_expr, scope) 188 return [left_match, 'or', right_match] 189 end
match_ParenthesizedExpression(o, scope)
click to toggle source
# File lib/puppet/pops/evaluator/collector_transformer.rb 225 def match_ParenthesizedExpression(o, scope) 226 match(o.expr, scope) 227 end
match_QualifiedName(o, scope)
click to toggle source
# File lib/puppet/pops/evaluator/collector_transformer.rb 221 def match_QualifiedName(o, scope) 222 @@evaluator.evaluate(o, scope) 223 end
match_VariableExpression(o, scope)
click to toggle source
# File lib/puppet/pops/evaluator/collector_transformer.rb 197 def match_VariableExpression(o, scope) 198 @@evaluator.evaluate(o, scope) 199 end
match_unless_nop(query, scope)
click to toggle source
# File lib/puppet/pops/evaluator/collector_transformer.rb 68 def match_unless_nop(query, scope) 69 unless query.expr.nil? || query.expr.is_a?(Model::Nop) 70 match(query.expr, scope) 71 end 72 end
query(o, scope)
click to toggle source
# File lib/puppet/pops/evaluator/collector_transformer.rb 54 def query(o, scope) 55 @@query_visitor.visit_this_1(self, o, scope) 56 end
query_AccessExpression(o, scope)
click to toggle source
# File lib/puppet/pops/evaluator/collector_transformer.rb 127 def query_AccessExpression(o, scope) 128 pops_object = @@evaluator.evaluate(o, scope) 129 130 # Convert to Puppet 3 style objects since that is how they are represented 131 # in the catalog. 132 @@evaluator.convert(pops_object, scope, nil) 133 end
query_AndExpression(o, scope)
click to toggle source
# File lib/puppet/pops/evaluator/collector_transformer.rb 74 def query_AndExpression(o, scope) 75 left_code = query(o.left_expr, scope) 76 right_code = query(o.right_expr, scope) 77 proc do |resource| 78 left_code.call(resource) && right_code.call(resource) 79 end 80 end
query_ComparisonExpression(o, scope)
click to toggle source
# File lib/puppet/pops/evaluator/collector_transformer.rb 90 def query_ComparisonExpression(o, scope) 91 left_code = query(o.left_expr, scope) 92 right_code = query(o.right_expr, scope) 93 94 case o.operator 95 when '==' 96 if left_code == "tag" 97 # Ensure that to_s and downcase is done once, i.e. outside the proc block and 98 # then use raw_tagged? instead of tagged? 99 if right_code.is_a?(Array) 100 tags = right_code 101 else 102 tags = [ right_code ] 103 end 104 tags = tags.collect do |t| 105 raise ArgumentError, _('Cannot transform a number to a tag') if t.is_a?(Numeric) 106 t.to_s.downcase 107 end 108 proc do |resource| 109 resource.raw_tagged?(tags) 110 end 111 else 112 proc do |resource| 113 if (tmp = resource[left_code]).is_a?(Array) 114 @@compare_operator.include?(tmp, right_code, scope) 115 else 116 @@compare_operator.equals(tmp, right_code) 117 end 118 end 119 end 120 when '!=' 121 proc do |resource| 122 !@@compare_operator.equals(resource[left_code], right_code) 123 end 124 end 125 end
query_ConcatenatedString(o, scope)
click to toggle source
# File lib/puppet/pops/evaluator/collector_transformer.rb 147 def query_ConcatenatedString(o, scope) 148 @@evaluator.evaluate(o, scope) 149 end
query_LiteralBoolean(o, scope)
click to toggle source
# File lib/puppet/pops/evaluator/collector_transformer.rb 139 def query_LiteralBoolean(o, scope) 140 @@evaluator.evaluate(o, scope) 141 end
query_LiteralNumber(o, scope)
click to toggle source
# File lib/puppet/pops/evaluator/collector_transformer.rb 151 def query_LiteralNumber(o, scope) 152 @@evaluator.evaluate(o, scope) 153 end
query_LiteralString(o, scope)
click to toggle source
# File lib/puppet/pops/evaluator/collector_transformer.rb 143 def query_LiteralString(o, scope) 144 @@evaluator.evaluate(o, scope) 145 end
query_LiteralUndef(o, scope)
click to toggle source
# File lib/puppet/pops/evaluator/collector_transformer.rb 155 def query_LiteralUndef(o, scope) 156 nil 157 end
query_Object(o, scope)
click to toggle source
# File lib/puppet/pops/evaluator/collector_transformer.rb 167 def query_Object(o, scope) 168 raise ArgumentError, _("Cannot transform object of class %{klass}") % { klass: o.class } 169 end
query_OrExpression(o, scope)
click to toggle source
# File lib/puppet/pops/evaluator/collector_transformer.rb 82 def query_OrExpression(o, scope) 83 left_code = query(o.left_expr, scope) 84 right_code = query(o.right_expr, scope) 85 proc do |resource| 86 left_code.call(resource) || right_code.call(resource) 87 end 88 end
query_ParenthesizedExpression(o, scope)
click to toggle source
# File lib/puppet/pops/evaluator/collector_transformer.rb 163 def query_ParenthesizedExpression(o, scope) 164 query(o.expr, scope) 165 end
query_QualifiedName(o, scope)
click to toggle source
# File lib/puppet/pops/evaluator/collector_transformer.rb 159 def query_QualifiedName(o, scope) 160 @@evaluator.evaluate(o, scope) 161 end
query_VariableExpression(o, scope)
click to toggle source
# File lib/puppet/pops/evaluator/collector_transformer.rb 135 def query_VariableExpression(o, scope) 136 @@evaluator.evaluate(o, scope) 137 end
query_unless_nop(query, scope)
click to toggle source
# File lib/puppet/pops/evaluator/collector_transformer.rb 62 def query_unless_nop(query, scope) 63 unless query.expr.nil? || query.expr.is_a?(Model::Nop) 64 query(query.expr, scope) 65 end 66 end