class Enumark

Constants

VERSION

Public Class Methods

new(file, items: nil) click to toggle source
# File lib/enumark.rb, line 12
def initialize(file, items: nil)
  @file = file
  @lock = Mutex.new
  @items = items

  @hosts = Grouping.new(self, :host)
  @dup_titles = Grouping.new(self, :name){ |groups| groups.select{ |_, items| items.count > 1 } }
  @dup_hrefs = Grouping.new(self, :href){ |groups| groups.select{ |_, items| items.count > 1 } }
  @cates = Grouping.new(self, :categories_str)
end

Public Instance Methods

each(&block) click to toggle source
# File lib/enumark.rb, line 23
def each(&block)
  read_all_lines
  sort_by_add_date!
  @items.each(&block)
end
each_category(&block) click to toggle source
# File lib/enumark.rb, line 41
def each_category(&block)
  @cates.each(&block)
end
each_dup_href(&block) click to toggle source
# File lib/enumark.rb, line 37
def each_dup_href(&block)
  @dup_hrefs.each(&block)
end
each_dup_title(&block) click to toggle source
# File lib/enumark.rb, line 33
def each_dup_title(&block)
  @dup_titles.each(&block)
end
each_host(&block) click to toggle source
# File lib/enumark.rb, line 29
def each_host(&block)
  @hosts.each(&block)
end

Private Instance Methods

_read_all_lines() click to toggle source
# File lib/enumark.rb, line 64
def _read_all_lines
  categories = []
  @items = []

  File.new(@file).each do |line|
    case line
    when Item::PREFIX
      item = Item.new(line, categories.dup)
      @items.push(item)
    when Category::START
      categories.push(Category.new(line))
    when Category::ENDIND
      categories.pop
    end
  end
end
read_all_lines() click to toggle source
# File lib/enumark.rb, line 56
def read_all_lines
  return if @items

  @lock.synchronize do
    _read_all_lines unless @items
  end
end
sort_by_add_date!() click to toggle source
# File lib/enumark.rb, line 81
def sort_by_add_date!
  return if @sorted

  @lock.synchronize do
    next if @sorted

    @items.sort!{ |i1, i2| i2.add_date <=> i1.add_date }
    @sorted = true
  end
end