Class: Megalopolis::Subject

Inherits:
Array
  • Object
show all
Includes:
Essentials
Defined in:
lib/megalopolis/scheme.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Essentials

#param_serialize, #send_req

Constructor Details

#initialize(base_url, log) ⇒ Subject

Returns a new instance of Subject.



88
89
90
91
92
93
# File 'lib/megalopolis/scheme.rb', line 88

def initialize(base_url, log)
  @subject = fetch_subject(base_url, log)
  super(subject)
  @base_url = base_url
  @log = @subject.first.log
end

Instance Attribute Details

#base_urlObject (readonly)

Returns the value of attribute base_url.



86
87
88
# File 'lib/megalopolis/scheme.rb', line 86

def base_url
  @base_url
end

#logObject (readonly)

Returns the value of attribute log.



84
85
86
# File 'lib/megalopolis/scheme.rb', line 84

def log
  @log
end

#subjectObject (readonly)

Returns the value of attribute subject.



85
86
87
# File 'lib/megalopolis/scheme.rb', line 85

def subject
  @subject
end

Instance Method Details

#fetch_subject(base_url, log) ⇒ Object

Raises:



95
96
97
98
99
100
101
102
103
104
105
106
107
108
# File 'lib/megalopolis/scheme.rb', line 95

def fetch_subject(base_url, log)
  page = send_req(File.join(base_url, "#{log}.json"))
  obj = JSON.parse(page)["entries"]
  raise NoDocumentError, "Requested page is out of range" unless obj

  indexes = []
  obj.each do |index|
    index["url"] = URI.join(base_url, "#{log}/#{index["id"]}").to_s
    index["log"] = index["subject"]
    index.delete("subject")
    indexes << Index.new(base_url, index)
  end
  return indexes.reverse
end

#latest_logObject



121
122
123
124
# File 'lib/megalopolis/scheme.rb', line 121

def latest_log
  page = send_req(File.join(base_url, "0.json"))
  return JSON.parse(page)["entries"][0]["subject"]
end

#next_pageObject Also known as: next



110
111
112
113
# File 'lib/megalopolis/scheme.rb', line 110

def next_page
  return nil if @log-1 <= 0
  Subject.new(@base_url, @log-1)
end

#prev_pageObject Also known as: prev



116
117
118
# File 'lib/megalopolis/scheme.rb', line 116

def prev_page
  Subject.new(@base_url, @log+1)
end