Sha256: 93455dfc6701482026f7561a31e63d93411fef2657017adaa1adbaf99fb7633e

Contents?: true

Size: 1.02 KB

Versions: 4

Compression:

Stored size: 1.02 KB

Contents

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

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
ever_exp-0.1.3 lib/ever_exp/notes.rb
ever_exp-0.1.2 lib/ever_exp/notes.rb
ever_exp-0.1.1 lib/ever_exp/notes.rb
ever_exp-0.1.0 lib/ever_exp/notes.rb