Module: RmagickTidy::Tracker

Defined in:
lib/rmagick_tidy/tracker.rb

Class Method Summary collapse

Class Method Details

.each_image(value, &block) ⇒ Object



23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/rmagick_tidy/tracker.rb', line 23

def each_image(value, &block)
  case value
  when nil
    # nothing
  when ->(v) { defined?(Magick::Image) && v.is_a?(Magick::Image) }
    yield value
  when ->(v) { defined?(Magick::ImageList) && v.is_a?(Magick::ImageList) }
    value.each { |i| yield i if defined?(Magick::Image) && i.is_a?(Magick::Image) }
  when Array
    value.each { |v| each_image(v, &block) }
  when Hash
    value.each_value { |v| each_image(v, &block) }
  end
end

.handle_out_of_scope(img) ⇒ Object



47
48
49
50
51
52
53
54
55
# File 'lib/rmagick_tidy/tracker.rb', line 47

def handle_out_of_scope(img)
  case RmagickTidy.configuration.strict_mode
  when :raise
    raise OutOfScopeError,
          "Magick::Image #{img.inspect} was created outside of RmagickTidy.scope"
  when :warn
    warn "[rmagick_tidy] Magick::Image created outside of RmagickTidy.scope (#{img.class})"
  end
end

.keep(value) ⇒ Object



14
15
16
17
18
19
20
21
# File 'lib/rmagick_tidy/tracker.rb', line 14

def keep(value)
  scope = Registry.current
  return unless scope

  each_image(value) do |img|
    scope.keep(img)
  end
end

.register(img) ⇒ Object



38
39
40
41
42
43
44
45
# File 'lib/rmagick_tidy/tracker.rb', line 38

def register(img)
  scope = Registry.current
  if scope
    scope.register(img)
  else
    handle_out_of_scope(img)
  end
end

.track(result, receiver = nil) ⇒ Object



5
6
7
8
9
10
11
12
# File 'lib/rmagick_tidy/tracker.rb', line 5

def track(result, receiver = nil)
  return result if receiver && result.equal?(receiver)

  each_image(result) do |img|
    register(img)
  end
  result
end