Module: Documentation::Memoized

Included in:
Base
Defined in:
lib/pdoc/parser/documentation_nodes.rb

Instance Method Summary collapse

Instance Method Details

#avoid_infinite_method_added_loopObject



69
70
71
72
73
74
75
# File 'lib/pdoc/parser/documentation_nodes.rb', line 69

def avoid_infinite_method_added_loop
  unless @memoizing
    @memoizing = true
    yield
    @memoizing = false
  end
end

#memoize(method_name) ⇒ Object



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/pdoc/parser/documentation_nodes.rb', line 51

def memoize(method_name)
  sanitized_name = method_name.to_s
  sanitized_name = sanitized_name.sub(/!$/, '_bang')
  sanitized_name = sanitized_name.sub(/\?$/, '_question_mark')
  complete_name = "#{sanitized_name}_#{object_id.abs}"
  
  class_eval("    alias compute_\#{complete_name} \#{method_name}    # alias compute_section_12235760 section\n                                                     # \n    def \#{method_name}                               # def section\n      unless defined?(@\#{complete_name})             #   unless defined?(@section_12235760)\n        @\#{complete_name} = compute_\#{complete_name} #     @section_12235760 = compute_section_12235760\n      end                                            #   end\n      @\#{complete_name}                              #   @section_12235760\n    end                                              # end\n  EVAL\nend\n", __FILE__, __LINE__)

#method_added(method_name) ⇒ Object



43
44
45
46
47
48
49
# File 'lib/pdoc/parser/documentation_nodes.rb', line 43

def method_added(method_name)
  if instance_method(method_name).arity.zero?
    avoid_infinite_method_added_loop do
      memoize(method_name)
    end
  end
end