Class | Ronn::Index |
In: |
lib/ronn/index.rb
|
Parent: | Object |
Maintains a list of links / references to manuals and other resources.
path | [R] | |
references | [R] |
Retrieve an Index for <path>, where <path> is a directory or normal file. The index is loaded from the corresponding index.txt file if one exists.
# File lib/ronn/index.rb, line 15 15: def self.[](path) 16: (@indexes ||= {})[index_path_for_file(path)] ||= 17: Index.new(index_path_for_file(path)) 18: end
# File lib/ronn/index.rb, line 20 20: def self.index_path_for_file(file) 21: File.expand_path( 22: if File.directory?(file) 23: File.join(file, 'index.txt') 24: else 25: File.join(File.dirname(file), 'index.txt') 26: end 27: ) 28: end
# File lib/ronn/index.rb, line 30 30: def initialize(path, &bk) 31: @path = path 32: @references = [] 33: @manuals = {} 34: 35: if block_given? 36: read! yield 37: elsif exist? 38: read! File.read(path) 39: end 40: end
# File lib/ronn/index.rb, line 89 89: def <<(path) 90: raise ArgumentError, "local paths only" if path =~ /(https?|mailto):/ 91: return self if any? { |ref| ref.path == File.expand_path(path) } 92: relative_path = relative_to_index(path) 93: @references << \ 94: if path =~ /\.ronn?$/ 95: reference manual(path).reference_name, relative_path 96: else 97: reference File.basename(path), relative_path 98: end 99: self 100: end
# File lib/ronn/index.rb, line 81 81: def [](name) 82: references.find { |ref| ref.name == name } 83: end
# File lib/ronn/index.rb, line 102 102: def add_manual(manual) 103: @manuals[File.expand_path(manual.path)] = manual 104: self << manual.path 105: end
Enumerable and friends
# File lib/ronn/index.rb, line 61 61: def each(&bk) 62: references.each(&bk) 63: end
Determine whether the index file exists.
# File lib/ronn/index.rb, line 43 43: def exist? 44: File.exist?(path) 45: end
# File lib/ronn/index.rb, line 107 107: def manual(path) 108: @manuals[File.expand_path(path)] ||= Document.new(path) 109: end
# File lib/ronn/index.rb, line 111 111: def manuals 112: select { |ref| ref.relative? && ref.ronn? }. 113: map { |ref| manual(ref.path) } 114: end
Load index data from a string.
# File lib/ronn/index.rb, line 48 48: def read!(data) 49: data.each_line do |line| 50: line = line.strip.gsub(/\s*#.*$/, '') 51: if !line.empty? 52: name, url = line.split(/ +/, 2) 53: @references << reference(name, url) 54: end 55: end 56: end
# File lib/ronn/index.rb, line 85 85: def reference(name, path) 86: Reference.new(self, name, path) 87: end
# File lib/ronn/index.rb, line 131 131: def relative_to_index(path) 132: path = File.expand_path(path) 133: index_dir = File.dirname(File.expand_path(self.path)) 134: path.sub(/^#{index_dir}\//, '') 135: end