class FirefoxZip::Files::Project

Constants

MANIFEST_FILE_NAME

Attributes

icon[R]
icons[R]
manifest_data[R]
size[R]

Public Class Methods

new(zip_file_path) click to toggle source
# File lib/firefox_zip/files/project.rb, line 10
def initialize(zip_file_path)
  return raise 'not zip file' unless File.exists? zip_file_path

  @zip_file_path = zip_file_path
  @size = File.size(@zip_file_path)

  Dir.mktmpdir do |dir|
    make_zip_files(@zip_file_path, dir)
    
    manifest_file = get_manifest_file(dir)
    @manifest_data = FirefoxZip::Parses::Manifest.new(manifest_file.read)
    manifest_file.close
    @icons = get_icons_file(@manifest_data, dir)
    @icon = get_icon_file(@manifest_data, dir)
  end
end

Private Instance Methods

dir?(entry_name) click to toggle source
# File lib/firefox_zip/files/project.rb, line 47
def dir?(entry_name)
  entry_name.match(/.+\/$/) != nil
end
get_file(dir, target_file_name) click to toggle source
# File lib/firefox_zip/files/project.rb, line 77
def get_file(dir, target_file_name)
  File.open("#{dir}/#{target_file_name}", 'r')
end
get_icon_file(manifest_data, dir) click to toggle source
# File lib/firefox_zip/files/project.rb, line 55
def get_icon_file(manifest_data, dir)
  get_file(dir, manifest_data.icon)
end
get_icons_file(manifest_data, dir) click to toggle source
# File lib/firefox_zip/files/project.rb, line 59
def get_icons_file(manifest_data, dir)
  icons = manifest_data.icons
  
  icons_file = []
  icons.each do |icon|
    icon_size = icon[0]
    icon_file_name = icon[1]
    icon_file_name.slice!(0) # 先頭の/を削除

    icons_file.push({
                        :size => icon_size,
                        :file => get_file(dir, icon_file_name)
                    })
  end
  
  icons_file
end
get_manifest_file(dir) click to toggle source
# File lib/firefox_zip/files/project.rb, line 51
def get_manifest_file(dir)
  File.open("#{dir}/#{MANIFEST_FILE_NAME}", 'r')
end
make_zip_files(file_path, dir) click to toggle source
# File lib/firefox_zip/files/project.rb, line 29
def make_zip_files(file_path, dir)
  Zip::File.open(file_path) do |zip_file|
    zip_file.each do |entry|
      path = "#{dir}/#{entry.name}"

      # dir 作成
      if dir?(path) && !File.exists?(path)
        FileUtils.mkdir_p(path)
        next
      end

      file = File.open(path, 'w')
      file.write(entry.get_input_stream.read)
      file.close
    end
  end
end