lib/powerpoint/presentation.rb in powerpoint-1.6 vs lib/powerpoint/presentation.rb in powerpoint-1.7

- old
+ new

@@ -4,62 +4,64 @@ module Powerpoint class Presentation include Powerpoint::Util - attr_reader :pptx_path, :extract_path, :slides + attr_reader :slides def initialize @slides = [] end - def add_intro title, subtitile=nil + def add_intro(title, subtitile = nil) existing_intro_slide = @slides.select {|s| s.class == Powerpoint::Slide::Intro}[0] slide = Powerpoint::Slide::Intro.new(presentation: self, title: title, subtitile: subtitile) if existing_intro_slide @slides[@slides.index(existing_intro_slide)] = slide else @slides.insert 0, slide end end - def add_textual_slide title, content=[] + def add_textual_slide(title, content = []) @slides << Powerpoint::Slide::Textual.new(presentation: self, title: title, content: content) end - def add_pictorial_slide title, image_path, coords={} + def add_pictorial_slide(title, image_path, coords = {}) @slides << Powerpoint::Slide::Pictorial.new(presentation: self, title: title, image_path: image_path, coords: coords) end - def save path - # Copy template to temp path - @extract_path = File.join(Dir.tmpdir, "extract_#{Time.now.strftime("%Y-%m-%d-%H%M%S")}") - FileUtils.copy_entry TEMPLATE_PATH, @extract_path + def save(path) + Dir.mktmpdir do |dir| + extract_path = "#{dir}/extract_#{Time.now.strftime("%Y-%m-%d-%H%M%S")}" - # Remove keep files - FileUtils.rm_rf("#{@extract_path}/ppt/_rels/.keep") - FileUtils.rm_rf("#{@extract_path}/ppt/media/.keep") - FileUtils.rm_rf("#{@extract_path}/ppt/slides/_rels/.keep") + # Copy template to temp path + FileUtils.copy_entry(TEMPLATE_PATH, extract_path) - # Render/save generic stuff - File.open("#{extract_path}/[Content_Types].xml", 'w') { |f| f << render_view('content_type.xml.erb') } - File.open("#{extract_path}/ppt/_rels/presentation.xml.rels", 'w') { |f| f << render_view('presentation.xml.rel.erb') } - File.open("#{extract_path}/ppt/presentation.xml", 'w') { |f| f << render_view('presentation.xml.erb') } + # Remove keep files + Dir.glob("#{extract_path}/**/.keep").each do |keep_file| + FileUtils.rm_rf(keep_file) + end - # Save slides - slides.each_with_index do |slide, index| - slide.save(index + 1) + # Render/save generic stuff + render_view('content_type.xml.erb', "#{extract_path}/[Content_Types].xml") + render_view('presentation.xml.rel.erb', "#{extract_path}/ppt/_rels/presentation.xml.rels") + render_view('presentation.xml.erb', "#{extract_path}/ppt/presentation.xml") + + # Save slides + slides.each_with_index do |slide, index| + slide.save(extract_path, index + 1) + end + + # Create .pptx file + File.delete(path) if File.exist?(path) + Powerpoint.compress_pptx(extract_path, path) end - # Create .pptx file - @pptx_path = path - File.delete(path) if File.exist?(path) - Powerpoint.compress_pptx @extract_path, @pptx_path - FileUtils.rm_rf(@extract_path) path end def file_types slides.select {|slide| slide.class == Powerpoint::Slide::Pictorial}.map(&:file_type).uniq end end -end \ No newline at end of file +end