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