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.



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

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.



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

def data
  @data
end

#dataset_numberObject (readonly)

Returns the value of attribute dataset_number.



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

def dataset_number
  @dataset_number
end

#encodingObject (readonly)

Returns the value of attribute encoding.



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

def encoding
  @encoding
end

#record_numberObject (readonly)

Returns the value of attribute record_number.



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

def record_number
  @record_number
end

Instance Method Details

#datasetObject



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

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

#dataset?Boolean

Returns:

  • (Boolean)


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

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

#dataset_nameObject



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

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

#dataset_typeObject



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

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

#inspectObject



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

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

#recordObject



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

def record
  RECORDS[record_number]
end

#record?Boolean

Returns:

  • (Boolean)


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

def record?
  RECORDS.has_key? record_number
end

#record_nameObject



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

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

#valueObject



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

def value
  case dataset_type
  when "string"
    # Record number 1 is always the default encoding
    if record_number == 1
      @data.force_encoding(DEFAULT_ENCODING) unless @data.nil?
    # Records 2-6 and 8 respect tagged encoding
    elsif (2..6).include?(record_number) || record_number == 8
      @data.force_encoding(encoding) unless @data.nil?
    # 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