rubyuw 0.99.15 → 0.99.16
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/.gitignore +2 -0
- data/Gemfile +8 -0
- data/Gemfile.lock +31 -0
- data/Rakefile +4 -1
- data/VERSION +1 -1
- data/lib/rubyuw/base.rb +2 -2
- data/lib/rubyuw/curriculum_enrollment.rb +22 -12
- data/rubyuw.gemspec +6 -4
- metadata +17 -8
data/.gitignore
CHANGED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
PATH
|
|
2
|
+
remote: .
|
|
3
|
+
specs:
|
|
4
|
+
rubyuw (0.99.16)
|
|
5
|
+
mechanize (>= 0.9.3)
|
|
6
|
+
|
|
7
|
+
GEM
|
|
8
|
+
remote: http://rubygems.org/
|
|
9
|
+
specs:
|
|
10
|
+
gemcutter (0.6.1)
|
|
11
|
+
git (1.2.5)
|
|
12
|
+
jeweler (1.4.0)
|
|
13
|
+
gemcutter (>= 0.1.0)
|
|
14
|
+
git (>= 1.2.5)
|
|
15
|
+
rubyforge (>= 2.0.0)
|
|
16
|
+
json_pure (1.4.6)
|
|
17
|
+
mechanize (1.0.0)
|
|
18
|
+
nokogiri (>= 1.2.1)
|
|
19
|
+
nokogiri (1.4.3.1)
|
|
20
|
+
rake (0.8.7)
|
|
21
|
+
rubyforge (2.0.4)
|
|
22
|
+
json_pure (>= 1.1.7)
|
|
23
|
+
|
|
24
|
+
PLATFORMS
|
|
25
|
+
ruby
|
|
26
|
+
|
|
27
|
+
DEPENDENCIES
|
|
28
|
+
jeweler (= 1.4.0)
|
|
29
|
+
mechanize (>= 0.9.3)
|
|
30
|
+
rake
|
|
31
|
+
rubyuw!
|
data/Rakefile
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
require "rubygems"
|
|
2
|
+
require "bundler/setup"
|
|
3
|
+
|
|
1
4
|
begin
|
|
2
5
|
require 'jeweler'
|
|
3
6
|
Jeweler::Tasks.new do |gemspec|
|
|
@@ -42,4 +45,4 @@ namespace :test do
|
|
|
42
45
|
task :run_live do
|
|
43
46
|
run_tests(Dir[File.join(File.dirname(__FILE__), 'test', 'live', '**', '*.rb')])
|
|
44
47
|
end
|
|
45
|
-
end
|
|
48
|
+
end
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.99.
|
|
1
|
+
0.99.16
|
data/lib/rubyuw/base.rb
CHANGED
|
@@ -18,7 +18,7 @@ module RubyUW
|
|
|
18
18
|
# See allow_concurrency=
|
|
19
19
|
@@allow_concurrency = false
|
|
20
20
|
|
|
21
|
-
class <<self
|
|
21
|
+
class << self
|
|
22
22
|
# Authenticate with MyUW. This method sets up and verifies
|
|
23
23
|
# a session with MyUW. Every feature of RubyUW which requires
|
|
24
24
|
# authentication (as of writing this documentation this is
|
|
@@ -152,4 +152,4 @@ module RubyUW
|
|
|
152
152
|
end
|
|
153
153
|
end
|
|
154
154
|
end
|
|
155
|
-
end
|
|
155
|
+
end
|
|
@@ -19,7 +19,7 @@ module RubyUW
|
|
|
19
19
|
# the array access notation common to ruby. This access returns
|
|
20
20
|
# a {RubyUW::SLN} object.
|
|
21
21
|
class CurriculumEnrollment
|
|
22
|
-
class <<self
|
|
22
|
+
class << self
|
|
23
23
|
# Pulls data about a specific curriculum. The SLN data is pulled
|
|
24
24
|
# directly from the MyUW curriculum information page. Authentication
|
|
25
25
|
# is required prior to use.
|
|
@@ -29,47 +29,57 @@ module RubyUW
|
|
|
29
29
|
def find(curriculum, term)
|
|
30
30
|
raise Errors::NotLoggedInError.new unless Base.authenticated?
|
|
31
31
|
|
|
32
|
-
|
|
32
|
+
url = "https://sdb.admin.washington.edu/timeschd/uwnetid/tsstat.asp?QTRYR=#{term}&CURRIC=#{curriculum}"
|
|
33
|
+
|
|
34
|
+
page = Base.connection.get(url)
|
|
35
|
+
if page.form_with(:name => "relay")
|
|
36
|
+
# Strange thing UW began implementing 08/31/2010. This is to
|
|
37
|
+
# get around it.
|
|
38
|
+
page = Base.connection.goto(url).
|
|
39
|
+
submit_form('relay').
|
|
40
|
+
submit_form('relay').execute!
|
|
41
|
+
end
|
|
42
|
+
|
|
33
43
|
raise Errors::CurriculumDoesNotExistError.new if !curriculum_exists?(page)
|
|
34
|
-
|
|
44
|
+
|
|
35
45
|
extract_courses(page, term)
|
|
36
46
|
rescue WWW::Mechanize::ResponseCodeError
|
|
37
47
|
raise Errors::CurriculumDoesNotExistError.new
|
|
38
48
|
end
|
|
39
|
-
|
|
49
|
+
|
|
40
50
|
protected
|
|
41
51
|
|
|
42
52
|
def curriculum_exists?(page)
|
|
43
53
|
!(page.body.to_s =~ /No sections found for (.+?)/i)
|
|
44
54
|
end
|
|
45
|
-
|
|
55
|
+
|
|
46
56
|
def extract_courses(page, term)
|
|
47
57
|
course_nodes = page.search('//table//tr[count(th)>1 and @bgcolor="#d0d0d0"]//following-sibling::tr')
|
|
48
|
-
|
|
58
|
+
|
|
49
59
|
results = {}
|
|
50
|
-
course_nodes.each { |node|
|
|
60
|
+
course_nodes.each { |node|
|
|
51
61
|
sln, data = extract_course(node)
|
|
52
62
|
results[sln] = RubyUW::SLN.new(sln, term, data)
|
|
53
63
|
}
|
|
54
|
-
|
|
64
|
+
|
|
55
65
|
results
|
|
56
66
|
end
|
|
57
|
-
|
|
67
|
+
|
|
58
68
|
def extract_course(node)
|
|
59
69
|
data_keys = [:sln, :course, :section, :type, :title, :current_enrollment, :limit_enrollment,
|
|
60
70
|
:room_capacity, :space_available, nil, :notes]
|
|
61
71
|
|
|
62
72
|
results = Base.extract(node, './/td | .//th', data_keys)
|
|
63
73
|
results[:sln].gsub!(/^>/, '') # Strips leading '>' off of quiz sections
|
|
64
|
-
|
|
74
|
+
|
|
65
75
|
[results[:sln], results]
|
|
66
76
|
end
|
|
67
77
|
end
|
|
68
78
|
end
|
|
69
|
-
|
|
79
|
+
|
|
70
80
|
module Errors
|
|
71
81
|
# An error indicating that the curriclum requesting does not
|
|
72
82
|
# exist.
|
|
73
83
|
class CurriculumDoesNotExistError < Error; end
|
|
74
84
|
end
|
|
75
|
-
end
|
|
85
|
+
end
|
data/rubyuw.gemspec
CHANGED
|
@@ -5,11 +5,11 @@
|
|
|
5
5
|
|
|
6
6
|
Gem::Specification.new do |s|
|
|
7
7
|
s.name = %q{rubyuw}
|
|
8
|
-
s.version = "0.99.
|
|
8
|
+
s.version = "0.99.16"
|
|
9
9
|
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
|
11
11
|
s.authors = ["Mitchell Hashimoto"]
|
|
12
|
-
s.date = %q{2010-
|
|
12
|
+
s.date = %q{2010-08-31}
|
|
13
13
|
s.description = %q{Library which provides a ruby interface to the University of Washington student portal.}
|
|
14
14
|
s.email = %q{mitchell.hashimoto@gmail.com}
|
|
15
15
|
s.extra_rdoc_files = [
|
|
@@ -17,6 +17,8 @@ Gem::Specification.new do |s|
|
|
|
17
17
|
]
|
|
18
18
|
s.files = [
|
|
19
19
|
".gitignore",
|
|
20
|
+
"Gemfile",
|
|
21
|
+
"Gemfile.lock",
|
|
20
22
|
"README.md",
|
|
21
23
|
"Rakefile",
|
|
22
24
|
"VERSION",
|
|
@@ -76,7 +78,7 @@ Gem::Specification.new do |s|
|
|
|
76
78
|
s.homepage = %q{http://github.com/mitchellh/rubyuw}
|
|
77
79
|
s.rdoc_options = ["--charset=UTF-8"]
|
|
78
80
|
s.require_paths = ["lib"]
|
|
79
|
-
s.rubygems_version = %q{1.3.
|
|
81
|
+
s.rubygems_version = %q{1.3.7}
|
|
80
82
|
s.summary = %q{Library which provides a ruby interface to the University of Washington student portal.}
|
|
81
83
|
s.test_files = [
|
|
82
84
|
"test/live/curriculum_enrollment_test.rb",
|
|
@@ -97,7 +99,7 @@ Gem::Specification.new do |s|
|
|
|
97
99
|
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
|
98
100
|
s.specification_version = 3
|
|
99
101
|
|
|
100
|
-
if Gem::Version.new(Gem::
|
|
102
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
|
101
103
|
s.add_runtime_dependency(%q<mechanize>, [">= 0.9.3"])
|
|
102
104
|
else
|
|
103
105
|
s.add_dependency(%q<mechanize>, [">= 0.9.3"])
|
metadata
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: rubyuw
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
+
hash: 435
|
|
4
5
|
prerelease: false
|
|
5
6
|
segments:
|
|
6
7
|
- 0
|
|
7
8
|
- 99
|
|
8
|
-
-
|
|
9
|
-
version: 0.99.
|
|
9
|
+
- 16
|
|
10
|
+
version: 0.99.16
|
|
10
11
|
platform: ruby
|
|
11
12
|
authors:
|
|
12
13
|
- Mitchell Hashimoto
|
|
@@ -14,23 +15,25 @@ autorequire:
|
|
|
14
15
|
bindir: bin
|
|
15
16
|
cert_chain: []
|
|
16
17
|
|
|
17
|
-
date: 2010-
|
|
18
|
+
date: 2010-08-31 00:00:00 -07:00
|
|
18
19
|
default_executable:
|
|
19
20
|
dependencies:
|
|
20
21
|
- !ruby/object:Gem::Dependency
|
|
21
|
-
|
|
22
|
+
type: :runtime
|
|
22
23
|
prerelease: false
|
|
23
|
-
|
|
24
|
+
name: mechanize
|
|
25
|
+
version_requirements: &id001 !ruby/object:Gem::Requirement
|
|
26
|
+
none: false
|
|
24
27
|
requirements:
|
|
25
28
|
- - ">="
|
|
26
29
|
- !ruby/object:Gem::Version
|
|
30
|
+
hash: 61
|
|
27
31
|
segments:
|
|
28
32
|
- 0
|
|
29
33
|
- 9
|
|
30
34
|
- 3
|
|
31
35
|
version: 0.9.3
|
|
32
|
-
|
|
33
|
-
version_requirements: *id001
|
|
36
|
+
requirement: *id001
|
|
34
37
|
description: Library which provides a ruby interface to the University of Washington student portal.
|
|
35
38
|
email: mitchell.hashimoto@gmail.com
|
|
36
39
|
executables: []
|
|
@@ -41,6 +44,8 @@ extra_rdoc_files:
|
|
|
41
44
|
- README.md
|
|
42
45
|
files:
|
|
43
46
|
- .gitignore
|
|
47
|
+
- Gemfile
|
|
48
|
+
- Gemfile.lock
|
|
44
49
|
- README.md
|
|
45
50
|
- Rakefile
|
|
46
51
|
- VERSION
|
|
@@ -106,23 +111,27 @@ rdoc_options:
|
|
|
106
111
|
require_paths:
|
|
107
112
|
- lib
|
|
108
113
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
114
|
+
none: false
|
|
109
115
|
requirements:
|
|
110
116
|
- - ">="
|
|
111
117
|
- !ruby/object:Gem::Version
|
|
118
|
+
hash: 3
|
|
112
119
|
segments:
|
|
113
120
|
- 0
|
|
114
121
|
version: "0"
|
|
115
122
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
123
|
+
none: false
|
|
116
124
|
requirements:
|
|
117
125
|
- - ">="
|
|
118
126
|
- !ruby/object:Gem::Version
|
|
127
|
+
hash: 3
|
|
119
128
|
segments:
|
|
120
129
|
- 0
|
|
121
130
|
version: "0"
|
|
122
131
|
requirements: []
|
|
123
132
|
|
|
124
133
|
rubyforge_project:
|
|
125
|
-
rubygems_version: 1.3.
|
|
134
|
+
rubygems_version: 1.3.7
|
|
126
135
|
signing_key:
|
|
127
136
|
specification_version: 3
|
|
128
137
|
summary: Library which provides a ruby interface to the University of Washington student portal.
|