require 'ever_exp/html'
require 'ever_exp/files'
require 'ever_exp/note'
require 'delegate'
module EverExp
class Notes < DelegateClass(Array)
def initialize dir
group_into_notes files_in dir
super notes_hash.values
remove_instance_variable :@notes_hash
end
def group_by_tag
tag_groups = Hash.new { |hash, tag| hash[tag] = [] }
each do |note|
note.tag_array.each do |tag|
tag_groups[tag] << note
end
end
tag_groups
end
private
def files_in dir
wildcast = File.join dir, '*'
Dir[wildcast]
end
def group_into_notes files
files.each do |file|
html_or_files = classify file
note = notes_hash[html_or_files.name]
note << html_or_files
end
end
def classify file
klass = File.extname(file) == '.html' ? EverExp::Html : EverExp::Files
klass.new file
end
def notes_hash
@notes_hash ||= Hash.new { |hash, name| hash[name] = EverExp::Note.new }
end
end
end