Sha256: bdbf58d333edc01d6472fceea39f531eb538b8718b172b57c51ecd3c388a68c0

Contents?: true

Size: 1.84 KB

Versions: 1

Compression:

Stored size: 1.84 KB

Contents

module Rapinoe
  class Keynote
    # The path where we can find the .key file.
    attr_accessor :path

    # The name of the file.
    attr_accessor :name

    # The (first stage) of uncompressed Keynote data in memory.
    attr_accessor :data

    # Create a new Keynote instance.
    #
    #   path - The path to the .key file on disk.
    #
    # Returns a Keynote.
    def initialize(path)
      @path = path
      @name = File.basename(path, ".key")
      extract_key_file
    end

    # Returns the file size of the Keynote file in bytes.
    def size
      File.size(path)
    end

    def slides
      @data.glob("Data/st*").map do |preview_jpg_data|
        Slide.new(preview_jpg_data.get_input_stream.read)
      end
    end

    # The binary data associated with the .jpg Keynote writes to make a
    # high(ish) quality preview version of the deck. You likely will want to
    # access this via #write_preview_to_file, unless you have specific needs for
    # the binary data.
    #
    # Returns the contents of preview.jpg.
    def preview_data
      @data.find_entry("preview.jpg").get_input_stream.read
    end

    # Writes Keynote's preview.jpg to disk somewhere.
    #
    #   path - The path to the new file you want to write.
    #
    # Returns nothing.
    def write_preview_to_file(path)
      FileUtils.mkdir_p(File.dirname(path))
      File.open(path, 'wb') do |out|
        out.write(preview_data)
      end
    end

    def inspect
      "<Rapinoe::Keynote: @name=\"#{@name}\", @path=\"#{@path}\", @data=[…]>"
    end

  private

    # .key files basically just try to masquerade as .zip files. Once we extract
    # the main directory structure (in memory), we can start looking into what's
    # inside.
    #
    # Returns a complex data structure that maps to Zip::File.
    def extract_key_file
      @data = Zip::File.open(path)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rapinoe-0.0.2 lib/rapinoe/keynote.rb