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