You need to sign in or sign up before continuing.
Commit e24f4ced by Tô Ngọc Ánh

add autoload sub folder lib

parent 7f9aec69
Pipeline #1062 canceled with stages
in 0 seconds
......@@ -26,7 +26,7 @@
# Ignore master key for decrypting credentials and more.
/config/master.key
/lib/data
/lib/import/csv/data
/public/uploads/
.env
require './lib/common/solr_server.rb'
class JobsController < ApplicationController
before_action :get_data_search_bar, only: %i[index search]
......@@ -21,9 +19,9 @@ class JobsController < ApplicationController
def search
solr = SolrServer.new
results = solr.search(params[:search], params[:industry], params[:location], params[:page])
results = solr.search(params)
@paginatable_array = Kaminari.paginate_array(results['response']['docs'], total_count: results['response']['numFound']).page(params[:page])
@keyword = set_search_keyword(params[:search], params[:industry], params[:location])
@keyword = set_search_keyword(params)
end
private
......@@ -38,10 +36,10 @@ class JobsController < ApplicationController
@industries = Industry.select(:id, :name)
end
def set_search_keyword(keyword, industry_id, location_id)
search_text = keyword.blank? ? 'All Jobs' : keyword
industry_name = @industries.detect { |v| v.id == industry_id.to_i }.try(:name) unless industry_id.blank?
city_name = @locations.detect { |v| v.id == location_id.to_i }.try(:city) unless location_id.blank?
def set_search_keyword(search_params)
search_text = search_params[:search].blank? ? 'All Jobs' : search_params[:search]
industry_name = @industries.detect { |v| v.id == search_params[:industry_id].to_i }.try(:name) unless search_params[:industry_id].blank?
city_name = @locations.detect { |v| v.id == search_params[:location_id].to_i }.try(:city) unless search_params[:location_id].blank?
"#{search_text} #{industry_name} #{city_name}"
end
end
require './lib/common/convert_slug'
class Company < ApplicationRecord
include ConvertSlug
......
require './lib/common/convert_slug'
class Industry < ApplicationRecord
include ConvertSlug
......
require './lib/common/convert_slug.rb'
class Location < ApplicationRecord
include ConvertSlug
......
<%= form_tag search_jobs_path, method: :get, class: "mt-4 form-group #{my_class}", enforce_utf8: false do %>
<%= search_field_tag :search, params[:search], placeholder: 'Search', class: 'form-control m-2' %>
<%= select_tag :industry, options_from_collection_for_select(@industries, :id, :name, params[:industry]), prompt: 'All Industries', class: 'form-control m-2' %>
<%= select_tag :location, options_from_collection_for_select(@locations, :id, :city, params[:location]), prompt: 'All Locations', class: 'form-control m-2' %>
<%= select_tag :industry_id, options_from_collection_for_select(@industries, :id, :name, params[:industry_id]), prompt: 'All Industries', class: 'form-control m-2' %>
<%= select_tag :location_id, options_from_collection_for_select(@locations, :id, :city, params[:location_id]), prompt: 'All Locations', class: 'form-control m-2' %>
<%= submit_tag 'Search', name: nil, class: 'btn btn-outline-success m-2' %>
<% end %>
......@@ -15,5 +15,8 @@ module VeNJobAnhtn
# Application configuration can go into files in config/initializers
# -- all .rb files in that directory are automatically loaded after loading
# the framework and any gems in your application.
# Auto Load
config.autoload_paths += Dir[Rails.root.join('lib','{import,common,solr}')]
end
end
class SolrServer
def initialize
@solr = RSolr.connect(url: Settings.solr_server)
end
def search(keyword, industry_id, location_id, page)
query, fq = set_query_search(keyword, industry_id, location_id)
@solr.paginate(page, Job::NUMBER_SEARCH_RESULTS, 'select', params: { q: query, fq: fq })
end
private
def set_query_search(keyword, industry_id, location_id)
industry_id = industry_id.blank? ? "*" : RSolr.solr_escape(industry_id)
location_id = location_id.blank? ? "*" : RSolr.solr_escape(location_id)
keyword = keyword.blank? ? "*" : RSolr.solr_escape(keyword)
query = "(title:#{keyword})^5 OR company:#{keyword}"
fq = ["industry_ids:#{industry_id}", "location_ids:#{location_id}"]
[query, fq]
end
end
require 'open-uri'
class Crawler
module Crawler
class Crawler
def initialize(logger)
@logger = logger
end
......@@ -104,4 +105,5 @@ class Crawler
end
end
end
end
end
require 'csv'
require './lib/common/extract_zip'
class CsvImport
module Csv::Services
class CsvImport
include ExtractZip
def initialize(logger)
......@@ -39,4 +39,5 @@ class CsvImport
@logger.error "Job #{index}: #{e.message}"
end
end
end
end
class SolrServer
def initialize
@solr = RSolr.connect(url: Settings.solr_server)
end
def search(search_params)
query, fq = set_query_search(search_params)
@solr.paginate(search_params[:page], Job::NUMBER_SEARCH_RESULTS, 'select', params: { q: query, fq: fq })
end
private
def set_query_search(search_params)
industry_id = search_params[:industry_id].blank? ? "*" : RSolr.solr_escape(search_params[:industry_id])
location_id = search_params[:location_id].blank? ? "*" : RSolr.solr_escape(search_params[:location_id])
keyword = search_params[:search].blank? ? "*" : RSolr.solr_escape(search_params[:search])
query = "title:(#{keyword})^4 OR company:(#{keyword})^2"
fq = ["industry_ids:#{industry_id}", "location_ids:#{location_id}"]
[query, fq]
end
end
require './lib/common/ftp'
require './lib/common/csv'
require './lib/common/crawler'
namespace :import_data do
logger = Logger.new('./log/import_data.log')
desc 'crawl industries locations jobs'
task :crawler, %i[page_number link] => [:environment] do |_, args|
args.with_defaults(page_number: 1, link: 'https://careerbuilder.vn/viec-lam/tat-ca-viec-lam-vi.html')
crawler = Crawler.new(logger)
crawler = Crawler::Crawler.new(logger)
crawler.crawl_data(args[:page_number].to_i, args[:link])
end
desc 'Download csv file from FTP and import'
task csv: :environment do
destination_dir = './lib/data'
destination_dir = "#{Rails.root}/lib/import/csv/data"
Dir.mkdir destination_dir unless File.exist?(destination_dir)
ftp = Ftp.new('192.168.1.156', 'training', 'training')
ftp.download_file('jobs.zip', destination_dir)
ftp.close
csv = CsvImport.new(logger)
csv = Csv::Services::CsvImport.new(logger)
csv.extract_zip("#{destination_dir}/jobs.zip", destination_dir)
csv.import_job(destination_dir)
end
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment