class Jobbie::App

Attributes

company[R]
title[R]
url[R]

Public Class Methods

new(url:, dictionary: {}, title: nil, location: nil, company: nil) click to toggle source
# File lib/jobbie/app.rb, line 7
def initialize(url:, dictionary: {}, title: nil, location: nil, company: nil)
  @url = url
  @dictionary = dictionary
  @title = title
  @location = location
  @company = company
end

Public Instance Methods

jobs() click to toggle source
# File lib/jobbie/app.rb, line 44
def jobs
  jobs_elements.map { |job| self.class.new to_job_params(job).merge(dictionary: @dictionary) }
end
location() click to toggle source
# File lib/jobbie/app.rb, line 33
def location
  @location ||= begin
    element = find location_selector
    element.text.split(%r{[,\/]})[0].strip if element
  end
end
required_skills() click to toggle source
# File lib/jobbie/app.rb, line 23
def required_skills
  title.scan(regexp(@dictionary[:skills])).flatten
end
seniority() click to toggle source
# File lib/jobbie/app.rb, line 19
def seniority
  scan(%w(Junior Júnior Senior Sênior Pleno)).first
end

Private Instance Methods

build_url(path) click to toggle source
# File lib/jobbie/app.rb, line 92
def build_url(path)
  uri = URI url
  "#{uri.scheme}://#{uri.host}#{path}"
end
doc() click to toggle source
# File lib/jobbie/app.rb, line 70
def doc
  @doc ||= Nokogiri(open(@url).read, nil, 'utf-8').tap do |doc|
    doc.css(selectors_to_remove).remove if selectors_to_remove
  end
end
document_text() click to toggle source
# File lib/jobbie/app.rb, line 66
def document_text
  doc.text
end
find(selector) click to toggle source
# File lib/jobbie/app.rb, line 58
def find(selector)
  doc.css(selector).first
end
jobs_elements() click to toggle source
# File lib/jobbie/app.rb, line 50
def jobs_elements
  doc.css(jobs_selector)
end
path_to_url(path) click to toggle source
# File lib/jobbie/app.rb, line 88
def path_to_url(path)
  path.start_with?('http') ? path : build_url(path)
end
regexp(values) click to toggle source
# File lib/jobbie/app.rb, line 76
def regexp(values)
  /(?:\s(?:|\W)|^)(#{values.sort { |x, y| y <=> x }.map { |value| Regexp.escape(value).gsub("\\ ", "[\\ \\-]") }.join("|")})(?:\s|\W\s|$)/i
end
scan(values) click to toggle source
# File lib/jobbie/app.rb, line 62
def scan(values)
  document_text.gsub(%r{,|\/}, ' ').scan(regexp(values)).flatten.uniq(&:downcase)
end
selectors_to_remove() click to toggle source
# File lib/jobbie/app.rb, line 84
def selectors_to_remove
  'script, aside'
end
title_selector() click to toggle source
# File lib/jobbie/app.rb, line 80
def title_selector
  'h1'
end
title_text() click to toggle source
# File lib/jobbie/app.rb, line 54
def title_text
  doc.css(title_selector).map(&:text).join(' ')
end
value_from(element) click to toggle source
# File lib/jobbie/app.rb, line 97
def value_from(element)
  element.text if element
end