lib/nbt_utils/file.rb in nbt_utils-0.0.3 vs lib/nbt_utils/file.rb in nbt_utils-0.0.4
- old
+ new
@@ -3,22 +3,40 @@
def initialize(path = nil)
@path = path
end
def read(path = @path)
- Zlib::GzipReader.open(path) do |f|
- @content = StringIO.new(f.read)
+ # Zlib does not provide a way to test a file for compressed, and I'm
+ # not going to tool around with magic numbers, so I guess we use
+ # exceptions for flow control.
+ begin
+ Zlib::GzipReader.open(path) do |f|
+ @content = StringIO.new(f.read)
+ end
+ @compressed = true
+ rescue Zlib::GzipFile::Error
+ ::File.open(path) do |f|
+ @content = StringIO.new(f.read)
+ end
+ @compressed = false
end
+
last_byte = @content.read(1).bytes.first
klass = NBTUtils::Tag.tag_type_to_class(last_byte)
@tag = klass.new(@content, true)
end
- def write(path = @path, tag = @tag)
- Zlib::GzipWriter.open(path) do |gz|
- gz.write tag.to_nbt_string
+ def write(path = @path, tag = @tag, compressed = @compressed)
+ if compressed
+ Zlib::GzipWriter.open(path) do |gz|
+ gz.write tag.to_nbt_string
+ end
+ else
+ ::File.open(path, 'w') do |f|
+ f.write tag.to_nbt_string
+ end
end
end
end
end