Sha256: 96b0565964dfac8626e0930b80509c697a2b614a761ac2a17ecb2dcd370eeeda

Contents?: true

Size: 1.49 KB

Versions: 2

Compression:

Stored size: 1.49 KB

Contents

# frozen_string_literal: true

require "binary_plist/trailer"
require "binary_plist/parser/offset_table"

require "binary_plist/parser/object_readers/base"
require "binary_plist/parser/object_readers/array"
require "binary_plist/parser/object_readers/ascii_string"
require "binary_plist/parser/object_readers/int"
require "binary_plist/parser/object_readers/null"
require "binary_plist/parser/object_readers/utf16_string"

module BinaryPList
  module Parser
    class BPList00 < ObjectReaders::Base
      class << self
        def readers
          @readers ||= [
            ObjectReaders::ASCIIString,
            ObjectReaders::Array,
            ObjectReaders::Int,
            ObjectReaders::Null,
            ObjectReaders::UTF16String,
          ]
        end
      end

      MAGIC = "bplist00"
      NotBPList00 = Class.new(StandardError)

      def initialize(io)
        io = StringIO.new(io) if io.is_a? String
        raise NotBPList00 unless io.read(MAGIC.length).eql? MAGIC

        @io = io
        super(self.class, io, nil, nil)
      end

      def parse
        object(trailer.top_object)
      end

      private

      def offset_table
        @offset_table ||= OffsetTable.new(@io,
                                          trailer.offset_table_offset,
                                          trailer.offset_int_size)
      end

      def trailer
        @trailer ||=
          begin
            @io.seek(-32, File::SEEK_END)
            Trailer.load(io)
          end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
binary_plist-parser-0.1.1 lib/binary_plist/parser/bplist00.rb
binary_plist-parser-0.1.0 lib/binary_plist/parser/bplist00.rb