Class: WikiReader

Inherits:
Object
  • Object
show all
Defined in:
lib/wikipedia.rb

Constant Summary collapse

@@http =

HTTP

HTTPClient.new
@@db =

Our database

Format: @db = {'en' => ['link_a', 'link_b', ...], 'pt' => ['link_c', ...]}
A language with a "nil" value means it wasn't initialized yet and we should
 call fetch_vital before use it
nil
@@sizes =
{}

Class Method Summary collapse

Class Method Details

.article(title, language = 'en') ⇒ Object

Raises:

  • (Errno::ENOENT)


29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/wikipedia.rb', line 29

def self.article(title, language = 'en')
  raise Errno::ENOENT if ! db.key?(language) # invalid language
  db[language] = fetch_vital(language) if ! db[language] # not initialized

  art = fetch_article(title, language) # read from the internet
  raise Errno::ENOENT if ! art
  db[language] << title if art && ! db[language].index(title) # adds in our list

  @@sizes[language] ||= {}
  @@sizes[language][title] = art.bytesize

  art
end

.articles(language = 'en') ⇒ Object

all articles in memory



18
19
20
21
22
23
# File 'lib/wikipedia.rb', line 18

def self.articles(language = 'en')
  return nil if ! db.key?(language) # invalid language
  db[language] = fetch_vital(language) if ! db[language] # not initialized

  db[language]
end

.dbObject



48
49
50
51
# File 'lib/wikipedia.rb', line 48

def self.db
  return @@db if @@db
  @@db = Hash[fetch_languages.collect { |item| [item, nil] }]
end

.languagesObject



25
26
27
# File 'lib/wikipedia.rb', line 25

def self.languages
  db.keys
end

.size(title, language = 'en') ⇒ Object



43
44
45
46
# File 'lib/wikipedia.rb', line 43

def self.size(title, language = 'en')
  @@sizes[language] ||= {}
  @@sizes[language][title] || 1
end