Class: SublimeDSL::SublimeText::Package::Writer
- Inherits:
-
Object
- Object
- SublimeDSL::SublimeText::Package::Writer
- Defined in:
- lib/sublime_dsl/sublime_text/package/writer.rb
Overview
A DSL writing operation with its options.
Instance Attribute Summary collapse
-
#backup ⇒ Object
Returns the value of attribute backup.
-
#copy_other_files ⇒ Object
Returns the value of attribute copy_other_files.
-
#package ⇒ Object
readonly
Returns the value of attribute package.
-
#root ⇒ Object
Returns the value of attribute root.
Instance Method Summary collapse
- #copy_file(infile, outdir) ⇒ Object
- #dir ⇒ Object
-
#initialize(package = nil) ⇒ Writer
constructor
A new instance of Writer.
- #keyboard ⇒ Object
- #keyboard=(name) ⇒ Object
- #perform_backup ⇒ Object
- #validate ⇒ Object
- #write(package = nil) ⇒ Object
- #write_all(collection, file) ⇒ Object
- #write_package ⇒ Object
Constructor Details
#initialize(package = nil) ⇒ Writer
Returns a new instance of Writer.
15 16 17 18 19 20 21 |
# File 'lib/sublime_dsl/sublime_text/package/writer.rb', line 15 def initialize(package = nil) @package = package @root = '.' @backup = :once @copy_other_files = true @keyboard_name = nil end |
Instance Attribute Details
#backup ⇒ Object
Returns the value of attribute backup.
13 14 15 |
# File 'lib/sublime_dsl/sublime_text/package/writer.rb', line 13 def backup @backup end |
#copy_other_files ⇒ Object
Returns the value of attribute copy_other_files.
13 14 15 |
# File 'lib/sublime_dsl/sublime_text/package/writer.rb', line 13 def copy_other_files @copy_other_files end |
#package ⇒ Object (readonly)
Returns the value of attribute package.
12 13 14 |
# File 'lib/sublime_dsl/sublime_text/package/writer.rb', line 12 def package @package end |
#root ⇒ Object
Returns the value of attribute root.
13 14 15 |
# File 'lib/sublime_dsl/sublime_text/package/writer.rb', line 13 def root @root end |
Instance Method Details
#copy_file(infile, outdir) ⇒ Object
89 90 91 92 93 94 95 96 97 98 |
# File 'lib/sublime_dsl/sublime_text/package/writer.rb', line 89 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 |
#dir ⇒ Object
32 33 34 |
# File 'lib/sublime_dsl/sublime_text/package/writer.rb', line 32 def dir "#{root}/#{@package.name}" end |
#keyboard ⇒ Object
40 41 42 43 44 45 46 47 |
# File 'lib/sublime_dsl/sublime_text/package/writer.rb', line 40 def keyboard @keyboard ||= if @keyboard_name.nil? || @keyboard_name == Keyboard.sublime.name Keyboard.sublime else Keyboard.get(@keyboard_name, root) end end |
#keyboard=(name) ⇒ Object
36 37 38 |
# File 'lib/sublime_dsl/sublime_text/package/writer.rb', line 36 def keyboard=(name) @keyboard_name = name end |
#perform_backup ⇒ Object
59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/sublime_dsl/sublime_text/package/writer.rb', line 59 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 ⇒ Object
49 50 51 52 53 54 55 56 57 |
# File 'lib/sublime_dsl/sublime_text/package/writer.rb', line 49 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 keyboard end |
#write(package = nil) ⇒ Object
23 24 25 26 27 28 29 30 |
# File 'lib/sublime_dsl/sublime_text/package/writer.rb', line 23 def write(package = nil) @package = package if package validate perform_backup FileUtils.rm_r Dir["#{dir}/*"] if File.directory?(dir) Console.info "writing package DSL to #{dir}" write_package end |
#write_all(collection, file) ⇒ Object
100 101 102 103 104 105 106 |
# File 'lib/sublime_dsl/sublime_text/package/writer.rb', line 100 def write_all(collection, file) return if collection.empty? File.open(file, 'wb:utf-8') do |f| f.puts '# encoding: utf-8' collection.each { |e| f.puts "\n#{e.to_dsl}" } end end |
#write_package ⇒ Object
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/sublime_dsl/sublime_text/package/writer.rb', line 72 def write_package Dir.mkdir dir unless File.directory?(dir) p = package p.themes.each { |t| t.write dir } p.grammars.each { |g| g.write dir } write_all p.preferences, "#{dir}/preferences.rb" TextMate::Snippet::DSLWriter.new(p.snippets).write "#{dir}/snippets.rb" write_all p.setting_sets, "#{dir}/settings.rb" write_all p.macros.sort_by(&:name), "#{dir}/macros.rb" write_all p.command_sets, "#{dir}/commands.rb" p..each { |m| m.write dir } p.mousemaps.each { |m| m.write dir } p.keymaps.each { |k| k.for_keyboard(keyboard).write dir } return unless copy_other_files p.other_files.each { |f| copy_file f, dir } end |