class Puppet::Pops::Serialization::JSON::Unpacker

Public Class Methods

new(io) click to toggle source
    # File lib/puppet/pops/serialization/json.rb
244 def initialize(io)
245   re_initialize(io)
246   @type_registry = {}
247   @nested = []
248 end

Public Instance Methods

re_initialize(io) click to toggle source
    # File lib/puppet/pops/serialization/json.rb
250 def re_initialize(io)
251   parsed = parse_io(io)
252   raise SerializationError, _("JSON stream is not an array. It is a %{klass}") % { klass: io.class.name } unless parsed.is_a?(Array)
253   @etor_stack = [parsed.each]
254 end
read() click to toggle source
    # File lib/puppet/pops/serialization/json.rb
256 def read
257   obj = nil
258   loop do
259     raise SerializationError, _('Unexpected end of input') if @etor_stack.empty?
260     etor = @etor_stack.last
261     begin
262       obj = etor.next
263       break
264     rescue StopIteration
265       @etor_stack.pop
266     end
267   end
268   if obj.is_a?(Array)
269     ext_etor = obj.each
270     @etor_stack << ext_etor
271     ext_no = ext_etor.next
272     ext_block = @type_registry[ext_no]
273     raise SerializationError, _("Invalid input. %{ext_no} is not a valid extension number") % { ext_no: ext_no } if ext_block.nil?
274     obj = ext_block.call(nil)
275   end
276   obj
277 end
register_type(extension_number, &block) click to toggle source
    # File lib/puppet/pops/serialization/json.rb
279 def register_type(extension_number, &block)
280   @type_registry[extension_number] = block
281 end

Private Instance Methods

parse_io(io) click to toggle source
    # File lib/puppet/pops/serialization/json.rb
285 def parse_io(io)
286   case io
287   when IO, StringIO
288     ::Puppet::Util::Json.load(io.read)
289   when String
290     ::Puppet::Util::Json.load(io)
291   else
292     io
293   end
294 end