class Request

Attributes

params_arr[R]

Public Class Methods

new(args) click to toggle source
# File lib/data/request.rb, line 5
def initialize(args)
  @jobs = []
  @title = args.title
  @min_salary = args.min_salary
  @state = args.state
  @country = args.country
  @min_grade = args.min_grade
  @keywords = args.keywords
  @keywords_or = args.keywords_or
  @gmail_usr = args.gmail_usr
  @gmail_pwd = args.gmail_pwd
  @email_to_addr = args.email_to_addr
  @params_arr = Array.new
  build_params

  @usajobs_uri = 'https://data.usajobs.gov/api/jobs'
  @usagov_uri = 'http://registry.usa.gov/accounts.json'
  @usagov_params = {'service_id' => 'github'}
end

Public Instance Methods

build_keywords_params(params) click to toggle source
# File lib/data/request.rb, line 46
def build_keywords_params(params)
  # only one of keywords or keywords_or is allowed as a param
  if @keywords.nil? && @keywords_or.nil?
    @params_arr << params
  elsif !@keywords.nil?
    keyword = ''
    @keywords.each_with_index do |x,i|
      i == 0 ? keyword = x : keyword << " #{x}"
    end
    params.merge!('Keyword' => keyword)
    @params_arr << params
  elsif !@keywords_or.nil?
    @keywords_or.each do |x|
      new_params = params.clone
      new_params['Keyword'] = x
      @params_arr << new_params
    end
  end
end
build_params() click to toggle source
# File lib/data/request.rb, line 25
def build_params
  params = {}
  unless @title.nil?
    params.merge!('Title' => @title)
  end
  unless @min_salary.nil?
    params.merge!('MinSalary' => @min_salary)
  end
  unless @state.nil?
    params.merge!('CountrySubDivision' => @state)
  end
  unless @country.nil?
    params.merge!('Country' => @country)
  end
  unless @min_grade.nil?
    params.merge!('GradeLow' => @min_grade)
  end

  build_keywords_params(params)
end
email() click to toggle source
# File lib/data/request.rb, line 90
def email
  unless @gmail_usr.nil? || @gmail_pwd.nil? || @email_to_addr.nil?
    send_email(@gmail_usr, @gmail_pwd, @email_to_addr)
  end
end
get_jobs() click to toggle source
# File lib/data/request.rb, line 66
def get_jobs
  usagov_response = get_data(@usagov_uri, @usagov_params)
  jobs = []

  # at the time, keyword OR searches are not supported by usajobs. so need to make multiple calls for each OR keyword.
  # if keyword not provided or only one keyword, there will only be one entry in this array.
  @params_arr.each do |x|
    jobs = Response.new(get_data(@usajobs_uri, x), usagov_response).jobs
    if @jobs.length == 0
      @jobs << jobs
    else
      jobs.each do |x|
        matches = @jobs.select {|job_data| job_data.id == x.id } 
        if matches.length == 0
          @jobs << x
        end
      end
    end
    @jobs.flatten!
  end
  
  @jobs
end