thes/lib/thes.rb

50 lines
1.1 KiB
Ruby

require "thes/version"
require 'uri'
require 'cgi'
require 'open-uri'
require 'nokogiri'
require 'terminal-table'
class Thes
BASE_URL = 'http://www.thesaurus.com/browse/'.freeze
def initialize(query)
@query = query
end
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
end