Class: Puppet::Pops::Binder::BindingsModelDumper

Inherits:
Model::TreeDumper show all
Defined in:
lib/puppet/pops/binder/bindings_model_dumper.rb

Overview

Dumps a Pops::Binder::Bindings model in reverse polish notation; i.e. LISP style The intention is to use this for debugging output TODO: BAD NAME - A DUMP is a Ruby Serialization NOTE: use :break, :indent, :dedent in lists to do just that

Constant Summary collapse

Bindings =
Puppet::Pops::Binder::Bindings

Instance Attribute Summary collapse

Attributes inherited from Model::TreeDumper

#indent_count

Instance Method Summary collapse

Methods inherited from Model::TreeDumper

#do_dump, #dump, #format, #format_r, #indent

Constructor Details

#initializeBindingsModelDumper

Returns a new instance of BindingsModelDumper.



13
14
15
16
17
# File 'lib/puppet/pops/binder/bindings_model_dumper.rb', line 13

def initialize
  super
  @type_calculator = Puppet::Pops::Types::TypeCalculator.new()
  @expression_dumper = Puppet::Pops::Model::ModelTreeDumper.new()
end

Instance Attribute Details

#expression_dumperObject (readonly)



11
12
13
# File 'lib/puppet/pops/binder/bindings_model_dumper.rb', line 11

def expression_dumper
  @expression_dumper
end

#type_calculatorObject (readonly)



10
11
12
# File 'lib/puppet/pops/binder/bindings_model_dumper.rb', line 10

def type_calculator
  @type_calculator
end

Instance Method Details

#dump_Array(o) ⇒ Object



64
65
66
# File 'lib/puppet/pops/binder/bindings_model_dumper.rb', line 64

def dump_Array o
  o.collect {|e| do_dump(e) }
end

#dump_ArrayMultibindProducerDescriptor(o) ⇒ Object



150
151
152
# File 'lib/puppet/pops/binder/bindings_model_dumper.rb', line 150

def dump_ArrayMultibindProducerDescriptor o
  ['multibind-array']
end

#dump_Binding(o) ⇒ Object



162
163
164
165
166
167
168
169
170
171
172
173
# File 'lib/puppet/pops/binder/bindings_model_dumper.rb', line 162

def dump_Binding o
  result = ['bind', :indent]
  result << 'override' if o.override
  result << 'abstract' if o.abstract
  result.concat([do_dump(o.type), o.name])
  result << :break
  result << "(in #{o.multibind_id})" if o.multibind_id
  result << :break
  result << ['to', do_dump(o.producer)] + do_dump(o.producer_args)
  result << :dedent
  result
end

#dump_Bindings(o) ⇒ Object



188
189
190
# File 'lib/puppet/pops/binder/bindings_model_dumper.rb', line 188

def dump_Bindings o
  do_dump(o.bindings)
end

#dump_BindingsBuilder(o) ⇒ Object



23
24
25
# File 'lib/puppet/pops/binder/bindings_model_dumper.rb', line 23

def dump_BindingsBuilder o
  do_dump(o.model)
end

#dump_BindingsContainerBuilder(o) ⇒ Object



27
28
29
# File 'lib/puppet/pops/binder/bindings_model_dumper.rb', line 27

def dump_BindingsContainerBuilder o
  do_dump(o.model)
end

#dump_BindingsFactory(o) ⇒ Object



19
20
21
# File 'lib/puppet/pops/binder/bindings_model_dumper.rb', line 19

def dump_BindingsFactory o
  do_dump(o.model)
end

#dump_ConstantProducerDescriptor(o) ⇒ Object



109
110
111
# File 'lib/puppet/pops/binder/bindings_model_dumper.rb', line 109

def dump_ConstantProducerDescriptor o
  ['constant', do_dump(o.value)]
end

#dump_ContributedBindings(o) ⇒ Object



212
213
214
# File 'lib/puppet/pops/binder/bindings_model_dumper.rb', line 212

