Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
V
VeNJob
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Tô Ngọc Ánh
VeNJob
Commits
e24f4ced
Commit
e24f4ced
authored
Sep 03, 2020
by
Tô Ngọc Ánh
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add autoload sub folder lib
parent
7f9aec69
Pipeline
#1062
canceled with stages
in 0 seconds
Changes
12
Pipelines
1
Show whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
42 additions
and
48 deletions
+42
-48
.gitignore
+1
-1
app/controllers/jobs_controller.rb
+6
-8
app/models/company.rb
+0
-2
app/models/industry.rb
+0
-2
app/models/location.rb
+0
-2
app/views/shared/_searchbar.html.erb
+2
-2
config/application.rb
+3
-0
lib/common/solr_server.rb
+0
-21
lib/import/crawler/crawler.rb
+3
-1
lib/import/csv/services/csv_import.rb
+3
-2
lib/solr/solr_server.rb
+21
-0
lib/tasks/import_data.rake
+3
-7
No files found.
.gitignore
View file @
e24f4ced
...
...
@@ -26,7 +26,7 @@
# Ignore master key for decrypting credentials and more.
/config/master.key
/lib/data
/lib/
import/csv/
data
/public/uploads/
.env
app/controllers/jobs_controller.rb
View file @
e24f4ced
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
app/models/company.rb
View file @
e24f4ced
require
'./lib/common/convert_slug'
class
Company
<
ApplicationRecord
include
ConvertSlug
...
...
app/models/industry.rb
View file @
e24f4ced
require
'./lib/common/convert_slug'
class
Industry
<
ApplicationRecord
include
ConvertSlug
...
...
app/models/location.rb
View file @
e24f4ced
require
'./lib/common/convert_slug.rb'
class
Location
<
ApplicationRecord
include
ConvertSlug
...
...
app/views/shared/_searchbar.html.erb
View file @
e24f4ced
<%=
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
%>
config/application.rb
View file @
e24f4ced
...
...
@@ -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
lib/common/solr_server.rb
deleted
100644 → 0
View file @
7f9aec69
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
lib/
common
/crawler.rb
→
lib/
import/crawler
/crawler.rb
View file @
e24f4ced
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
lib/
common/csv
.rb
→
lib/
import/csv/services/csv_import
.rb
View file @
e24f4ced
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
lib/solr/solr_server.rb
0 → 100644
View file @
e24f4ced
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
lib/tasks/import_data.rake
View file @
e24f4ced
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
::
Csv
Import
.
new
(
logger
)
csv
.
extract_zip
(
"
#{
destination_dir
}
/jobs.zip"
,
destination_dir
)
csv
.
import_job
(
destination_dir
)
end
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment