Class: NarcFile
- Inherits:
-
Object
- Object
- NarcFile
- Defined in:
- lib/narc.rb
Instance Attribute Summary collapse
-
#elements ⇒ Object
Returns the value of attribute elements.
-
#name ⇒ Object
Returns the value of attribute name.
Class Method Summary collapse
-
.from_folder(dir) ⇒ Object
NarcFile.from_folder( [folder name] ) => NarcFile.
-
.open(filename) ⇒ Object
NarcFile.open( filename ) => NarcFile.
Instance Method Summary collapse
-
#extract_to_folder(folder_name = nil) ⇒ Object
narcfile.extract_to_folder( [folder name] ) => nil.
-
#get_data(io) ⇒ Object
:nodoc:.
-
#get_element(element) ⇒ Object
narcfile.get_element( [integer] ) => Narc::Element narcfile.get_element( [string] ) => Narc::Element.
-
#initialize(name = "narc") ⇒ NarcFile
constructor
NarcFile.new( [name] ) => NarcFile.
-
#save(filename = nil, include_names = false) ⇒ Object
narcfile.save( [filename] , [include_names?] ) => nil.
Constructor Details
#initialize(name = "narc") ⇒ NarcFile
NarcFile.new( [name] ) => NarcFile
Instantiates a new NarcFile
object. If name
is not specified, the name of the NarcFile object will be just “narc”.
26 27 28 29 30 31 |
# File 'lib/narc.rb', line 26 def initialize(name = "narc") @name = name @elements = [] @offsets = {} @size_offsets = {} end |
Instance Attribute Details
#elements ⇒ Object
Returns the value of attribute elements.
17 18 19 |
# File 'lib/narc.rb', line 17 def elements @elements end |
#name ⇒ Object
Returns the value of attribute name.
17 18 19 |
# File 'lib/narc.rb', line 17 def name @name end |
Class Method Details
.from_folder(dir) ⇒ Object
NarcFile.from_folder( [folder name] ) => NarcFile
Instantiates a new NarcFile
object from the contents of a folder folder name
.
74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/narc.rb', line 74 def self.from_folder(dir) narc = self.new(File.basename(dir)) files = Dir.entries(dir).sort - [".", ".."] narc.elements = Array.new(files.size) do Narc::Element.new end Dir.chdir(dir) do files.each_with_index do |file, i| narc.elements[i].name = file.split("_", 2)[-1] File.open(file, "rb") do |f| narc.elements[i].data = f.read end end end return narc end |
.open(filename) ⇒ Object
NarcFile.open( filename ) => NarcFile
Instantiates a new NarcFile
object from the contents of a NARC file filename
.
40 41 42 43 44 45 46 |
# File 'lib/narc.rb', line 40 def self.open(filename) io = File.open(filename, "rb") narc = self.new(File.basename(filename, ".narc")) narc.get_data(io) io.close return narc end |
Instance Method Details
#extract_to_folder(folder_name = nil) ⇒ Object
narcfile.extract_to_folder( [folder name] ) => nil
Dumps the elements of the current NarcFile
object to a folder. If folder name
is nil or omitted, this folder will be named “ex_[name of the NarcFile object]
”
55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/narc.rb', line 55 def extract_to_folder(folder_name = nil) folder_name ||= "ex_" + @name Dir.mkdir(folder_name) unless Dir.exists?(folder_name) Dir.chdir(folder_name) do @elements.each_with_index do |element, i| File.open(("%04d" % i) + "_" + element.name, "wb") do |file| file.write(element.data) end end end end |
#get_data(io) ⇒ Object
:nodoc:
134 135 136 137 138 |
# File 'lib/narc.rb', line 134 def get_data(io) # :nodoc: check_signature(io) get_section_offsets(io) get_elements(io) end |
#get_element(element) ⇒ Object
124 125 126 127 128 129 130 131 132 |
# File 'lib/narc.rb', line 124 def get_element(element) if element.is_a?(Integer) return self.elements[element] elsif element.is_a?(String) for elm in self.elements return elm if elm.name == element end end end |
#save(filename = nil, include_names = false) ⇒ Object
narcfile.save( [filename] , [include_names?] ) => nil
Makes a NARC file filename
from the contents of the current NarcFile
object.
If filename
is nil or omitted, the filename of the new NARC file will be “saved_[name of the NarcFile object]
”.
If include_names?
is true, the elements in the NARC file will be named, else, they won’t. Default is false.
102 103 104 105 106 107 108 109 110 111 |
# File 'lib/narc.rb', line 102 def save(filename = nil, include_names = false) filename ||= "saved_" + self.name File.open(filename, "w+b") do |f| write_narc_section(f) write_fatb_section(f) write_fntb_section(f, include_names) write_fimg_section(f) write_size_data(f) end end |