def dump_ContributedBindings o
  ['contributed', o.name, do_dump(o.bindings)]
end

#dump_EvaluatingProducerDescriptor(o) ⇒ Object



113
114
115
116
# File 'lib/puppet/pops/binder/bindings_model_dumper.rb', line 113

def dump_EvaluatingProducerDescriptor o
  result = dump_ProducerDescriptor(o)
  result << expression_dumper.dump(o.expression)
end

#dump_FirstFoundProducerDescriptor(o) ⇒ Object



145
146
147
148
# File 'lib/puppet/pops/binder/bindings_model_dumper.rb', line 145

def dump_FirstFoundProducerDescriptor o
  # TODO: transformer lambda
  ['first-found', do_dump(o.producers)]
end

#dump_Hash(o) ⇒ Object



68
69
70
71
72
73
74
75
76
# File 'lib/puppet/pops/binder/bindings_model_dumper.rb', line 68

def dump_Hash o
  result = ["hash", :indent]
  o.each do |elem|
    result << :break
    result << ["=>", :indent, do_dump(elem[0]), :break, do_dump(elem[1]), :dedent]
  end
  result << :dedent
  result
end

#dump_HashLookupProducerDescriptor(o) ⇒ Object



138
139
140
141
142
143
# File 'lib/puppet/pops/binder/bindings_model_dumper.rb', line 138

def dump_HashLookupProducerDescriptor o
  # TODO: transformer lambda
  result = ['hash-lookup', do_dump(o.type), o.name, "[#{do_dump(o.key)}]"]
  result << expression_dumper.dump(o.transformer) if o.transformer
  result
end

#dump_HashMultibindProducerDescriptor(o) ⇒ Object



154
155
156
# File 'lib/puppet/pops/binder/bindings_model_dumper.rb', line 154

def dump_HashMultibindProducerDescriptor o
  ['multibind-hash']
end

#dump_Injector(o) ⇒ Object



43
44
45
46
47
48
49
50
# File 'lib/puppet/pops/binder/bindings_model_dumper.rb', line 43

def dump_Injector o
  result = ['injector', :indent,
    :break,
    ['entries', do_dump(o.instance_variable_get('@impl').instance_variable_get('@entries'))],
    :dedent
  ]
  result
end

#dump_InjectorEntry(o) ⇒ Object



52
53
54
55
56
57
58
59
60
61
62
# File 'lib/puppet/pops/binder/bindings_model_dumper.rb', line 52

def dump_InjectorEntry o
  result = ['entry', :indent]
  result << :break
  result << ['precedence', o.precedence]
  result << :break
  result << ['binding', do_dump(o.binding)]
  result << :break
  result << ['producer', do_dump(o.cached_producer)]
  result << :dedent
  result
end

#dump_InstanceProducerDescriptor(o) ⇒ Object



118
119
120
121
# File 'lib/puppet/pops/binder/bindings_model_dumper.rb', line 118

def dump_InstanceProducerDescriptor o
  # TODO: o.arguments, o. transformer
  ['instance', o.class_name]
end

#dump_Integer(o) ⇒ Object



78
79
80
# File 'lib/puppet/pops/binder/bindings_model_dumper.rb', line 78

def dump_Integer o
  o.to_s
end

#dump_LayeredBindings(o) ⇒ Object



202
203
204
205
206
207
208
209
210
# File 'lib/puppet/pops/binder/bindings_model_dumper.rb', line 202

def dump_LayeredBindings o
  result = ['layers', :indent]
    o.layers.each do |layer|
      result << :break
      result << do_dump(layer)
    end
  result << :dedent
  result
end

#dump_LookupProducerDescriptor(o) ⇒ Object



130
131
132
# File 'lib/puppet/pops/binder/bindings_model_dumper.rb', line 130

def dump_LookupProducerDescriptor o
  ['lookup', do_dump(o.type), o.name]
