Implement search, show_basic, show_detail and add_to_fav for theses
This commit is contained in:
parent
311e3d9dcb
commit
d84297bde7
@ -1,3 +1,49 @@
|
|||||||
// Place all the styles related to the ThesesCrawler controller here.
|
// Place all the styles related to the thesesCrawler controller here.
|
||||||
// They will automatically be included in application.css.
|
// They will automatically be included in application.css.
|
||||||
// You can use Sass (SCSS) here: https://sass-lang.com/
|
// You can use Sass (SCSS) here: https://sass-lang.com/
|
||||||
|
|
||||||
|
.theses-list {
|
||||||
|
list-style: none;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
|
||||||
|
a {
|
||||||
|
text-decoration: none;
|
||||||
|
color: black;
|
||||||
|
}
|
||||||
|
|
||||||
|
.thesis {
|
||||||
|
line-height: 72px;
|
||||||
|
width: 100%;
|
||||||
|
padding: 8px 0 8px 0;
|
||||||
|
|
||||||
|
.list-link {
|
||||||
|
float: left;
|
||||||
|
width: 89%;
|
||||||
|
height: 72px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.thesis-title {
|
||||||
|
width: 100%;
|
||||||
|
display: inline-block;
|
||||||
|
text-align: left;
|
||||||
|
overflow: hidden;
|
||||||
|
white-space: nowrap;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
}
|
||||||
|
|
||||||
|
.add-to-fav {
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align: middle;
|
||||||
|
float: right;
|
||||||
|
width: 36px;
|
||||||
|
height: 36px;
|
||||||
|
|
||||||
|
svg {
|
||||||
|
width: 100%;
|
||||||
|
height: auto;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@ -1,13 +1,42 @@
|
|||||||
class Crawlers::ThesesCrawlerController < Crawlers::TissCrawlerController
|
class Crawlers::ThesesCrawlerController < Crawlers::TissCrawlerController
|
||||||
def show_basic
|
def show_basic
|
||||||
|
params[:api] = '/api/search/thesis/v1.0/quickSearch'
|
||||||
|
params[:search_parameter] = 'searchterm'
|
||||||
|
puts params[:search_context]
|
||||||
|
@host = TissCrawler.get_host
|
||||||
|
|
||||||
|
# TissCrawler performs general search over the available courses
|
||||||
|
@theses = TissCrawler.search(params)
|
||||||
end
|
end
|
||||||
|
|
||||||
def show_detail
|
def show_detail
|
||||||
|
params[:api] = '/api/thesis/'
|
||||||
|
|
||||||
|
@id = params[:id]
|
||||||
|
|
||||||
|
puts params
|
||||||
|
# TissCrawler fetches the person's detail information
|
||||||
|
@thesis = TissCrawler.get_thesis_details(params)
|
||||||
|
# Host is needed for image rendering
|
||||||
|
@host = TissCrawler.get_host
|
||||||
end
|
end
|
||||||
|
|
||||||
def add_to_fav
|
def add_to_fav
|
||||||
|
params[:api] = '/api/thesis/'
|
||||||
|
puts params[:id]
|
||||||
|
@thesis = TissCrawler.get_thesis_details(params)
|
||||||
|
|
||||||
|
# create stores the object to the db after creation
|
||||||
|
favorite_hash = {id: params[:id],
|
||||||
|
# the user who is currently active
|
||||||
|
user_id: current_user.id,
|
||||||
|
title: @thesis['title']['de']}
|
||||||
|
if FavoriteThesis.create(favorite_hash).valid?
|
||||||
|
FavoriteThesis.create(favorite_hash)
|
||||||
|
flash[:alert] = 'Thesis added to your favorites!'
|
||||||
|
else
|
||||||
|
flash[:alert] = 'Thesis is already favorited!'
|
||||||
|
end
|
||||||
|
redirect_back(fallback_location: search)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@ -16,6 +16,8 @@ class Crawlers::TissCrawlerController < ApplicationController
|
|||||||
# redirect to courses_show_basic, propagate the search_term
|
# redirect to courses_show_basic, propagate the search_term
|
||||||
redirect_to :controller => 'crawlers/courses_crawler', :action => :show_basic, :search_term => params[:search_term]
|
redirect_to :controller => 'crawlers/courses_crawler', :action => :show_basic, :search_term => params[:search_term]
|
||||||
when 'Theses'
|
when 'Theses'
|
||||||
|
# redirect to thesis_show_basic, propagate the search_term
|
||||||
|
redirect_to :controller => 'crawlers/theses_crawler', :action => :show_basic, :search_term => params[:search_term]
|
||||||
when 'Projects'
|
when 'Projects'
|
||||||
else
|
else
|
||||||
puts 'Undefined search context'
|
puts 'Undefined search context'
|
||||||
|
|||||||
@ -24,7 +24,14 @@ class FavoritesController < ApplicationController
|
|||||||
end
|
end
|
||||||
|
|
||||||
def theses
|
def theses
|
||||||
|
@favorite_theses = FavoriteThesis.where('user_id': current_user.id)
|
||||||
|
.order(sort_column + " " + sort_direction)
|
||||||
|
@host = 'https://tiss.tuwien.ac.at'
|
||||||
|
end
|
||||||
|
|
||||||
|
def delete_thesis
|
||||||
|
FavoriteThesis.find_by(id: params[:id]).destroy
|
||||||
|
redirect_back(fallback_location: theses)
|
||||||
end
|
end
|
||||||
|
|
||||||
def projects
|
def projects
|
||||||
|
|||||||
5
app/models/favorite_thesis.rb
Normal file
5
app/models/favorite_thesis.rb
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
class FavoriteThesis < ApplicationRecord
|
||||||
|
self.primary_key = 'id'
|
||||||
|
|
||||||
|
validates :id, uniqueness: true
|
||||||
|
end
|
||||||
20
app/views/crawlers/theses_crawler/show_basic.html.erb
Normal file
20
app/views/crawlers/theses_crawler/show_basic.html.erb
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
<h1>Results for "<%= params[:search_term] %>"</h1>
|
||||||
|
|
||||||
|
<ul class="theses-list">
|
||||||
|
<% @theses.each_with_index do |thesis| %>
|
||||||
|
<li class="thesis">
|
||||||
|
<%= link_to crawlers_theses_crawler_show_detail_url(:id => thesis['id'], :title => thesis['title']) do %>
|
||||||
|
<span class="list-link">
|
||||||
|
<span class="thesis-title">
|
||||||
|
<%= thesis['title'] %>
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
<% end %>
|
||||||
|
<span class="add-to-fav">
|
||||||
|
<%= link_to crawlers_theses_crawler_add_to_fav_url(:id => thesis['id'], :title => thesis['title']) do %>
|
||||||
|
<%= show_svg('favorite-24px.svg') %>
|
||||||
|
<% end %>
|
||||||
|
</span>
|
||||||
|
</li>
|
||||||
|
<% end %>
|
||||||
|
</ul>
|
||||||
5
app/views/crawlers/theses_crawler/show_detail.html.erb
Normal file
5
app/views/crawlers/theses_crawler/show_detail.html.erb
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
<% if @thesis != nil %>
|
||||||
|
<h2><%= @thesis['title']['de'] %></h2>
|
||||||
|
<h5><%= @thesis['thesisType'] %>, <%= @thesis['instituteCode'] %> <%= @thesis['instituteName']['de'] %></h5>
|
||||||
|
<%= button_to 'Add to favorites', action: :add_to_fav, id: @id, title: @thesis['title']['de'] %>
|
||||||
|
<% end %>
|
||||||
@ -22,6 +22,14 @@ Rails.application.routes.draw do
|
|||||||
get 'add_to_fav'
|
get 'add_to_fav'
|
||||||
post 'add_to_fav'
|
post 'add_to_fav'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
namespace :theses_crawler do
|
||||||
|
get 'show_basic'
|
||||||
|
get 'show_detail'
|
||||||
|
post 'show_detail'
|
||||||
|
get 'add_to_fav'
|
||||||
|
post 'add_to_fav'
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
namespace :favorites do
|
namespace :favorites do
|
||||||
@ -30,6 +38,7 @@ Rails.application.routes.draw do
|
|||||||
get 'courses'
|
get 'courses'
|
||||||
delete 'delete_course'
|
delete 'delete_course'
|
||||||
get 'theses'
|
get 'theses'
|
||||||
|
delete 'delete_thesis'
|
||||||
get 'projects'
|
get 'projects'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
12
db/migrate/20200525132942_create_favorite_theses.rb
Normal file
12
db/migrate/20200525132942_create_favorite_theses.rb
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
class CreateFavoriteTheses < ActiveRecord::Migration[6.0]
|
||||||
|
def change
|
||||||
|
create_table :favorite_theses, id: false do |t|
|
||||||
|
t.integer :id, null: false
|
||||||
|
t.integer :user_id, null: false
|
||||||
|
t.string :title
|
||||||
|
|
||||||
|
t.timestamps
|
||||||
|
end
|
||||||
|
add_index :favorite_theses, :id, unique: true
|
||||||
|
end
|
||||||
|
end
|
||||||
11
db/schema.rb
11
db/schema.rb
@ -10,7 +10,7 @@
|
|||||||
#
|
#
|
||||||
# It's strongly recommended that you check this file into your version control system.
|
# It's strongly recommended that you check this file into your version control system.
|
||||||
|
|
||||||
ActiveRecord::Schema.define(version: 2020_05_21_091231) do
|
ActiveRecord::Schema.define(version: 2020_05_25_132942) do
|
||||||
|
|
||||||
create_table "favorite_courses", force: :cascade do |t|
|
create_table "favorite_courses", force: :cascade do |t|
|
||||||
t.string "number", null: false
|
t.string "number", null: false
|
||||||
@ -33,6 +33,15 @@ ActiveRecord::Schema.define(version: 2020_05_21_091231) do
|
|||||||
t.index ["tiss_id"], name: "index_favorite_people_on_tiss_id", unique: true
|
t.index ["tiss_id"], name: "index_favorite_people_on_tiss_id", unique: true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
create_table "favorite_theses", id: false, force: :cascade do |t|
|
||||||
|
t.integer "id", null: false
|
||||||
|
t.integer "user_id", null: false
|
||||||
|
t.string "title"
|
||||||
|
t.datetime "created_at", precision: 6, null: false
|
||||||
|
t.datetime "updated_at", precision: 6, null: false
|
||||||
|
t.index ["id"], name: "index_favorite_theses_on_id", unique: true
|
||||||
|
end
|
||||||
|
|
||||||
create_table "users", force: :cascade do |t|
|
create_table "users", force: :cascade do |t|
|
||||||
t.string "email", default: "", null: false
|
t.string "email", default: "", null: false
|
||||||
t.string "encrypted_password", default: "", null: false
|
t.string "encrypted_password", default: "", null: false
|
||||||
|
|||||||
@ -36,6 +36,16 @@ class TissCrawler
|
|||||||
response.parsed_response['tuvienna']['course']
|
response.parsed_response['tuvienna']['course']
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def self.get_thesis_details(params)
|
||||||
|
api = params[:api]
|
||||||
|
id = params[:id]
|
||||||
|
url = $host + api + id
|
||||||
|
puts(url)
|
||||||
|
|
||||||
|
response = HTTParty.get(url)
|
||||||
|
response.parsed_response['tuvienna']['thesis']
|
||||||
|
end
|
||||||
|
|
||||||
def self.get_host
|
def self.get_host
|
||||||
$host
|
$host
|
||||||
end
|
end
|
||||||
|
|||||||
11
test/fixtures/favorite_theses.yml
vendored
Normal file
11
test/fixtures/favorite_theses.yml
vendored
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
# Read about fixtures at https://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
|
||||||
|
|
||||||
|
# This model initially had no columns defined. If you add columns to the
|
||||||
|
# model remove the '{}' from the fixture names and add the columns immediately
|
||||||
|
# below each fixture, per the syntax in the comments below
|
||||||
|
#
|
||||||
|
one: {}
|
||||||
|
# column: value
|
||||||
|
#
|
||||||
|
two: {}
|
||||||
|
# column: value
|
||||||
7
test/models/favorite_thesis_test.rb
Normal file
7
test/models/favorite_thesis_test.rb
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
require 'test_helper'
|
||||||
|
|
||||||
|
class FavoriteThesisTest < ActiveSupport::TestCase
|
||||||
|
# test "the truth" do
|
||||||
|
# assert true
|
||||||
|
# end
|
||||||
|
end
|
||||||
Loading…
x
Reference in New Issue
Block a user