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.



641
642
643
644
645
646
647
648
649
650
651
652
# File 'lib/exifr/tiff.rb', line 641

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 = 'v', 'V'
  when 'MM'; @short, @long = 'n', 'N'
  else
    raise MalformedTIFF, "no byte order information found"
  end
end

Instance Attribute Details

#fileObject (readonly)

Returns the value of attribute file.



639
640
641
# File 'lib/exifr/tiff.rb', line 639

def file
  @file
end

#longObject (readonly)

Returns the value of attribute long.



639
640
641
# File 'lib/exifr/tiff.rb', line 639

def long
  @long
end

#shortObject (readonly)

Returns the value of attribute short.



639
640
641
# File 'lib/exifr/tiff.rb', line 639

def short
  @short
end

Class Method Details

.open(file, &block) ⇒ Object



654
655
656
657
658
659
# File 'lib/exifr/tiff.rb', line 654

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

Instance Method Details

#[](pos) ⇒ Object



661
662
663
664
665
666
667
668
669
670
671
# File 'lib/exifr/tiff.rb', line 661

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



677
678
679
# File 'lib/exifr/tiff.rb', line 677

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

#readshort(pos) ⇒ Object



673
674
675
# File 'lib/exifr/tiff.rb', line 673

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

#sizeObject



681
682
683
684
# File 'lib/exifr/tiff.rb', line 681

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