require 'tap/support/lazydoc' module Tap module Support # LazyAttributes adds methods to declare class-level accessors # for Lazydoc attributes. The source_file for the class must # be set manually. # # # ConstName::key value # class ConstName # extend LazyAttributes # # self.source_file = __FILE__ # lazy_attr :key # end # # ConstName::key.subject # => 'value' # module LazyAttributes # The source_file for self. Must be set independently. attr_accessor :source_file # Returns the lazydoc for source_file def lazydoc(resolve=true) lazydoc = Lazydoc[source_file] lazydoc.resolve if resolve lazydoc end # Creates a lazy attribute reader for the specified attribute. def lazy_attr(key, attribute=key) instance_eval %Q{def #{key}; @#{key} ||= get_lazy_attr('#{attribute}'); end} end private def get_lazy_attr(attribute) # :nodoc: lazydoc[self.to_s][attribute] ||= Lazydoc::Comment.new end end end end