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