class MailViewProcessor

Constants

VERSION

Public Instance Methods

comment_for(output_type, text) click to toggle source
# File lib/mail_view_processor.rb, line 58
def comment_for(output_type, text)
  case output_type
    when %r|\.haml$|
      "-# #{text}"
    when %r|\.erb$|
      "<%# #{text} -%>"
    when %r|^text$|
      nil
    else
      raise "unexpected output_type >#{output_type}<"
  end
end
run() click to toggle source
# File lib/mail_view_processor.rb, line 4
def run
  project_full_dir = File.expand_path('.')
  mail_views_full_dir = File.join(project_full_dir, "/app/mail_views")
  views_full_dir = File.join(project_full_dir, "/app/views")

  Dir.new(mail_views_full_dir).each do |mailer_dir|
    next if mailer_dir =~ /^\.\.?$/

    puts "processing #{mailer_dir}"

    mail_view_mailer_full_dir = File.join(mail_views_full_dir, mailer_dir)

    view_mailer_full_dir = File.join(views_full_dir, mailer_dir)

    Dir.new(mail_view_mailer_full_dir).each do |mail_view_file_name|
      next if mail_view_file_name =~ /^\.\.?$/
      puts "  processing #{mail_view_file_name}"

      mail_view_full_file_name = File.join(mail_view_mailer_full_dir, mail_view_file_name)
      mail_view_relative_file_name = File.join('/app/mail_views', mail_view_file_name)
      output_file_data = {}
      File.open(mail_view_full_file_name, 'r') do |f|
        output_type = nil
        f.each_line do |line|
          puts "processing >#{line[0..30]}<"
          if line =~ /^> (.*)$/
            output_type = $1
            puts "handling #{output_type}"
            output_file_data[output_type] ||= []
            next
          end

          output_file_data[output_type] << (line.length > 1 ? line[2..-1] : line)
        end
      end

      base_view_file_name = mail_view_file_name[/^(.*)\.mail_view$/, 1]
      output_file_data.each do |output_type, lines|

        output_file_name = base_view_file_name + "." + output_type
        view_full_file = File.join(view_mailer_full_dir, output_file_name)
        puts "********* writing #{view_full_file}"
        FileUtils.mkdir_p(view_mailer_full_dir)
        FileUtils.rm_rf(view_full_file)
        File.open(view_full_file, "w") do |f|
          comment_for_type = comment_for(output_type, "AUTO GENERATED FILE / DO NOT EDIT (instead, edit #{mail_view_relative_file_name})")
          f << comment_for_type + "\n" if comment_for_type
          f << lines.join
        end
      end
    end
  end
end