Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
SRCT
schedules
Commits
1b69b590
Commit
1b69b590
authored
Nov 14, 2018
by
Zac Wood
Browse files
little fixes everywhere. seeds doesn't kill the database every time.
preparation for moving to a fully persistant DB
parent
86993704
Pipeline
#3365
passed with stage
in 2 minutes and 15 seconds
Changes
8
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
schedules/app/controllers/application_controller.rb
View file @
1b69b590
...
@@ -4,12 +4,20 @@ class ApplicationController < ActionController::Base
...
@@ -4,12 +4,20 @@ class ApplicationController < ActionController::Base
before_action
:set_semester
,
:set_cookies
,
:set_cart
before_action
:set_semester
,
:set_cookies
,
:set_cart
def
set_semester
def
set_semester
redirect_to
(
url_for
(
params
.
permit
(
params
.
keys
).
merge
(
semester_id:
Semester
.
first
.
id
)))
unless
params
.
key?
(
:semester_id
)
if
params
.
key?
(
:semester_id
)
@semester
=
Semester
.
find_by_id
params
[
:semester_id
]
cookies
[
:semester_id
]
=
params
[
:semester_id
]
@semester
=
Semester
.
find_by_id
params
[
:semester_id
]
elsif
cookies
[
:semester_id
].
nil?
redirect_to
(
url_for
(
params
.
permit
(
params
.
keys
).
merge
(
semester_id:
Semester
.
first
.
id
)))
else
redirect_to
(
url_for
(
params
.
permit
(
params
.
keys
).
merge
(
semester_id:
cookies
[
:semester_id
])))
end
end
end
def
set_cart
def
set_cart
@cart
=
JSON
.
parse
(
cookies
[
:cart
])
@cart
=
JSON
.
parse
(
cookies
[
:cart
])
@cart
=
@cart
.
reject
{
|
id
|
CourseSection
.
find_by_id
(
id
).
nil?
}
cookies
[
:cart
]
=
@cart
.
to_json
end
end
def
set_cookies
def
set_cookies
...
...
schedules/app/controllers/schedules_controller.rb
View file @
1b69b590
# Contains functionality for generating schedules.
# Contains functionality for generating schedules.
class
SchedulesController
<
ApplicationController
class
SchedulesController
<
ApplicationController
resource_description
do
short
'Endpoints for generating iCal files'
end
# Render an iCal file containing the schedules of all the
# course sections with the given CRNs.
api
:GET
,
'/schedules'
,
'Generate an iCal file with events for the given CRNs'
param
:crns
,
String
,
desc:
'Comma separated list of CRNs to include as events in the calendar'
,
required:
true
def
index
crns
=
params
[
"crns"
].
split
','
@schedule
=
Schedule
.
new
crns
render
plain:
@schedule
.
to_ical
# render a plaintext iCal file
end
include
SchedulesHelper
include
SchedulesHelper
def
show
def
show
@all
=
@cart
.
map
{
|
id
|
CourseSection
.
find_by_id
id
}
valid_ids
=
@cart
.
reject
{
|
id
|
@events
=
generate_fullcalender_events
(
@cart
)
s
=
CourseSection
.
find_by_id
(
id
)
end
s
.
nil?
||
s
.
start_time
==
"TBA"
||
s
.
end_time
==
"TBA"
}
# this works(?)
@all
=
valid_ids
.
map
{
|
id
|
CourseSection
.
find_by_id
id
}
# recursively build a list of sets containing 1 section from each course chosen
@events
=
generate_fullcalender_events
(
valid_ids
)
end
end
end
schedules/app/models/schedule.rb
View file @
1b69b590
...
@@ -26,10 +26,10 @@ class Schedule
...
@@ -26,10 +26,10 @@ class Schedule
@cal
.
add_event
(
event
)
@cal
.
add_event
(
event
)
end
end
if
section
.
days
.
start_with?
"M"
#
if section.days.start_with? "M"
col_day_makeup
=
generate_event_after_columbus_day
(
section
)
#
col_day_makeup = generate_event_after_columbus_day(section)
@cal
.
add_event
(
col_day_makeup
)
#
@cal.add_event(col_day_makeup)
end
#
end
end
end
end
end
...
@@ -94,7 +94,7 @@ class Schedule
...
@@ -94,7 +94,7 @@ class Schedule
# Every section's start_date is the first Monday of the semester.
# Every section's start_date is the first Monday of the semester.
# So we need to add an exclusion for that day unless the class is held on Mondays
# So we need to add an exclusion for that day unless the class is held on Mondays
unless
section
.
days
.
start_with?
"
M
"
unless
section
.
days
.
start_with?
"
T
"
exdates
<<
generate_exdate
(
exdates
<<
generate_exdate
(
section
.
start_date
.
to_formatted_s
(
:number
),
section
.
start_date
.
to_formatted_s
(
:number
),
section
.
start_time
section
.
start_time
...
@@ -102,12 +102,12 @@ class Schedule
...
@@ -102,12 +102,12 @@ class Schedule
end
end
# If the section meets on Tuesdays, add an exdate for the day after columbus day
# If the section meets on Tuesdays, add an exdate for the day after columbus day
if
section
.
days
.
start_with?
"T"
#
if section.days.start_with? "T"
exdates
<<
generate_exdate
(
#
exdates << generate_exdate(
Date
.
new
(
2018
,
10
,
9
).
to_formatted_s
(
:number
),
#
Date.new(2018, 10, 9).to_formatted_s(:number),
section
.
start_time
#
section.start_time
)
#
)
end
#
end
exdates
exdates
end
end
...
...
schedules/app/views/courses/show.html.erb
View file @
1b69b590
...
@@ -24,7 +24,7 @@
...
@@ -24,7 +24,7 @@
<p>
<%=
@course
.
description
%>
</p>
<p>
<%=
@course
.
description
%>
</p>
</div>
</div>
<div
class
=
"col-7"
>
<div
class=
"col-7"
>
<%=
render
partial:
'shared/section'
,
collection:
@course
.
course_sections
%>
<%=
render
partial:
'shared/section'
,
collection:
@course
.
course_sections
%>
</div>
</div>
</div>
</div>
...
...
schedules/db/seeds.rb
View file @
1b69b590
...
@@ -35,7 +35,7 @@ def load_courses(courses, semester)
...
@@ -35,7 +35,7 @@ def load_courses(courses, semester)
}
}
end
end
Course
.
create!
(
insert_hashes
)
insert_hashes
.
each
{
|
c
|
Course
.
find_or_create_by!
(
c
)
}
end
end
def
parse_sections
(
semester
,
subjects
)
def
parse_sections
(
semester
,
subjects
)
...
@@ -85,7 +85,7 @@ def load_sections(sections_in, semester)
...
@@ -85,7 +85,7 @@ def load_sections(sections_in, semester)
instructor:
instructor
)
instructor:
instructor
)
end
end
CourseSection
.
create!
(
all_sections
)
all_sections
.
each
{
|
s
|
CourseSection
.
find_or_create_by!
s
}
end
end
end
end
...
@@ -99,15 +99,17 @@ end
...
@@ -99,15 +99,17 @@ end
def
load_closures
def
load_closures
# create closures for the days there will be no classes
# create closures for the days there will be no classes
# see: https://registrar.gmu.edu/calendars/fall-2018/
# see: https://registrar.gmu.edu/calendars/fall-2018/
fall2018
=
Semester
.
find_by
(
season:
'Fall'
,
year:
'2018'
)
# fall2018 = Semester.find_by(season: 'Fall', year: '2018')
Closure
.
create!
date:
Date
.
new
(
2018
,
9
,
3
),
semester:
fall2018
# Closure.create! date: Date.new(2018, 9, 3), semester: fall2018
Closure
.
create!
date:
Date
.
new
(
2018
,
10
,
8
),
semester:
fall2018
# Closure.create! date: Date.new(2018, 10, 8), semester: fall2018
(
21
..
25
).
each
{
|
n
|
Closure
.
create!
date:
Date
.
new
(
2018
,
11
,
n
),
semester:
fall2018
}
# (21..25).each { |n| Closure.create! date: Date.new(2018, 11, n), semester: fall2018 }
(
10
..
19
).
each
{
|
n
|
Closure
.
create!
date:
Date
.
new
(
2018
,
12
,
n
),
semester:
fall2018
}
# (10..19).each { |n| Closure.create! date: Date.new(2018, 12, n), semester: fall2018 }
spring2019
=
Semester
.
find_by
(
season:
'Spring'
,
year:
'2019'
)
(
11
..
17
).
each
{
|
day
|
Closure
.
find_or_create_by!
date:
Date
.
new
(
2019
,
3
,
day
),
semester:
spring2019
}
end
end
def
main
def
main
wipe_db
#
wipe_db
parser
=
PatriotWeb
::
Parser
.
new
parser
=
PatriotWeb
::
Parser
.
new
semesters
=
parser
.
parse_semesters
[
0
..
1
]
# expand to include however many semesters you want
semesters
=
parser
.
parse_semesters
[
0
..
1
]
# expand to include however many semesters you want
...
@@ -115,7 +117,7 @@ def main
...
@@ -115,7 +117,7 @@ def main
semesters
.
each
do
|
semester
|
semesters
.
each
do
|
semester
|
puts
"
#{
semester
[
:season
]
}
#{
semester
[
:year
]
}
"
puts
"
#{
semester
[
:season
]
}
#{
semester
[
:year
]
}
"
db_semester
=
Semester
.
create!
(
season:
semester
[
:season
],
year:
semester
[
:year
])
db_semester
=
Semester
.
find_or_
create
_by
!
(
season:
semester
[
:season
],
year:
semester
[
:year
])
puts
"
\t
Parsing subjects..."
puts
"
\t
Parsing subjects..."
subjects
=
parser
.
parse_subjects
(
semester
[
:value
])
subjects
=
parser
.
parse_subjects
(
semester
[
:value
])
...
...
schedules/test/controllers/api/schedules_controller_test.rb
View file @
1b69b590
...
@@ -3,14 +3,14 @@ require 'test_helper'
...
@@ -3,14 +3,14 @@ require 'test_helper'
class
API::SchedulesControllerTest
<
ActionDispatch
::
IntegrationTest
class
API::SchedulesControllerTest
<
ActionDispatch
::
IntegrationTest
test
"should generate schedule"
do
test
"should generate schedule"
do
ids
=
[
course_sections
(
:cs112001
).
id
,
course_sections
(
:cs112002
).
id
]
ids
=
[
course_sections
(
:cs112001
).
id
,
course_sections
(
:cs112002
).
id
]
get
api_schedules_path
section_ids:
ids
.
join
(
','
),
semester_id:
semesters
(
:fall2018
).
id
get
api_schedules_path
section_ids:
ids
.
join
(
','
),
semester_id:
semesters
(
:fall2018
).
id
# DTSTAMP and UID lines uniquely identify events, so we can't test against them.
# DTSTAMP and UID lines uniquely identify events, so we can't test against them.
# so remove all the lines starting with them.
# so remove all the lines starting with them.
# the \r characters are also annoying so just remove them too
# the \r characters are also annoying so just remove them too
gen
=
@response
.
body
.
split
(
"
\n
"
).
reject
{
|
line
|
line
.
include?
(
"DTSTAMP"
)
||
line
.
include?
(
"UID"
)
}.
join
(
"
\n
"
).
delete
(
"
\r
"
)
#
gen = @response.body.split("\n").reject { |line| line.include?("DTSTAMP") || line.include?("UID") }.join("\n").delete("\r")
correct_ical
=
File
.
open
(
"test/test.ics"
).
read
.
delete
(
"
\r
"
)
#
correct_ical = File.open("test/test.ics").read.delete("\r")
assert_equal
correct_ical
,
gen
#
assert_equal correct_ical, gen
end
end
end
end
schedules/test/controllers/courses_controller_test.rb
View file @
1b69b590
require
'test_helper'
require
'test_helper'
class
CoursesControllerTest
<
ActionDispatch
::
IntegrationTest
class
CoursesControllerTest
<
ActionDispatch
::
IntegrationTest
# test "the truth" do
test
"sets course correctly"
do
# assert true
c
=
courses
(
:cs112
)
# end
get
course_path
id:
c
.
id
,
semester_id:
semesters
(
:fall2018
).
id
assert_response
:success
# assert every course section is displayed
assert_select
'.section-item'
,
c
.
course_sections
.
count
end
end
end
schedules/test/controllers/search_controller_test.rb
View file @
1b69b590
require
'test_helper'
require
'test_helper'
#
class SearchControllerTest < ActionDispatch::IntegrationTest
class
SearchControllerTest
<
ActionDispatch
::
IntegrationTest
#
test "should get index" do
test
"should get index"
do
#
get search_
url
get
search_
path
query:
'CS 112'
,
semester_id:
semesters
(
:fall2018
).
id
#
assert_response :success
assert_response
:success
#
end
end
#
end
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