Skip to content

Commit

Permalink
WIP
Browse files Browse the repository at this point in the history
  • Loading branch information
msievers committed Oct 5, 2015
1 parent 6ae771d commit 83576dd
Show file tree
Hide file tree
Showing 5 changed files with 101 additions and 0 deletions.
1 change: 1 addition & 0 deletions lib/metacrunch/file.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

class Metacrunch::File
require_relative "./file/reader"
require_relative "./file/writer"

attr_accessor :content
attr_accessor :entry_name # equals file_name for plain files
Expand Down
26 changes: 26 additions & 0 deletions lib/metacrunch/file/writer.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
require_relative "../file"
require_relative "../processor"

class Metacrunch::File::Writer < Metacrunch::Processor
require_relative "./writer/plain_file_writer"
require_relative "./writer/tar_file_writer"
require_relative "./writer/zip_file_writer"

def initialize(filename)
@writer =
[TarFileWriter, ZipFileWriter, PlainFileWriter].find do |_writer|
_writer.supports?(filename)
end
.try do |_appropriate_writer_class|
_appropriate_writer_class.new(filename)
end
end

def close
@writer.close
end

def write(*args)
@writer.write(*args)
end
end
19 changes: 19 additions & 0 deletions lib/metacrunch/file/writer/plain_file_writer.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
require_relative "../writer"

class Metacrunch::File::Writer::PlainFileWriter
def self.supports?(filename)
true
end

def initialize(filename)
@io = File.open(filename, "w")
end

def close
@io.close
end

def write(options = {})
@io.write(options[:content])
end
end
26 changes: 26 additions & 0 deletions lib/metacrunch/file/writer/tar_file_writer.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
require "rubygems/package"
require "zlib"
require_relative "../writer"

class Metacrunch::File::Writer::TarFileWriter
def self.supports?(filename)
!!filename[/\.tar\Z|\.tar\.gz\Z|\.tgz\Z/]
end

def initialize(filename)
@io = File.open(filename, "w")
@io = Zlib::GzipWriter.new(@io) if filename.end_with?("gz")
@tar_writer = Gem::Package::TarWriter.new(@io)
end

def close
@tar_writer.close
@io.close
end

def write(options = {})
@tar_writer.add_file_simple(options[:entry_name], 0644, options[:content].bytesize) do |_tar_entry|
_tar_entry.write(options[:content])
end
end
end
29 changes: 29 additions & 0 deletions lib/metacrunch/file/writer/zip_file_writer.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
require "zip"
require_relative "../writer"

class Metacrunch::File::Writer::ZipFileWriter
def self.supports?(filename)
!!filename[/\.zip\Z/]
end

def self.write(*args)
end

=begin
def each
return enum_for(__method__) unless block_given?
Zip::File.open(@filename) do |_zip_file|
_zip_file.each do |_zip_entry|
unless _zip_entry.directory?
yield Metacrunch::File.new({
content: _zip_entry.get_input_stream.read,
entry_name: _zip_entry.name,
file_name: @filename
})
end
end
end
end
=end
end

0 comments on commit 83576dd

Please sign in to comment.