class Puppet::Pops::Serialization::JSON::Unpacker
Public Class Methods
new(io)
click to toggle source
# File lib/puppet/pops/serialization/json.rb 243 def initialize(io) 244 re_initialize(io) 245 @type_registry = {} 246 @nested = [] 247 end
Public Instance Methods
re_initialize(io)
click to toggle source
# File lib/puppet/pops/serialization/json.rb 249 def re_initialize(io) 250 parsed = parse_io(io) 251 raise SerializationError, _("JSON stream is not an array. It is a %{klass}") % { klass: io.class.name } unless parsed.is_a?(Array) 252 @etor_stack = [parsed.each] 253 end
read()
click to toggle source
# File lib/puppet/pops/serialization/json.rb 255 def read 256 obj = nil 257 loop do 258 raise SerializationError, _('Unexpected end of input') if @etor_stack.empty? 259 etor = @etor_stack.last 260 begin 261 obj = etor.next 262 break 263 rescue StopIteration 264 @etor_stack.pop 265 end 266 end 267 if obj.is_a?(Array) 268 ext_etor = obj.each 269 @etor_stack << ext_etor 270 ext_no = ext_etor.next 271 ext_block = @type_registry[ext_no] 272 raise SerializationError, _("Invalid input. %{ext_no} is not a valid extension number") % { ext_no: ext_no } if ext_block.nil? 273 obj = ext_block.call(nil) 274 end 275 obj 276 end
register_type(extension_number, &block)
click to toggle source
# File lib/puppet/pops/serialization/json.rb 278 def register_type(extension_number, &block) 279 @type_registry[extension_number] = block 280 end
Private Instance Methods
parse_io(io)
click to toggle source
# File lib/puppet/pops/serialization/json.rb 284 def parse_io(io) 285 case io 286 when IO, StringIO 287 ::Puppet::Util::Json.load(io.read) 288 when String 289 ::Puppet::Util::Json.load(io) 290 else 291 io 292 end 293 end