Sha256: 462f5f4de33fc53df148d2befe50d0f47bc792ba8212083185fdbef97730cad3

Contents?: true

Size: 1.8 KB

Versions: 6

Compression:

Stored size: 1.8 KB

Contents

# Container for a set of pages with methods for manipulation.
class PageSet < Array
  attr_reader :web

  def initialize(web, pages, accept_proc)
    @web = web
    if accept_proc.nil? then 
      super(pages)
    else
      super(pages.select { |page| accept_proc[page] })
    end
  end

  def most_recent_revision
    self.sort_by { |page| [page.created_at] }.reverse.first.created_at
  end

  def by_name
    self.sort_by { |page| [page.name] } 
  end

  def by_revision
    self.sort_by { |page| [page.created_at] }.reverse 
  end
  
  def by_last_visited #{{{
    self.sort_by { |page| [page.last_visited] }.reverse
  end #}}}
  
  def by_most_viewed #{{{
    self.sort_by { |page| [page.viewed] }.reverse
  end #}}}
  

  def pages_that_reference(page_name)
    self.select { |page| page.wiki_words.include?(page_name) }
  end

  def pages_authored_by(author)
    self.select { |page| page.authors.include?(author) }
  end

  def characters
    self.inject(0) { |chars,page| chars += page.content.size }
  end

  # Returns all the orphaned pages in this page set. That is,
  # pages in this set for which there is no reference in the web.
  # The HomePage and author pages are always assumed to have
  # references and so cannot be orphans
  def orphaned_pages
    references = web.select.wiki_words + ["HomePage"] + web.select.authors
    self.reject { |page| references.include?(page.name) } 
  end

  # Returns all the wiki words in this page set for which
  # there are no pages in this page set's web
  def wanted_pages
    wiki_words - web.select.names
  end

  def names
    self.map { |page| page.name }
  end

  def wiki_words
    self.inject([]) { |wiki_words, page| wiki_words << page.wiki_words }.flatten.uniq
  end

  def authors
    self.inject([]) { |authors, page| authors << page.authors }.flatten.uniq.sort
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
Pimki-1.5.092 app/models/page_set.rb
Pimki-1.4.092 app/models/page_set.rb
Pimki-1.7.092 app/models/page_set.rb
Pimki-1.8.092 app/models/page_set.rb
Pimki-1.8.200 app/models/page_set.rb
Pimki-1.6.092 app/models/page_set.rb