sambal-cle 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.md +4 -0
- data/lib/sambal-cle/base_page.rb +20 -0
- data/lib/sambal-cle/core-ext.rb +90 -0
- data/lib/sambal-cle/data_objects/announcement.rb +82 -0
- data/lib/sambal-cle/data_objects/assessment.rb +32 -0
- data/lib/sambal-cle/data_objects/assignment.rb +205 -0
- data/lib/sambal-cle/data_objects/blog.rb +46 -0
- data/lib/sambal-cle/data_objects/blogger.rb +49 -0
- data/lib/sambal-cle/data_objects/chat_room.rb +54 -0
- data/lib/sambal-cle/data_objects/event.rb +89 -0
- data/lib/sambal-cle/data_objects/forum.rb +212 -0
- data/lib/sambal-cle/data_objects/lesson.rb +185 -0
- data/lib/sambal-cle/data_objects/message.rb +57 -0
- data/lib/sambal-cle/data_objects/poll.rb +74 -0
- data/lib/sambal-cle/data_objects/resource.rb +209 -0
- data/lib/sambal-cle/data_objects/site.rb +295 -0
- data/lib/sambal-cle/data_objects/syllabus.rb +73 -0
- data/lib/sambal-cle/data_objects/web_content_tool.rb +51 -0
- data/lib/sambal-cle/data_objects/wiki.rb +63 -0
- data/lib/sambal-cle/date_makers.rb +118 -0
- data/lib/sambal-cle/gem_ext.rb +23 -0
- data/lib/sambal-cle/page_helper.rb +22 -0
- data/lib/sambal-cle/page_maker.rb +48 -0
- data/lib/sambal-cle/page_objects/account.rb +111 -0
- data/lib/sambal-cle/page_objects/aliases.rb +43 -0
- data/lib/sambal-cle/page_objects/announcements.rb +190 -0
- data/lib/sambal-cle/page_objects/assessments.rb +874 -0
- data/lib/sambal-cle/page_objects/assignments.rb +770 -0
- data/lib/sambal-cle/page_objects/basic_lti.rb +6 -0
- data/lib/sambal-cle/page_objects/blogger.rb +205 -0
- data/lib/sambal-cle/page_objects/blogs.rb +60 -0
- data/lib/sambal-cle/page_objects/calendar.rb +330 -0
- data/lib/sambal-cle/page_objects/calendar_summary.rb +1 -0
- data/lib/sambal-cle/page_objects/chat_room.rb +22 -0
- data/lib/sambal-cle/page_objects/drop_box.rb +9 -0
- data/lib/sambal-cle/page_objects/email_archive.rb +22 -0
- data/lib/sambal-cle/page_objects/entity_picker.rb +62 -0
- data/lib/sambal-cle/page_objects/evaluations.rb +158 -0
- data/lib/sambal-cle/page_objects/feedback.rb +36 -0
- data/lib/sambal-cle/page_objects/forms.rb +120 -0
- data/lib/sambal-cle/page_objects/forums.rb +254 -0
- data/lib/sambal-cle/page_objects/glossary.rb +117 -0
- data/lib/sambal-cle/page_objects/gradebook.rb +29 -0
- data/lib/sambal-cle/page_objects/gradebook2.rb +17 -0
- data/lib/sambal-cle/page_objects/home.rb +36 -0
- data/lib/sambal-cle/page_objects/jforums.rb +444 -0
- data/lib/sambal-cle/page_objects/job_scheduler.rb +121 -0
- data/lib/sambal-cle/page_objects/lessons.rb +361 -0
- data/lib/sambal-cle/page_objects/login.rb +28 -0
- data/lib/sambal-cle/page_objects/matrix.rb +241 -0
- data/lib/sambal-cle/page_objects/media_gallery.rb +13 -0
- data/lib/sambal-cle/page_objects/messages.rb +622 -0
- data/lib/sambal-cle/page_objects/my_workspace.rb +44 -0
- data/lib/sambal-cle/page_objects/news.rb +8 -0
- data/lib/sambal-cle/page_objects/podcasts.rb +27 -0
- data/lib/sambal-cle/page_objects/polls.rb +69 -0
- data/lib/sambal-cle/page_objects/portfolio_templates.rb +161 -0
- data/lib/sambal-cle/page_objects/portfolios.rb +162 -0
- data/lib/sambal-cle/page_objects/post_em.rb +1 -0
- data/lib/sambal-cle/page_objects/profile.rb +51 -0
- data/lib/sambal-cle/page_objects/profile2.rb +344 -0
- data/lib/sambal-cle/page_objects/public_search.rb +61 -0
- data/lib/sambal-cle/page_objects/realms.rb +19 -0
- data/lib/sambal-cle/page_objects/resources.rb +326 -0
- data/lib/sambal-cle/page_objects/resources_roster.rb +0 -0
- data/lib/sambal-cle/page_objects/rosters.rb +70 -0
- data/lib/sambal-cle/page_objects/rwiki.rb +34 -0
- data/lib/sambal-cle/page_objects/search.rb +34 -0
- data/lib/sambal-cle/page_objects/sections.rb +295 -0
- data/lib/sambal-cle/page_objects/single_user.rb +1 -0
- data/lib/sambal-cle/page_objects/site_setup.rb +621 -0
- data/lib/sambal-cle/page_objects/site_statistics.rb +1 -0
- data/lib/sambal-cle/page_objects/sites.rb +255 -0
- data/lib/sambal-cle/page_objects/styles.rb +74 -0
- data/lib/sambal-cle/page_objects/syllabus.rb +166 -0
- data/lib/sambal-cle/page_objects/user_membership.rb +57 -0
- data/lib/sambal-cle/page_objects/users.rb +88 -0
- data/lib/sambal-cle/randomizers.rb +117 -0
- data/lib/sambal-cle/rich_text.rb +38 -0
- data/lib/sambal-cle/utilities.rb +31 -0
- data/lib/sambal-cle/workflows.rb +223 -0
- data/lib/sambal-cle.rb +31 -0
- data/sambal-cle.gemspec +14 -0
- data/test/add_assignment_to_calendar_spec.rb +86 -0
- data/test/assignment_announcements_spec.rb +71 -0
- data/test/assignment_gradebook_spec.rb +98 -0
- data/test/config.yml.template +4 -0
- data/test/directory.yml.template +123 -0
- data/test/duplicate_site_spec.rb +244 -0
- metadata +167 -0
data/README.md
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
class BasePage < PageMaker
|
2
|
+
|
3
|
+
class << self
|
4
|
+
|
5
|
+
def frame_element
|
6
|
+
element(:frm) { |b| b.frame(:class=>"portletMainIframe") }
|
7
|
+
end
|
8
|
+
|
9
|
+
def basic_page_elements
|
10
|
+
# Returns the text of the error message box
|
11
|
+
value(:alert_box) { |b| b.frm.div(:class=>"alertMessage").text }
|
12
|
+
# Returns the text of the header.
|
13
|
+
value(:header) { |b| b.frm.div(:class=>"portletBody").h3.text }
|
14
|
+
end
|
15
|
+
|
16
|
+
# More element group defs go here...
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
@@ -0,0 +1,90 @@
|
|
1
|
+
class Time
|
2
|
+
|
3
|
+
# Using the :year_range option (or no option), this method creates a
|
4
|
+
# Time object of a random value, within
|
5
|
+
# the year range specified (default is 5 years in the past).
|
6
|
+
#
|
7
|
+
# Using the :series option, this method returns an array
|
8
|
+
# containing a randomized Time object as its first element (limited by
|
9
|
+
# the specified :year_range value). Subsequent elements will be Time objects
|
10
|
+
# with values putting them later than the prior element, within the specified
|
11
|
+
# range value (see examples).
|
12
|
+
#
|
13
|
+
# Usage Examples:
|
14
|
+
# @example
|
15
|
+
# a random date...
|
16
|
+
# ?> Time.random
|
17
|
+
# => Tue Aug 05 00:00:00 EDT 2007
|
18
|
+
#
|
19
|
+
# birthdays, anyone?...
|
20
|
+
# 5.times { p Time.random(:year_range=>80) }
|
21
|
+
# Wed Feb 06 00:00:00 EDT 1974
|
22
|
+
# Tue Dec 22 00:00:00 EST 1992
|
23
|
+
# Fri Apr 14 00:00:00 EWT 1944
|
24
|
+
# Thu Jul 01 00:00:00 EDT 1993
|
25
|
+
# Wed Oct 02 00:00:00 EDT 2002
|
26
|
+
#
|
27
|
+
# A series of dates are useful for account-related info...
|
28
|
+
# ?> Time.random(:series=>[20.days, 3.years])
|
29
|
+
# => [Sat Jan 22 00:00:00 EST 2005,
|
30
|
+
# Sat Jan 29 12:58:45 EST 2005,
|
31
|
+
# Fri Sep 08 09:34:58 EDT 2006]
|
32
|
+
#
|
33
|
+
# or maybe to simulate events during an hour?...
|
34
|
+
# ?> Time.random(:series=>[1.hour,1.hour,1.hour])
|
35
|
+
# => [Wed Apr 21 00:00:00 EDT 2004,
|
36
|
+
# Wed Apr 21 00:45:59 EDT 2004,
|
37
|
+
# Wed Apr 21 01:02:47 EDT 2004,
|
38
|
+
# Wed Apr 21 01:31:00 EDT 2004]
|
39
|
+
def self.random(params={})
|
40
|
+
years_back = params[:year_range] || 5
|
41
|
+
year = (rand * (years_back)).ceil + (Time.now.year - years_back)
|
42
|
+
month = (rand * 12).ceil
|
43
|
+
day = (rand * 31).ceil
|
44
|
+
series = [date = Time.local(year, month, day)]
|
45
|
+
if params[:series]
|
46
|
+
params[:series].each do |some_time_after|
|
47
|
+
series << series.last + (rand * some_time_after).ceil
|
48
|
+
end
|
49
|
+
return series
|
50
|
+
end
|
51
|
+
date
|
52
|
+
end
|
53
|
+
|
54
|
+
end # Time
|
55
|
+
|
56
|
+
module Enumerable
|
57
|
+
|
58
|
+
# Use for getting a natural sort order instead of the ASCII
|
59
|
+
# sort order.
|
60
|
+
def alphabetize
|
61
|
+
sort { |a, b| grouped_compare(a, b) }
|
62
|
+
end
|
63
|
+
|
64
|
+
# Use for sorting an Enumerable object in place.
|
65
|
+
def alphabetize!
|
66
|
+
sort! { |a, b| grouped_compare(a, b) }
|
67
|
+
end
|
68
|
+
|
69
|
+
private
|
70
|
+
def grouped_compare(a, b)
|
71
|
+
loop {
|
72
|
+
a_chunk, a = extract_alpha_or_number_group(a)
|
73
|
+
b_chunk, b = extract_alpha_or_number_group(b)
|
74
|
+
ret = a_chunk <=> b_chunk
|
75
|
+
return -1 if a_chunk == ''
|
76
|
+
return ret if ret != 0
|
77
|
+
}
|
78
|
+
end
|
79
|
+
|
80
|
+
def extract_alpha_or_number_group(item)
|
81
|
+
test_item = item.downcase
|
82
|
+
matchdata = /([a-z]+|[\d]+)/.match(test_item)
|
83
|
+
if matchdata.nil?
|
84
|
+
["", ""]
|
85
|
+
else
|
86
|
+
[matchdata[0], test_item = test_item[matchdata.offset(0)[1] .. -1]]
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
end # Enumerable
|
@@ -0,0 +1,82 @@
|
|
1
|
+
class AnnouncementObject
|
2
|
+
|
3
|
+
include Utilities
|
4
|
+
include PageHelper
|
5
|
+
include Workflows
|
6
|
+
|
7
|
+
attr_accessor :title, :body, :site, :link, :access, :availability,
|
8
|
+
:subject, :saved_by, :date, :creation_date, :groups,
|
9
|
+
:message, :message_html, :id
|
10
|
+
|
11
|
+
def initialize(browser, opts={})
|
12
|
+
@browser = browser
|
13
|
+
|
14
|
+
defaults = {
|
15
|
+
:title=>random_alphanums,
|
16
|
+
:body=>random_multiline(500, 10, :alpha)
|
17
|
+
}
|
18
|
+
options = defaults.merge(opts)
|
19
|
+
@title=options[:title]
|
20
|
+
@body=options[:body]
|
21
|
+
@site=options[:site]
|
22
|
+
raise "You must specify a Site for the announcement" if @site==nil
|
23
|
+
end
|
24
|
+
|
25
|
+
alias :name :title
|
26
|
+
|
27
|
+
def create
|
28
|
+
open_my_site_by_name @site unless @browser.title=~/#{@site}/
|
29
|
+
announcements unless @browser.title=~/Announcements$/
|
30
|
+
on_page Announcements do |page|
|
31
|
+
page.add
|
32
|
+
end
|
33
|
+
on_page AddEditAnnouncements do |page|
|
34
|
+
page.title.set @title
|
35
|
+
page.enter_source_text page.editor, @body
|
36
|
+
page.add_announcement
|
37
|
+
@creation_date=make_date Time.now
|
38
|
+
end
|
39
|
+
on_page Announcements do |page|
|
40
|
+
@link = page.href(@title)
|
41
|
+
@id = @link[/(?<=msg\/).+(?=\/main\/)/]
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def edit opts={}
|
46
|
+
open_my_site_by_name @site unless @browser.title=~/#{@site}/
|
47
|
+
announcements unless @browser.title=~/Announcements$/
|
48
|
+
on_page Announcements do |list|
|
49
|
+
list.edit @title
|
50
|
+
end
|
51
|
+
on AddEditAnnouncements do |edit|
|
52
|
+
edit.title.set opts[:title] unless opts[:title]==nil
|
53
|
+
edit.send(opts[:access]) unless opts[:access]==nil
|
54
|
+
edit.send(opts[:availability]) unless opts[:availability]==nil
|
55
|
+
unless opts[:body]==nil
|
56
|
+
edit.enter_source_text edit.editor, opts[:body]
|
57
|
+
end
|
58
|
+
edit.save_changes
|
59
|
+
end
|
60
|
+
@title=opts[:title] unless opts[:title]==nil
|
61
|
+
@body=opts[:body] unless opts[:body]==nil
|
62
|
+
@access=opts[:access]
|
63
|
+
@availability=opts[:availability]
|
64
|
+
end
|
65
|
+
|
66
|
+
def view
|
67
|
+
open_my_site_by_name @site unless @browser.title=~/#{@site}/
|
68
|
+
announcements unless @browser.title=~/Announcements$/
|
69
|
+
on Announcements do |list|
|
70
|
+
list.view @title
|
71
|
+
end
|
72
|
+
on ViewAnnouncement do |view|
|
73
|
+
@subject=view.subject
|
74
|
+
@saved_by=view.saved_by
|
75
|
+
@date=view.date
|
76
|
+
@groups=view.groups
|
77
|
+
@message=view.message
|
78
|
+
@message_html=view.message_html
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
class AssessmentObject
|
2
|
+
|
3
|
+
include PageHelper
|
4
|
+
include Utilities
|
5
|
+
include Workflows
|
6
|
+
|
7
|
+
attr_accessor :title, :site
|
8
|
+
|
9
|
+
def initialize(browser, opts={})
|
10
|
+
@browser = browser
|
11
|
+
|
12
|
+
defaults = {
|
13
|
+
:title=>random_alphanums,
|
14
|
+
:site=>"placeholder"
|
15
|
+
}
|
16
|
+
options = defaults.merge(opts)
|
17
|
+
@title=options[:title]
|
18
|
+
@site=options[:site]
|
19
|
+
raise "You must specify a Site for your Assessment" if @site==nil
|
20
|
+
end
|
21
|
+
|
22
|
+
def create
|
23
|
+
my_workspace.open_my_site_by_name @site unless @browser.title=~/#{@site}/
|
24
|
+
tests_and_quizzes unless @browser.title=~/Tests & Quizzes$/
|
25
|
+
on_page AssessmentsList do |page|
|
26
|
+
page.title.set @title
|
27
|
+
page.create
|
28
|
+
end
|
29
|
+
# Do more here eventually...
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
@@ -0,0 +1,205 @@
|
|
1
|
+
class AssignmentObject
|
2
|
+
|
3
|
+
include PageHelper
|
4
|
+
include Utilities
|
5
|
+
include Randomizers
|
6
|
+
include DateMakers
|
7
|
+
include Workflows
|
8
|
+
|
9
|
+
attr_accessor :title, :site, :instructions, :id, :link, :status, :grade_scale,
|
10
|
+
:max_points, :allow_resubmission, :num_resubmissions, :open,
|
11
|
+
:due, :accept_until, :student_submissions, :resubmission,
|
12
|
+
:add_due_date, :add_open_announcement, :add_to_gradebook,
|
13
|
+
# Note the following variables are taken from the Entity picker's
|
14
|
+
# Item Info list
|
15
|
+
:retract_time, :time_due, :time_modified, :url, :portal_url,
|
16
|
+
:description, :time_created, :direct_url
|
17
|
+
|
18
|
+
def initialize(browser, opts={})
|
19
|
+
@browser = browser
|
20
|
+
|
21
|
+
defaults = {
|
22
|
+
:title=>random_alphanums,
|
23
|
+
:instructions=>random_multiline(250, 10, :string),
|
24
|
+
:resubmission=>{},
|
25
|
+
:open=>{},
|
26
|
+
:due=>{},
|
27
|
+
:accept_until=>{}
|
28
|
+
}
|
29
|
+
options = defaults.merge(opts)
|
30
|
+
|
31
|
+
@title=options[:title]
|
32
|
+
@instructions=options[:instructions]
|
33
|
+
@site=options[:site]
|
34
|
+
@grade_scale=options[:grade_scale]
|
35
|
+
@max_points=options[:max_points]
|
36
|
+
@allow_resubmission=options[:allow_resubmission]
|
37
|
+
@num_resubmissions=options[:num_resubmissions]
|
38
|
+
@open=options[:open]
|
39
|
+
@due=options[:due]
|
40
|
+
@accept_until=options[:accept_until]
|
41
|
+
@resubmission=options[:resubmission]
|
42
|
+
@student_submissions=options[:student_submissions]
|
43
|
+
@add_due_date=options[:add_due_date]
|
44
|
+
@add_open_announcement=options[:add_open_announcement]
|
45
|
+
@add_to_gradebook=options[:add_to_gradebook]
|
46
|
+
@status=options[:status]
|
47
|
+
raise "You must specify a Site for your Assignment" if @site==nil
|
48
|
+
raise "You must specify max points if your grade scale is 'points'" if @max_points==nil && @grade_scale=="Points"
|
49
|
+
end
|
50
|
+
|
51
|
+
alias :name :title
|
52
|
+
|
53
|
+
def create
|
54
|
+
open_my_site_by_name @site unless @browser.title=~/#{@site}/
|
55
|
+
|
56
|
+
# Go to assignments page
|
57
|
+
assignments unless @browser.title=~/Assignments$/
|
58
|
+
|
59
|
+
on_page AssignmentsList do |list|
|
60
|
+
list.add
|
61
|
+
end
|
62
|
+
on_page AssignmentAdd do |add|
|
63
|
+
@allow_resubmission==nil ? @allow_resubmission=checkbox_setting(add.allow_resubmission) : add.allow_resubmission.send(@allow_resubmission)
|
64
|
+
if @allow_resubmission==:set
|
65
|
+
add.num_resubmissions.wait_until_present
|
66
|
+
@num_resubmissions==nil ? @num_resubmissions=add.num_resubmissions.selected_options[0].text : add.num_resubmissions.select(@num_resubmissions)
|
67
|
+
@resubmission[:MON]==nil ? @resubmission[:MON]=add.resub_until_month.selected_options[0].text : add.resub_until_month.select(@resubmission[:MON])
|
68
|
+
@resubmission[:day_of_month]==nil ? @resubmission[:day_of_month]=add.resub_until_day.selected_options[0].text : add.select(@resubmission[:day_of_month])
|
69
|
+
@resubmission[:year]==nil ? @resubmission[:year]=add.resub_until_year.selected_options[0].text : add.select(@resubmission[:year])
|
70
|
+
@resubmission[:hour]==nil ? @resubmission[:hour]=add.resub_until_hour.selected_options[0].text : add.select(@resubmission[:hour])
|
71
|
+
@resubmission[:minute_rounded]==nil ? @resubmission[:minute_rounded]=add.resub_until_minute.selected_options[0].text : add.select(@resubmission[:minute_rounded])
|
72
|
+
@resubmission[:MERIDIAN]==nil ? @resubmission[:MERIDIAN]=add.resub_until_meridian.selected_options[0].text : add.select(@resubmission[:MERIDIAN])
|
73
|
+
end
|
74
|
+
add.title.set @title
|
75
|
+
add.instructions=@instructions
|
76
|
+
@student_submissions==nil ? @student_submissions=add.student_submissions.selected_options[0].text : add.student_submissions.select(@student_submissions)
|
77
|
+
@grade_scale==nil ? @grade_scale=add.grade_scale.selected_options[0].text : add.grade_scale.select(@grade_scale)
|
78
|
+
@open[:MON]==nil ? @open[:MON]=add.open_month.selected_options[0].text : add.open_month.select(@open[:MON])
|
79
|
+
add.max_points.set(@max_points) unless @max_points==nil
|
80
|
+
@open[:year]==nil ? @open[:year]=add.open_year.selected_options[0].text : add.open_year.select(@open[:year])
|
81
|
+
@open[:day_of_month]==nil ? @open[:day_of_month]=add.open_day.selected_options[0].text : add.open_day.select(@open[:day_of_month])
|
82
|
+
@open[:hour]==nil ? @open[:hour]=add.open_hour.selected_options[0].text : add.open_hour.select(@open[:hour])
|
83
|
+
@open[:minute_rounded]==nil ? @open[:minute_rounded]=add.open_minute.selected_options[0].text : add.open_minute.select(@open[:minute_rounded])
|
84
|
+
@open[:MERIDIAN]==nil ? @open[:MERIDIAN]=add.open_meridian.selected_options[0].text : add.open_meridian.select(@open[:MERIDIAN])
|
85
|
+
@add_due_date==nil ? @add_due_date=checkbox_setting(add.add_due_date) : add.add_due_date.send(@add_due_date)
|
86
|
+
@add_open_announcement==nil ? @add_open_announcement=checkbox_setting(add.add_open_announcement) : add.add_open_announcement.send(@add_open_announcement)
|
87
|
+
@add_to_gradebook==nil ? @add_to_gradebook=radio_setting(add.add_to_gradebook) : add.add_to_gradebook.send(@add_to_gradebook)
|
88
|
+
@due[:MON]==nil ? @due[:MON]=add.due_month.selected_options[0].text : add.due_month.select(@due[:MON])
|
89
|
+
@due[:year]==nil ? @due[:year]=add.due_year.selected_options[0].text : add.due_year.select(@due[:year])
|
90
|
+
@due[:day_of_month]==nil ? @due[:day_of_month]=add.due_day.selected_options[0].text : add.due_day.select(@due[:day_of_month])
|
91
|
+
@due[:hour]==nil ? @due[:hour]=add.due_hour.selected_options[0].text : add.due_hour.select(@due[:hour])
|
92
|
+
@due[:minute_rounded]==nil ? @due[:minute_rounded]=add.due_minute.selected_options[0].text : add.due_minute.select(@due[:minute_rounded])
|
93
|
+
@due[:MERIDIAN]==nil ? @due[:MERIDIAN]=add.due_meridian.selected_options[0].text : add.due_meridian.select(@due[:MERIDIAN])
|
94
|
+
@accept_until[:MON]==nil ? @accept_until[:MON]=add.accept_month.selected_options[0].text : add.accept_month.select(@accept_until[:MON])
|
95
|
+
@accept_until[:year]==nil ? @accept_until[:year]=add.accept_year.selected_options[0].text : add.accept_year.select(@accept_until[:year])
|
96
|
+
@accept_until[:day_of_month]==nil ? @accept_until[:day_of_month]=add.accept_day.selected_options[0].text : add.accept_day.select(@accept_until[:day_of_month])
|
97
|
+
@accept_until[:hour]==nil ? @accept_until[:hour]=add.accept_hour.selected_options[0].text : add.accept_hour.select(@accept_until[:hour])
|
98
|
+
@accept_until[:minute_rounded]==nil ? @accept_until[:minute_rounded]=add.accept_minute.selected_options[0].text : add.accept_minute.select(@accept_until[:minute_rounded])
|
99
|
+
@accept_until[:MERIDIAN]==nil ? @accept_until[:MERIDIAN]=add.accept_meridian.selected_options[0].text : add.accept_meridian.select(@accept_until[:MERIDIAN])
|
100
|
+
#@do_not_add_to_gradebook==nil ? @do_not_add_to_gradebook=radio_setting(add.do_not_add_gradebook.set?) :
|
101
|
+
if @status=="Draft"
|
102
|
+
add.save_draft
|
103
|
+
else
|
104
|
+
add.post
|
105
|
+
end
|
106
|
+
end
|
107
|
+
on_page AssignmentsList do |list|
|
108
|
+
@id = list.get_assignment_id @title
|
109
|
+
@link = list.assignment_href @title
|
110
|
+
@status = list.status_of @title
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
def edit opts={}
|
115
|
+
open_my_site_by_name @site unless @browser.title=~/#{@site}/
|
116
|
+
assignments unless @browser.title=~/Assignments$/
|
117
|
+
on AssignmentsList do |list|
|
118
|
+
if @status=="Draft"
|
119
|
+
list.edit_assignment "Draft - #{@title}"
|
120
|
+
else
|
121
|
+
list.edit_assignment @title
|
122
|
+
end
|
123
|
+
end
|
124
|
+
on AssignmentAdd do |edit|
|
125
|
+
edit.title.set opts[:title] unless opts[:title]==nil
|
126
|
+
unless opts[:instructions]==nil
|
127
|
+
edit.enter_source_text edit.editor, opts[:instructions]
|
128
|
+
end
|
129
|
+
edit.grade_scale.select opts[:grade_scale] unless opts[:grade_scale]==nil
|
130
|
+
edit.max_points.set opts[:max_points] unless opts[:max_points]==nil
|
131
|
+
# This should be one of the last items edited...
|
132
|
+
edit.add_to_gradebook.send(opts[:add_to_gradebook]) unless opts[:add_to_gradebook]==nil
|
133
|
+
|
134
|
+
#TODO: All the rest goes here
|
135
|
+
|
136
|
+
if (@status=="Draft" && opts[:status]==nil) || opts[:status]=="Draft"
|
137
|
+
edit.save_draft
|
138
|
+
elsif opts[:status]=="Editing"
|
139
|
+
# Stay on the page
|
140
|
+
else
|
141
|
+
edit.post
|
142
|
+
end
|
143
|
+
end
|
144
|
+
@title=opts[:title] unless opts[:title] == nil
|
145
|
+
@instructions=opts[:instructions] unless opts[:instructions] == nil
|
146
|
+
@grade_scale=opts[:grade_scale] unless opts[:grade_scale] == nil
|
147
|
+
@max_points=opts[:max_points] unless opts[:title] == nil
|
148
|
+
@add_to_gradebook==opts[:add_to_gradebook]
|
149
|
+
# TODO: Add all the rest of the elements here
|
150
|
+
|
151
|
+
unless opts[:status]=="Editing"
|
152
|
+
on AssignmentsList do |list|
|
153
|
+
@status=list.status_of @title
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
def get_info
|
159
|
+
open_my_site_by_name @site unless @browser.title=~/#{@site}/
|
160
|
+
assignments unless @browser.title=~/Assignments$/
|
161
|
+
on AssignmentsList do |list|
|
162
|
+
@id = list.get_assignment_id @title
|
163
|
+
@status=list.status_of @title
|
164
|
+
@link=list.assignment_href @title
|
165
|
+
if @status=="Draft"
|
166
|
+
list.open_assignment "Draft - #{@title}"
|
167
|
+
else
|
168
|
+
list.edit_assignment @title
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
172
|
+
# TODO: Add more stuff here as needed...
|
173
|
+
|
174
|
+
on AssignmentAdd do |edit|
|
175
|
+
|
176
|
+
@instructions=edit.get_source_text edit.editor
|
177
|
+
edit.source edit.editor
|
178
|
+
edit.entity_picker(edit.editor)
|
179
|
+
end
|
180
|
+
on EntityPicker do |info|
|
181
|
+
info.view_assignment_details @title
|
182
|
+
@retract_time=info.retract_time
|
183
|
+
@time_due=info.time_due
|
184
|
+
@time_modified=info.time_modified
|
185
|
+
@url=info.url
|
186
|
+
@portal_url=info.portal_url
|
187
|
+
@description=info.description
|
188
|
+
@time_created=info.time_created
|
189
|
+
@direct_url=info.direct_link
|
190
|
+
info.close_picker
|
191
|
+
end
|
192
|
+
on AssignmentAdd do |edit|
|
193
|
+
edit.cancel
|
194
|
+
end
|
195
|
+
end
|
196
|
+
|
197
|
+
def submit
|
198
|
+
# TODO: Create this method
|
199
|
+
end
|
200
|
+
|
201
|
+
def grade
|
202
|
+
# TODO: Create this method
|
203
|
+
end
|
204
|
+
|
205
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
class BlogEntryObject
|
2
|
+
|
3
|
+
include PageHelper
|
4
|
+
include Utilities
|
5
|
+
include Workflows
|
6
|
+
|
7
|
+
attr_accessor :title, :content, :site, :permissions
|
8
|
+
|
9
|
+
def initialize(browser, opts={})
|
10
|
+
@browser = browser
|
11
|
+
|
12
|
+
defaults = {
|
13
|
+
:title=>random_alphanums,
|
14
|
+
:content=>random_alphanums,
|
15
|
+
:permissions=>:publicly_viewable
|
16
|
+
}
|
17
|
+
options = defaults.merge(opts)
|
18
|
+
|
19
|
+
@title=options[:title]
|
20
|
+
@content=options[:content]
|
21
|
+
@site=options[:site]
|
22
|
+
@permissions=options[:permissions]
|
23
|
+
raise "You need to specify a site for your blog entry" if @site==nil
|
24
|
+
end
|
25
|
+
|
26
|
+
def create
|
27
|
+
open_my_site_by_name @site unless @browser.title=~/#{@site}/
|
28
|
+
blogs unless @browser.title=~/Blogs$/
|
29
|
+
# TODO: More needed here
|
30
|
+
end
|
31
|
+
|
32
|
+
def edit opts={}
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
def view
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
def delete
|
41
|
+
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
|
@@ -0,0 +1,49 @@
|
|
1
|
+
class BloggerPostObject
|
2
|
+
|
3
|
+
include PageHelper
|
4
|
+
include Utilities
|
5
|
+
include Workflows
|
6
|
+
|
7
|
+
attr_accessor :title, :abstract, :site, :text, :read_only, :access, :allow_comments
|
8
|
+
|
9
|
+
def initialize(browser, opts={})
|
10
|
+
@browser = browser
|
11
|
+
|
12
|
+
defaults = {
|
13
|
+
:title=>random_alphanums,
|
14
|
+
:abstract=>random_alphanums,
|
15
|
+
:text=>random_alphanums
|
16
|
+
}
|
17
|
+
options = defaults.merge(opts)
|
18
|
+
|
19
|
+
@title=options[:title]
|
20
|
+
@abstract=options[:abstract]
|
21
|
+
@site=options[:site]
|
22
|
+
@text=options[:text]
|
23
|
+
@read_only=options[:read_only]
|
24
|
+
@access=options[:access]
|
25
|
+
@allow_comments=options[:allow_comments]
|
26
|
+
raise "You need to specify a site for your blogger post" if @site==nil
|
27
|
+
end
|
28
|
+
|
29
|
+
def create
|
30
|
+
open_my_site_by_name @site unless @browser.title=~/#{@site}/
|
31
|
+
blogs unless @browser.title=~/Blogs$/
|
32
|
+
# TODO: More needed here
|
33
|
+
end
|
34
|
+
|
35
|
+
def edit opts={}
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
def view
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
def delete
|
44
|
+
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
|
@@ -0,0 +1,54 @@
|
|
1
|
+
class ChatRoomObject
|
2
|
+
|
3
|
+
include PageHelper
|
4
|
+
include Utilities
|
5
|
+
include Workflows
|
6
|
+
|
7
|
+
attr_accessor :title, :description, :chat_display, :allow_change, :site
|
8
|
+
|
9
|
+
def initialize(browser, opts={})
|
10
|
+
@browser = browser
|
11
|
+
|
12
|
+
defaults = {
|
13
|
+
:title=>random_alphanums,
|
14
|
+
:description=>random_alphanums,
|
15
|
+
:chat_display=>:show_all_messages,
|
16
|
+
:allow_change=>:set
|
17
|
+
}
|
18
|
+
options = defaults.merge(opts)
|
19
|
+
|
20
|
+
@title=options[:title]
|
21
|
+
@description=options[:description]
|
22
|
+
@chat_display=options[:chat_display]
|
23
|
+
@allow_change=options[:allow_change]
|
24
|
+
@site=options[:site]
|
25
|
+
raise "You need to specify a site for your chat room" if @site==nil
|
26
|
+
end
|
27
|
+
|
28
|
+
def create
|
29
|
+
open_my_site_by_name @site unless @browser.title=~/#{@site}/
|
30
|
+
chat_room unless @browser.title=~/Chat Room$/
|
31
|
+
on ChatRoom do |chat|
|
32
|
+
chat.options
|
33
|
+
end
|
34
|
+
on ManageRooms do |manage|
|
35
|
+
manage.add_room
|
36
|
+
end
|
37
|
+
#TODO: finish this method
|
38
|
+
end
|
39
|
+
|
40
|
+
def edit opts={}
|
41
|
+
|
42
|
+
end
|
43
|
+
|
44
|
+
def view
|
45
|
+
|
46
|
+
end
|
47
|
+
|
48
|
+
def delete
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
|
@@ -0,0 +1,89 @@
|
|
1
|
+
class EventObject
|
2
|
+
|
3
|
+
include PageHelper
|
4
|
+
include Utilities
|
5
|
+
include Workflows
|
6
|
+
|
7
|
+
attr_accessor :title, :month, :day, :year, :start_hour, :start_minute,
|
8
|
+
:start_meridian, :duration_hours, :duration_minutes, :end_hour,
|
9
|
+
:end_minute, :end_meridian, :message, :site, :link, :message_html
|
10
|
+
|
11
|
+
def initialize(browser, opts={})
|
12
|
+
@browser = browser
|
13
|
+
|
14
|
+
defaults = {
|
15
|
+
:title=>random_alphanums,
|
16
|
+
:month=>in_15_minutes[:month_str],
|
17
|
+
:day=>in_15_minutes[:day],
|
18
|
+
:year=>in_15_minutes[:year],
|
19
|
+
:start_hour=>in_15_minutes[:hour],
|
20
|
+
:start_minute=>in_15_minutes[:minute],
|
21
|
+
:start_meridian=>in_15_minutes[:meridian],
|
22
|
+
:message=>random_multiline(400,20, :alpha)
|
23
|
+
}
|
24
|
+
options = defaults.merge(opts)
|
25
|
+
|
26
|
+
@title=options[:title]
|
27
|
+
@month=options[:month]
|
28
|
+
@day=options[:day]
|
29
|
+
@year=options[:year]
|
30
|
+
@start_hour=options[:start_hour]
|
31
|
+
@start_minute=options[:start_minute]
|
32
|
+
@start_meridian=options[:start_meridian]
|
33
|
+
@duration_hours=options[:duration_hours]
|
34
|
+
@duration_minutes=options[:duration_minutes]
|
35
|
+
@end_hour=options[:end_hour]
|
36
|
+
@end_minute=options[:end_minute]
|
37
|
+
@end_meridian=options[:end_meridian]
|
38
|
+
@message=options[:message]
|
39
|
+
@site=options[:site]
|
40
|
+
raise "You need to specify a site for your wiki" if @site==nil
|
41
|
+
end
|
42
|
+
|
43
|
+
def create
|
44
|
+
open_my_site_by_name @site unless @browser.title=~/#{@site}/
|
45
|
+
calendar unless @browser.title=~/Calendar$/
|
46
|
+
on Calendar do |cal|
|
47
|
+
cal.add_event
|
48
|
+
end
|
49
|
+
on AddEditEvent do |add_event|
|
50
|
+
add_event.enter_source_text add_event.editor, @message
|
51
|
+
add_event.title.set @title
|
52
|
+
add_event.month.select @month
|
53
|
+
add_event.day.select @day
|
54
|
+
add_event.year.select @year
|
55
|
+
add_event.start_hour.select @start_hour
|
56
|
+
add_event.start_minute.select @start_minute
|
57
|
+
add_event.start_meridian.select @start_meridian
|
58
|
+
if @end_hour == nil && @duration_hours == nil
|
59
|
+
@duration_hours = add_event.hours.value
|
60
|
+
@duration_minutes = add_event.minutes.value
|
61
|
+
@end_hour = add_event.end_hour.value
|
62
|
+
@end_minute = add_event.end_minute.value
|
63
|
+
@end_meridian = add_event.end_meridian.value
|
64
|
+
elsif @end_hour == nil
|
65
|
+
# Todo: Add this later
|
66
|
+
elsif @duration_hours == nil
|
67
|
+
# Todo: Add this later
|
68
|
+
end
|
69
|
+
add_event.save_event
|
70
|
+
end
|
71
|
+
on Calendar do |cal|
|
72
|
+
@link = cal.event_href @title
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def view
|
77
|
+
open_my_site_by_name @site unless @browser.title=~/#{@site}/
|
78
|
+
calendar unless @browser.title=~/Calendar$/
|
79
|
+
on Calendar do |cal|
|
80
|
+
cal.open_event @title
|
81
|
+
end
|
82
|
+
on EventDetail do |event|
|
83
|
+
@message_html = event.message_html
|
84
|
+
# TODO: Lots of stuff to add here...
|
85
|
+
# ...event.details...
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
end
|