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 |