Class: EXIFR::TIFF::Data

Inherits:
Object
  • Object
show all
Defined in:
lib/exifr/tiff.rb

Overview

:nodoc:

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(file) ⇒ Data

Returns a new instance of Data.



652
653
654
655
656
657
658
659
660
661
662
663
# File 'lib/exifr/tiff.rb', line 652

def initialize(file)
  @io = file.respond_to?(:read) ? file : (@file = File.open(file, 'rb'))
  @buffer = ''
  @pos = 0

  case self[0..1]
  when 'II'; @short, @long, @float, @double = 'v', 'V', 'e', 'E'
  when 'MM'; @short, @long, @float, @double = 'n', 'N', 'g', 'G'
  else
    raise MalformedTIFF, "no byte order information found"
  end
end

Instance Attribute Details

#doubleObject (readonly)

Returns the value of attribute double.



650
651
652
# File 'lib/exifr/tiff.rb', line 650

def double
  @double
end

#fileObject (readonly)

Returns the value of attribute file.



650
651
652
# File 'lib/exifr/tiff.rb', line 650

def file
  @file
end

#floatObject (readonly)

Returns the value of attribute float.



650
651
652
# File 'lib/exifr/tiff.rb', line 650

def float
  @float
end

#longObject (readonly)

Returns the value of attribute long.



650
651
652
# File 'lib/exifr/tiff.rb', line 650

def long
  @long
end

#shortObject (readonly)

Returns the value of attribute short.



650
651
652
# File 'lib/exifr/tiff.rb', line 650

def short
  @short
end

Class Method Details

.open(file, &block) ⇒ Object



665
666
667
668
669
670
# File 'lib/exifr/tiff.rb', line 665

def self.open(file, &block)
  data = new(file)
  yield data
ensure
  data && data.file && data.file.close
end

Instance Method Details

#[](pos) ⇒ Object



672
673
674
675
676
677
678
679
680
681
682
# File 'lib/exifr/tiff.rb', line 672

def [](pos)
  unless pos.respond_to?(:begin) && pos.respond_to?(:end)
    pos = pos..pos
  end

  if pos.begin < @pos || pos.end >= @pos + @buffer.size
    read_for(pos)
  end

  @buffer && @buffer[(pos.begin - @pos)..(pos.end - @pos)]
end

#readlong(pos) ⇒ Object



688
689
690
# File 'lib/exifr/tiff.rb', line 688

def readlong(pos)
  self[pos..(pos + 3)].unpack(@long)[0]
end

#readshort(pos) ⇒ Object



684
685
686
# File 'lib/exifr/tiff.rb', line 684

def readshort(pos)
  self[pos..(pos + 1)].unpack(@short)[0]
end

#sizeObject



692
693
694
695
# File 'lib/exifr/tiff.rb', line 692

def size
  @io.seek(0, IO::SEEK_END)
  @io.pos
end