module UniaraVirtualParser::Services::Files

Public Instance Methods

files(token) click to toggle source
# File lib/uniara_virtual_parser/services/files.rb, line 4
def files(token)
  response = Client.get_with_token('/alunos/consultas/arquivos/', token)
  parse_files response.body
end

Private Instance Methods

extract_files(table, grade_selector = nil) click to toggle source
# File lib/uniara_virtual_parser/services/files.rb, line 37
def extract_files(table, grade_selector = nil)
  table.css('a').map do |file|
    link = file.attribute('href').value.match(/abrearq\('(.*)'\)/)[1]
    grade = if grade_selector
              grade_selector.call(file)
            end
    Models::File.new(name: file.text, link: link, grade: grade)
  end
end
parse_files(html) click to toggle source
# File lib/uniara_virtual_parser/services/files.rb, line 11
def parse_files(html)
  doc      = Nokogiri::HTML(html)
  files = []

  doc.css('div#conteudo ~ table').each do |table|
    #todo: create a class for each selector
    if table.css('b').first.text =~ /ARQUIVOS DISPONIBILIZADOS PELA/
      selector = ->(file) { "COORDENAÇÃO" }
      files << extract_files(table, selector)
    elsif table.css('tr td')[2].text == "Disciplina"
      selector = ->(file) { file.parent.parent.css('td:nth-child(2)').text }
      files << extract_files(table, selector)
    else
      selector = ->(file) do 
        tr = file.parent.parent
        until(tr.css('td:nth-child(2)').text == 'Tamanho')
          tr = tr.previous_element
        end
        tr.css('td:nth-child(1)').text
      end
      files << extract_files(table, selector)
    end
  end
  files.flatten.group_by(&:grade)
end