class SublimeDSL::SublimeText::Package::Exporter

An export operation with its options.

Attributes

backup[RW]
cleanup[RW]
package[R]
root[RW]

Public Class Methods

new(package = nil) click to toggle source
# File lib/sublime_dsl/sublime_text/package/exporter.rb, line 15
def initialize(package = nil)
  @package = package
  @root = SublimeText.packages_dir
  @backup = :always
  @cleanup = false
end

Public Instance Methods

copy_file(infile, outdir) click to toggle source
# File lib/sublime_dsl/sublime_text/package/exporter.rb, line 122
def copy_file(infile, outdir)
  if File.directory?(infile)
    outpath = "#{outdir}/#{File.basename(infile)}"
    Dir.mkdir outpath unless File.directory?(outpath)
    Dir["#{infile}/*"].each { |f| copy_file f, outpath }
  else
    # Console.progress ...
    FileUtils.cp infile, outdir
  end
end
copy_package(from, to) click to toggle source
# File lib/sublime_dsl/sublime_text/package/exporter.rb, line 79
def copy_package(from, to)

  # remember the files originally there
  if File.directory?(to)
    old_files = Dir["#{to}/**/*"]
  else
    Dir.mkdir to
    old_files = []
  end

  # copy from the temporary directory
  new_files = []
  Dir["#{from}/**/*"].each do |fromfile|
    tofile = fromfile.dup
    tofile[from] = to
    new_files << tofile
    if File.directory?(fromfile)
      Dir.mkdir tofile unless File.directory?(tofile)
    else
      FileUtils.cp fromfile, tofile
    end
  end

  return unless cleanup

  # on Windows, do not delete files that had just case changes
  if Tools.os == :Windows
    old_files = old_files.map(&:downcase)
    new_files = new_files.map(&:downcase)
  end

  # delete files/directories that disappeared
  (old_files - new_files).each do |f|
    next unless File.exist?(f)  # removing directories also remove files
    if File.directory?(f)
      FileUtils.rm_r [f]
    else
      FileUtils.rm f
    end
  end

end
dir() click to toggle source
# File lib/sublime_dsl/sublime_text/package/exporter.rb, line 34
def dir
  "#{root}/#{@package.name}"
end
export(package = nil) click to toggle source
# File lib/sublime_dsl/sublime_text/package/exporter.rb, line 22
def export(package = nil)
  @package = package if package
  validate
  perform_backup
  Console.info "exporting package to #{dir}"
  Dir.mktmpdir('sublime_dsl_') do |tmpdir|
    tmpdir = tmpdir.encode('utf-8') # for ruby 2.0
    export_package tmpdir
    copy_package tmpdir, dir
  end
end
export_package(dir) click to toggle source
# File lib/sublime_dsl/sublime_text/package/exporter.rb, line 64
def export_package(dir)
  p = package
  p.themes.each { |t| t.export dir }
  p.grammars.each { |g| g.export dir }
  p.preferences.each { |pr| pr.export dir }
  p.snippets.each { |s| s.export dir }
  p.setting_sets.each { |s| s.export dir }
  p.macros.each { |m| m.export dir }
  p.command_sets.each { |c| c.export dir }
  p.menus.each { |m| m.export dir }
  p.mousemaps.each { |m| m.export dir }
  p.keymaps.each { |k| k.export dir }
  p.other_files.each { |f| copy_file f, dir }
end
keyboard=(name) click to toggle source
# File lib/sublime_dsl/sublime_text/package/exporter.rb, line 38
def keyboard=(name)
  @keyboard_name = name
end
perform_backup() click to toggle source
# File lib/sublime_dsl/sublime_text/package/exporter.rb, line 51
def perform_backup
  # no backup needed if not asked or no file to backup
  return unless backup != :never && Dir["#{dir}/*"].length > 0
  # don't do it if only one backup is requested, and there is already one
  name = Tools.filename(package.name)
  return if backup == :once && Dir["#{root}/#{name}.*.zip"].length > 0
  # backup
  time_stamp = Tools.filename(Time.now.strftime("%Y-%m-%d %H:%M:%S"))
  backup_file = "#{root}/#{name}.#{time_stamp}.zip"
  Tools.zip dir, backup_file
  Console.info "#{dir} backed up as #{backup_file}"
end
validate() click to toggle source
# File lib/sublime_dsl/sublime_text/package/exporter.rb, line 42
def validate
  File.directory?(root) or raise OptionError, "no such directory: #{root}"
  @backup = backup.to_sym
  unless [:never, :always, :once].include?(backup)
    warn "invalid backup option #{backup.inspect}, 'always' assumed"
    @backup = :always
  end
end