david-mccullars/ruby-splitta

View on GitHub
Rakefile

Summary

Maintainability
Test Coverage
require 'bundler/gem_tasks'
require 'rspec/core/rake_task'
require 'yard'

RSpec::Core::RakeTask.new(:spec)

task default: :spec

YARD::Rake::YardocTask.new

def unpickle(file)
  out, status = Open3.capture2e("bin/pickle2json #{file.inspect}")
  abort out unless status.success?
  JSON.parse(out).to_h
end

def gzip_dump(file, obj)
  require 'fileutils'
  require 'zlib'

  FileUtils.mkdir_p(File.dirname(file))
  Zlib::GzipWriter.open(file) do |gz|
    gz.write(Marshal.dump(obj))
  end
end

task :unpickle, [:file] do |_t, args|
  require 'json'
  require 'open3'

  files = Dir[args[:file] || 'data/src/**/*'].select do |f|
    File.file?(f)
  end

  files.map do |src|
    fork do
      puts "Unpickling #{src} ..."
      gzip_dump(src.sub('/src/', '/'), unpickle(src))
    end
  end.map do |pid|
    Process.wait2(pid).last
  end.all?(&:success?) or exit(1)
end