end

#dump_Multibinding(o) ⇒ Object



175
176
177
178
179
180
181
182
183
184
185
186
# File 'lib/puppet/pops/binder/bindings_model_dumper.rb', line 175

def dump_Multibinding o
  result = ['multibind', o.id, :indent]
  result << 'override' if o.override
  result << 'abstract' if o.abstract
  result.concat([do_dump(o.type), o.name])
  result << :break
  result << "(in #{o.multibind_id})" if o.multibind_id
  result << :break
  result << ['to', do_dump(o.producer)] + do_dump(o.producer_args)
  result << :dedent
  result
end

#dump_NamedArgument(o) ⇒ Object



158
159
160
# File 'lib/puppet/pops/binder/bindings_model_dumper.rb', line 158

def dump_NamedArgument o
  "#{o.name} => #{do_dump(o.value)}"
end

#dump_NamedBindings(o) ⇒ Object



192
193
194
195
196
197
198
199
200
# File 'lib/puppet/pops/binder/bindings_model_dumper.rb', line 192

def dump_NamedBindings o
  result = ['named-bindings', o.name, :indent]
  o.bindings.each do |b|
    result << :break
    result << do_dump(b)
  end
  result << :dedent
  result
end

#dump_NamedLayer(o) ⇒ Object



31
32
33
34
35
36
37
38
39
40
41
# File 'lib/puppet/pops/binder/bindings_model_dumper.rb', line 31

def dump_NamedLayer o
  result = ['named-layer', (o.name.nil? ? '<no-name>': o.name), :indent]
  if o.bindings
    o.bindings.each do |b|
      result << :break
      result << do_dump(b)
    end
  end
  result << :dedent
  result
end

#dump_NilClass(o) ⇒ Object



87
88
89
# File 'lib/puppet/pops/binder/bindings_model_dumper.rb', line 87

def dump_NilClass o
  "()"
end

#dump_NonCachingProducerDescriptor(o) ⇒ Object



105
106
107
# File 'lib/puppet/pops/binder/bindings_model_dumper.rb', line 105

def dump_NonCachingProducerDescriptor o
  dump_ProducerDescriptor(o) + do_dump(o.producer)
end

#dump_Object(o) ⇒ Object



91
92
93
# File 'lib/puppet/pops/binder/bindings_model_dumper.rb', line 91

def dump_Object o
  ['dev-error-no-polymorph-dump-for:', o.class.to_s, o.to_s]
end

#dump_PAnyType(o) ⇒ Object



134
135
136
# File 'lib/puppet/pops/binder/bindings_model_dumper.rb', line 134

def dump_PAnyType o
  type_calculator.string(o)
end

#dump_ProducerDescriptor(o) ⇒ Object



99
100
101
102
103
# File 'lib/puppet/pops/binder/bindings_model_dumper.rb', line 99

def dump_ProducerDescriptor o
   result = [o.class.name]
   result << expression_dumper.dump(o.transformer) if o.transformer
   result
end

#dump_ProducerProducerDescriptor(o) ⇒ Object



123
124
125
126
127
128
# File 'lib/puppet/pops/binder/bindings_model_dumper.rb', line 123

def dump_ProducerProducerDescriptor o
  # skip the transformer lambda...
  result = ['producer-producer', do_dump(o.producer)]
  result << expression_dumper.dump(o.transformer) if o.transformer
  result
end

#dump_String(o) ⇒ Object

Dump a Ruby String in single quotes unless it is a number.



83
84
85
# File 'lib/puppet/pops/binder/bindings_model_dumper.rb', line 83

def dump_String o
  "'#{o}'"
end

#is_nop?(o) ⇒ Boolean

Returns:

  • (Boolean)


95
96
97
# File 'lib/puppet/pops/binder/bindings_model_dumper.rb', line 95

def is_nop? o
  o.nil? || o.is_a?(Model::Nop) || o.is_a?(AST::Nop)
end