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