Class: BrandEins::Pages::Archive

Inherits:
Object
  • Object
show all
Defined in:
lib/brandeins/pages/archive.rb

Overview

Usage of Archive

page = Archive.new(html) page.magazines_for_year(2000)

> [Magazine, Magazine, …]

page.magazine_for(month: 1, year: 2000)

> Magazine

page.magazine_for(month: 13, year: 9999)

> nil

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(opts = {}) ⇒ Archive

Returns a new instance of Archive.



25
26
27
28
# File 'lib/brandeins/pages/archive.rb', line 25

def initialize(opts = {})
  @html = opts.fetch(:html, nil)
  @magazines = {}
end

Instance Attribute Details

#htmlObject (readonly)

Returns the value of attribute html.



23
24
25
# File 'lib/brandeins/pages/archive.rb', line 23

def html
  @html
end

Instance Method Details

#archive_urlObject



75
76
77
# File 'lib/brandeins/pages/archive.rb', line 75

def archive_url
  BrandEins::Config['archive_uri']
end

#brandeins_urlObject



71
72
73
# File 'lib/brandeins/pages/archive.rb', line 71

def brandeins_url
  BrandEins::Config['base_uri']
end

#cliObject



83
84
85
# File 'lib/brandeins/pages/archive.rb', line 83

def cli
  @cli ||= BrandEins::Utils::CliOutput.instance
end

#documentObject



47
48
49
# File 'lib/brandeins/pages/archive.rb', line 47

def document
  @document ||= Nokogiri::HTML(html)
end

#extract_magazine_month(figure) ⇒ Object



66
67
68
69
# File 'lib/brandeins/pages/archive.rb', line 66

def extract_magazine_month(figure)
  meta = figure.css('.meta').first
  meta.text.match(/(?:.+)(\d{2})\/(?:.+)/) and $+.to_i
end

#extract_magazine_url(figure) ⇒ Object



62
63
64
# File 'lib/brandeins/pages/archive.rb', line 62

def extract_magazine_url(figure)
  brandeins_url + '/' + figure.css('a.read.more').first['href']
end

#fetcherObject



79
80
81
# File 'lib/brandeins/pages/archive.rb', line 79

def fetcher
  @fetcher ||= BrandEins::Utils::Fetcher.instance
end

#magazine_for(month, year) ⇒ Object



43
44
45
# File 'lib/brandeins/pages/archive.rb', line 43

def magazine_for(month, year)
  magazines_for_year(year)[month]
end

#magazines_for_year(year) ⇒ Object



39
40
41
# File 'lib/brandeins/pages/archive.rb', line 39

def magazines_for_year(year)
  @magazines[year] ||= parse_magazines_for_year(year)
end

#parse_magazines_for_year(year) ⇒ Object



51
52
53
54
55
56
57
58
59
60
# File 'lib/brandeins/pages/archive.rb', line 51

def parse_magazines_for_year(year)
  anchor = document.css("h3#anchor-#{year}").first
  root   = anchor.xpath('../../..')
  root.css('article figure').each_with_object({}) do |figure, magazines|
    magazine_url   = extract_magazine_url(figure)
    magazine_month = extract_magazine_month(figure)
    magazine = BrandEins::Pages::Magazine.new(url: magazine_url)
    magazines[magazine_month] = magazine
  end
end