Module: Ownership

Included in:
Magick::Image
Defined in:
lib/httpthumbnailer/ownership.rb

Constant Summary collapse

UseDestroyedError =
Class.new(RuntimeError)
BorrowingDestoryedError =
Class.new(RuntimeError)
BorrowingNotOwnedError =
Class.new(RuntimeError)

Instance Method Summary collapse

Instance Method Details

#borrowObject



14
15
16
17
18
19
20
21
22
23
24
# File 'lib/httpthumbnailer/ownership.rb', line 14

def borrow
  @destroyed and Kernel::raise BorrowingDestoryedError, "cannot borrow a destroyed obejct '#{self}'"
  @owned or Kernel::raise BorrowingNotOwnedError, "cannot borrow not owned object '#{self}'"
  was_borrowed = @borrowed
  begin
    @borrowed = true
    yield self
  ensure
    @borrowed = was_borrowed
  end
end

#borrowed?Boolean

Returns:

  • (Boolean)


10
11
12
# File 'lib/httpthumbnailer/ownership.rb', line 10

def borrowed?
  @borrowed
end

#get(&block) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/httpthumbnailer/ownership.rb', line 26

def get(&block)
  if @borrowed
    borrow(&block)
  else
    @destroyed and Kernel::raise UseDestroyedError, "cannot own a destoryed object '#{self}'"
    # take ownership; it may be owned already
    @owned = true
    begin
      ret = yield self
      # give up ownership if nothing happened with the obejct
      # NOTE: we use equal here sice == may actually test pixel by pixel which is not the point!
      if ret.equal?(self) or ret.nil?
        @owned = nil
        return self
      end
      ret
    ensure
      # if I am still an owner destroy and give up ownership
      if @owned
        destroy!
        @destroyed = true
        @owned = nil
      end
    end
  end
end

#owned?Boolean

Returns:

  • (Boolean)


6
7
8
# File 'lib/httpthumbnailer/ownership.rb', line 6

def owned?
  @owned
end