Sha256: ced9d15e338f1d47e93e81a3d55445d1820fd206e713f5265ad00669a90089a4

Contents?: true

Size: 1.72 KB

Versions: 2

Compression:

Stored size: 1.72 KB

Contents

class Rollin::Blog
  def initialize(options = {})
    @articles_folder = options[:articles_folder] || 'articles'
  end

  def article(search = {})
    unfiltered_articles.find { |article| article.matches?(search) }
  end

  def articles(search = {})
    unfiltered_articles.select { |article| article.matches?(search) }
  end

  def unfiltered_articles
    read_articles.reverse
  end

  def metatags
    metatag_labels = unfiltered_articles.map do |article|
      article.metatags.keys
    end.flatten.uniq

    metatag_labels.map do |metatag_label|
      values = unfiltered_articles.select { |article| article.metatags.has_key?(metatag_label) }.map do |article|
        article.metatags[metatag_label]
      end.flatten.uniq.map do |metatag_content|
        Rollin::MetatagValue.new(metatag_content, articles(metatag_label => metatag_content))
      end
      Rollin::MetatagKey.new(metatag_label, values)
    end
  end

  def annual_archive
    monthly_archive.map { |month_archive| month_archive.year }.uniq.map do |year|
      Rollin::YearArchive.new(year, monthly_archive.select { |aMonth| aMonth.year == year })
    end
  end

  def monthly_archive
    articles.map { |article| [article.year, article.month] }.uniq.map do |year_and_month|
      year = year_and_month[0]
      month = year_and_month[1]
      articles_for_month = articles.select { |anArticle| anArticle.year == year && anArticle.month == month }
      Rollin::MonthArchive.new(year, month, articles_for_month)
    end
  end

  private

  def read_articles
    extensions = %w{markdown mdown mkdn md mkd mdwn mdtxt mdtext text}
    Dir[*extensions.map { |ext| "#{@articles_folder}/**/*.#{ext}" }].sort.map do |article_source|
      Rollin::Article.new(article_source)
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
rollin-0.2.2 lib/rollin/blog.rb
rollin-0.2.1 lib/rollin/blog.rb