Add two new unpack strategies.
This commit is contained in:
parent
d3534c1cc2
commit
2a63d363c2
@ -6,6 +6,8 @@ class UnpackStrategy
|
|||||||
def self.strategies
|
def self.strategies
|
||||||
@strategies ||= [
|
@strategies ||= [
|
||||||
JarUnpackStrategy,
|
JarUnpackStrategy,
|
||||||
|
LuaRockUnpackStrategy,
|
||||||
|
MicrosoftOfficeXmlUnpackStrategy,
|
||||||
ZipUnpackStrategy,
|
ZipUnpackStrategy,
|
||||||
XarUnpackStrategy,
|
XarUnpackStrategy,
|
||||||
CompressUnpackStrategy,
|
CompressUnpackStrategy,
|
||||||
@ -87,6 +89,26 @@ class UncompressedUnpackStrategy < UnpackStrategy
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
class MicrosoftOfficeXmlUnpackStrategy < UncompressedUnpackStrategy
|
||||||
|
def self.can_extract?(path:, magic_number:)
|
||||||
|
return false unless ZipUnpackStrategy.can_extract?(path: path, magic_number: magic_number)
|
||||||
|
|
||||||
|
# Check further if the ZIP is a Microsoft Office XML document.
|
||||||
|
magic_number.match?(/\APK\003\004/n) &&
|
||||||
|
magic_number.match?(%r{\A.{30}(\[Content_Types\]\.xml|_rels/\.rels)}n)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
class LuaRockUnpackStrategy < UncompressedUnpackStrategy
|
||||||
|
def self.can_extract?(path:, magic_number:)
|
||||||
|
return false unless ZipUnpackStrategy.can_extract?(path: path, magic_number: magic_number)
|
||||||
|
|
||||||
|
# Check further if the ZIP is a LuaRocks package.
|
||||||
|
out, _, status = Open3.capture3("zipinfo", "-1", path)
|
||||||
|
status.success? && out.split("\n").any? { |line| line.match?(%r{\A[^/]+.rockspec\Z}) }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
class JarUnpackStrategy < UncompressedUnpackStrategy
|
class JarUnpackStrategy < UncompressedUnpackStrategy
|
||||||
def self.can_extract?(path:, magic_number:)
|
def self.can_extract?(path:, magic_number:)
|
||||||
return false unless ZipUnpackStrategy.can_extract?(path: path, magic_number: magic_number)
|
return false unless ZipUnpackStrategy.can_extract?(path: path, magic_number: magic_number)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user