class Thes

Constants

BASE_URL
VERSION

Public Class Methods

new(query) click to toggle source
# File lib/thes.rb, line 12
def initialize(query)
  @query = query
end

Public Instance Methods

call() click to toggle source
# File lib/thes.rb, line 16
def call
  url     = URI.join(BASE_URL, CGI.escape(@query))
  html    = Nokogiri::HTML.parse(open(url))
  filters = html.search('.filters')

  tables = filters.map do |filter|
    type = filter.search('em.txt').text
    desc = filter.search('em.txt ~ strong').text

    groups = filter.search('.relevancy-block ul > li > a').group_by do |el|
      el.attr('data-category').match(/relevant-(\d+)/)[1].to_i
    end

    columns = groups.values.map do |els|
      els.map { |el| el.search('span.text').text }
    end

    columns.each(&:sort!)

    max_size = columns.max_by(&:size).size
    columns.each { |group| group.fill('', group.size, max_size - group.size) }

    rows = columns.transpose

    Terminal::Table.new(
      title: "#{type}: #{desc}",
      rows: rows,
      style: { width: 80 }
    )
  end

  tables.join("\n")
end