Class: Archive::Zip::ExtraField::Raw
- Inherits:
-
Object
- Object
- Archive::Zip::ExtraField::Raw
- Defined in:
- lib/archive/zip/extra_field/raw.rb
Overview
Archive::Zip::Entry::ExtraField::Raw represents an unknown extra field. It is used to store extra fields the Archive::Zip library does not directly support.
Do not use this class directly. Define a new class which supports the extra field of interest directly instead.
Instance Attribute Summary collapse
-
#central_record_data ⇒ Object
readonly
Returns the data contained within this ExtraField.
-
#header_id ⇒ Object
readonly
Returns the header ID for this ExtraField.
-
#local_record_data ⇒ Object
readonly
Returns the value of attribute local_record_data.
Class Method Summary collapse
-
.parse_central(header_id, data) ⇒ Object
Simply stores header_id and data for later reproduction by #dump_central.
-
.parse_local(header_id, data) ⇒ Object
Simply stores header_id and data for later reproduction by #dump_local.
Instance Method Summary collapse
-
#dump_central ⇒ Object
This method signature is part of the interface contract expected by Archive::Zip::Entry for extra field objects.
-
#dump_local ⇒ Object
This method signature is part of the interface contract expected by Archive::Zip::Entry for extra field objects.
-
#initialize(header_id, data, central_record) ⇒ Raw
constructor
Simply stores header_id and data for later reproduction by #dump_central or #dump_local.
-
#merge(other) ⇒ Object
This method signature is part of the interface contract expected by Archive::Zip::Entry for extra field objects.
Constructor Details
#initialize(header_id, data, central_record) ⇒ Raw
Simply stores header_id and data for later reproduction by #dump_central or #dump_local. central_record indicates that this field resides in the central file record for an entry when true. When false, it indicates that this field resides in the local file record for an entry.
32 33 34 35 36 37 38 39 40 41 |
# File 'lib/archive/zip/extra_field/raw.rb', line 32 def initialize(header_id, data, central_record) @header_id = header_id @central_record_data = [] @local_record_data = [] if central_record then @central_record_data << data else @local_record_data << data end end |
Instance Attribute Details
#central_record_data ⇒ Object (readonly)
Returns the data contained within this ExtraField.
46 47 48 |
# File 'lib/archive/zip/extra_field/raw.rb', line 46 def central_record_data @central_record_data end |
#header_id ⇒ Object (readonly)
Returns the header ID for this ExtraField.
44 45 46 |
# File 'lib/archive/zip/extra_field/raw.rb', line 44 def header_id @header_id end |
#local_record_data ⇒ Object (readonly)
Returns the value of attribute local_record_data.
47 48 49 |
# File 'lib/archive/zip/extra_field/raw.rb', line 47 def local_record_data @local_record_data end |
Class Method Details
.parse_central(header_id, data) ⇒ Object
Simply stores header_id and data for later reproduction by #dump_central. This is essentially and alias for #new.
15 16 17 |
# File 'lib/archive/zip/extra_field/raw.rb', line 15 def parse_central(header_id, data) new(header_id, data, true) end |
.parse_local(header_id, data) ⇒ Object
Simply stores header_id and data for later reproduction by #dump_local. This is essentially and alias for #new.
22 23 24 |
# File 'lib/archive/zip/extra_field/raw.rb', line 22 def parse_local(header_id, data) new(header_id, data, false) end |
Instance Method Details
#dump_central ⇒ Object
This method signature is part of the interface contract expected by Archive::Zip::Entry for extra field objects.
Returns a String suitable to writing to a central file record in a ZIP archive file which contains the data for this object.
73 74 75 76 77 |
# File 'lib/archive/zip/extra_field/raw.rb', line 73 def dump_central @central_record_data.collect do |data| [header_id, data.size].pack('vv') + data end end |
#dump_local ⇒ Object
This method signature is part of the interface contract expected by Archive::Zip::Entry for extra field objects.
Returns a String suitable to writing to a local file record in a ZIP archive file which contains the data for this object.
84 85 86 87 88 |
# File 'lib/archive/zip/extra_field/raw.rb', line 84 def dump_local @local_record_data.collect do |data| [header_id, data.size].pack('vv') + data end end |
#merge(other) ⇒ Object
This method signature is part of the interface contract expected by Archive::Zip::Entry for extra field objects.
Merges the attributes of other into this object and returns self.
Raises ArgumentError if other does not have the same header ID as this object.
56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/archive/zip/extra_field/raw.rb', line 56 def merge(other) if header_id != other.header_id then raise ArgumentError, "Header ID mismatch: #{header_id} != #{other.header_id}" end @central_record_data += other.central_record_data @local_record_data += other.local_record_data self end |