Class: IPTCR::IPTC::Field

Inherits:
Object
  • Object
show all
Defined in:
lib/iptcr/iptc.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(record_number:, dataset_number:, data:, encoding:) ⇒ Field

Returns a new instance of Field.



121
122
123
124
125
126
# File 'lib/iptcr/iptc.rb', line 121

def initialize(record_number:, dataset_number:, data:, encoding:)
  @record_number = record_number
  @dataset_number = dataset_number
  @data = data
  @encoding = encoding
end

Instance Attribute Details

#dataObject (readonly)

Returns the value of attribute data.



144
145
146
# File 'lib/iptcr/iptc.rb', line 144

def data
  @data
end

#dataset_numberObject (readonly)

Returns the value of attribute dataset_number.



144
145
146
# File 'lib/iptcr/iptc.rb', line 144

def dataset_number
  @dataset_number
end

#encodingObject (readonly)

Returns the value of attribute encoding.



172
173
174
# File 'lib/iptcr/iptc.rb', line 172

def encoding
  @encoding
end

#record_numberObject (readonly)

Returns the value of attribute record_number.



128
129
130
# File 'lib/iptcr/iptc.rb', line 128

def record_number
  @record_number
end

Instance Method Details

#datasetObject



152
153
154
155
156
# File 'lib/iptcr/iptc.rb', line 152

def dataset
  if dataset?
    record[:datasets][dataset_number]
  end
end

#dataset?Boolean

Returns:

  • (Boolean)


146
147
148
149
150
# File 'lib/iptcr/iptc.rb', line 146

def dataset?
  if record?
    record[:datasets] && record[:datasets].has_key?(dataset_number)
  end
end

#dataset_nameObject



158
159
160
161
162
# File 'lib/iptcr/iptc.rb', line 158

def dataset_name
  if dataset?
    dataset[:name]
  end
end

#dataset_typeObject



164
165
166
167
168
# File 'lib/iptcr/iptc.rb', line 164

def dataset_type
  if dataset?
    dataset[:type]
  end
end

#inspectObject



200
201
202
# File 'lib/iptcr/iptc.rb', line 200

def inspect
  "#<%s:0x%014x record=%s dataset=%s %p>" % [self.class, object_id, inspect_record, inspect_dataset, value]
end

#recordObject



134
135
136
# File 'lib/iptcr/iptc.rb', line 134

def record
  RECORDS[record_number]
end

#record?Boolean

Returns:

  • (Boolean)


130
131
132
# File 'lib/iptcr/iptc.rb', line 130

def record?
  RECORDS.has_key? record_number
end

#record_nameObject



138
139
140
141
142
# File 'lib/iptcr/iptc.rb', line 138

def record_name
  if record?
    record[:name]
  end
end

#valueObject



174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
# File 'lib/iptcr/iptc.rb', line 174

def value
  case dataset_type
  when "string"
    # Record number 1 is always the default encoding
    if record_number == 1
      @data.force_encoding(DEFAULT_ENCODING)
    # Records 2-6 and 8 respect tagged encoding
    elsif (2..6).include?(record_number) || record_number == 8
      @data.force_encoding(encoding)
    # Other behaviour is undefined
    else
      @data
    end
  when "digits"
    @data
  when "int8u"
    @data.unpack("C").first
  when "int16u"
    @data.unpack("S").first
  when "int32u"
    @data.unpack("L").first
  else
    @data
  end
end