Class: MasterView::FileSerializer

Inherits:
Object
  • Object
show all
Defined in:
lib/masterview/parser.rb

Overview

Serializer which can serialize output to file system. It will create any directories that are necessary before writing the file. It will overwrite any existing file that existed.

Instance Method Summary collapse

Instance Method Details

#serialize(render_mode, tag) ⇒ Object



191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
# File 'lib/masterview/parser.rb', line 191

def serialize(render_mode, tag)
  Log.debug { "outputting mode=#{render_mode.mode_type} to file=#{render_mode.output}".indent(2*(Renderer.last_renderer.render_levels.size - 1)) }
  dir_name = File.dirname render_mode.output
  FileUtils.makedirs(dir_name) unless File.exist?(dir_name) #ensure path exists

  data_to_write = tag.data.join
  if File.exist? render_mode.output
    existing_file_contents = File.readlines(render_mode.output).join
    if data_to_write == existing_file_contents
      Log.debug { "file identical, skipping output of #{render_mode.output}" }
      return false
    end
  end

  File.open(render_mode.output, 'w') do |io|
    io << data_to_write
  end
  true
end