Class: HexaPDF::DictionaryFields::Field
- Inherits:
-
Object
- Object
- HexaPDF::DictionaryFields::Field
- Defined in:
- lib/hexapdf/dictionary_fields.rb
Overview
A dictionary field contains information about one field of a structured PDF object and this information comes directly from the PDF specification.
By incorporating this field information into HexaPDF it is possible to do many things automatically, like checking for the correct minimum PDF version to use or converting a date from its string representation to a Time object.
Instance Attribute Summary collapse
-
#indirect ⇒ Object
readonly
Returns
true
if the value for this field needs to be an indirect object,false
if it needs to be a direct object ornil
if it can be either. -
#version ⇒ Object
readonly
Returns the PDF version that is required for this field.
Class Method Summary collapse
-
.converter_for(type) ⇒ Object
Returns the converter for the given
type
specification. -
.converters ⇒ Object
Returns the list of available converter objects.
Instance Method Summary collapse
-
#convert(data, document) ⇒ Object
Converts the data into a useful object if possible.
-
#default ⇒ Object
Returns a duplicated default value, automatically taking unduplicatable classes into account.
-
#default? ⇒ Boolean
Returns
true
if a default value is available. -
#initialize(type, required = false, default = nil, indirect = nil, version = nil) ⇒ Field
constructor
Create a new Field object.
-
#required? ⇒ Boolean
Returns
true
if this field is required. -
#type ⇒ Object
Returns the array with valid types for this field.
-
#valid_object?(obj) ⇒ Boolean
Returns
true
if the given object is valid for this field.
Constructor Details
#initialize(type, required = false, default = nil, indirect = nil, version = nil) ⇒ Field
Create a new Field object. See Dictionary::define_field for information on the arguments.
Depending on the type
entry an appropriate field converter object is chosen from the available converters.
108 109 110 111 112 113 |
# File 'lib/hexapdf/dictionary_fields.rb', line 108 def initialize(type, required = false, default = nil, indirect = nil, version = nil) @type = [type].flatten @type_mapped = false @required, @default, @indirect, @version = required, default, indirect, version @converters = @type.map {|t| self.class.converter_for(t) }.compact end |
Instance Attribute Details
#indirect ⇒ Object (readonly)
Returns true
if the value for this field needs to be an indirect object, false
if it needs to be a direct object or nil
if it can be either.
99 100 101 |
# File 'lib/hexapdf/dictionary_fields.rb', line 99 def indirect @indirect end |
#version ⇒ Object (readonly)
Returns the PDF version that is required for this field.
102 103 104 |
# File 'lib/hexapdf/dictionary_fields.rb', line 102 def version @version end |
Class Method Details
.converter_for(type) ⇒ Object
Returns the converter for the given type
specification.
The converter list is checked for a suitable converter from the front to the back. So if two converters could potentially be used for the same type, the one that appears earlier is used.
93 94 95 |
# File 'lib/hexapdf/dictionary_fields.rb', line 93 def self.converter_for(type) @converters.find {|converter| converter.usable_for?(type) } end |
.converters ⇒ Object
Returns the list of available converter objects.
See ::converter_for for information on how this list is used.
84 85 86 |
# File 'lib/hexapdf/dictionary_fields.rb', line 84 def self.converters @converters ||= [] end |
Instance Method Details
#convert(data, document) ⇒ Object
Converts the data into a useful object if possible. Otherwise returns nil
.
162 163 164 165 166 167 168 |
# File 'lib/hexapdf/dictionary_fields.rb', line 162 def convert(data, document) @converters.each do |converter| result = converter.convert(data, type, document) return result unless result.nil? end nil end |
#default ⇒ Object
Returns a duplicated default value, automatically taking unduplicatable classes into account.
143 144 145 |
# File 'lib/hexapdf/dictionary_fields.rb', line 143 def default duplicatable_default? ? @default.dup : @default end |
#default? ⇒ Boolean
Returns true
if a default value is available.
137 138 139 |
# File 'lib/hexapdf/dictionary_fields.rb', line 137 def default? !@default.nil? end |
#required? ⇒ Boolean
Returns true
if this field is required.
132 133 134 |
# File 'lib/hexapdf/dictionary_fields.rb', line 132 def required? @required end |
#type ⇒ Object
Returns the array with valid types for this field.
116 117 118 119 120 121 122 123 124 125 126 127 128 129 |
# File 'lib/hexapdf/dictionary_fields.rb', line 116 def type return @type if @type_mapped @type_mapped = true @type.concat(@converters.map(&:additional_types).compact.flatten) @type.map! do |type| if type.kind_of?(Symbol) HexaPDF::GlobalConfiguration.constantize('object.type_map', type) else type end end @type.uniq! @type end |