stellar 0.1.0
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/.document +5 -0
- data/.project +18 -0
- data/.rspec +3 -0
- data/Gemfile +21 -0
- data/Gemfile.lock +75 -0
- data/LICENSE.txt +20 -0
- data/README.rdoc +18 -0
- data/Rakefile +76 -0
- data/VERSION +1 -0
- data/lib/stellar.rb +18 -0
- data/lib/stellar/auth.rb +130 -0
- data/lib/stellar/client.rb +66 -0
- data/lib/stellar/courses.rb +112 -0
- data/lib/stellar/homework.rb +242 -0
- data/lib/stellar/mitca.crt +21 -0
- data/spec/fixtures/.gitkeep +0 -0
- data/spec/spec_helper.rb +12 -0
- data/spec/stellar/auth_spec.rb +32 -0
- data/spec/stellar/client_spec.rb +58 -0
- data/spec/stellar/courses_spec.rb +41 -0
- data/spec/stellar/homework_spec.rb +32 -0
- data/spec/stellar/homework_submissions_spec.rb +124 -0
- data/spec/support/test-credentials.rb +24 -0
- metadata +205 -0
@@ -0,0 +1,41 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
|
3
|
+
describe Stellar::Courses do
|
4
|
+
let(:courses) { test_client.courses }
|
5
|
+
|
6
|
+
describe '#mine' do
|
7
|
+
let(:mine) { courses.mine }
|
8
|
+
|
9
|
+
it 'should have at least one course' do
|
10
|
+
mine.should have_at_least(1).course
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'should have a dot in each course number' do
|
14
|
+
mine.each do |c|
|
15
|
+
c.number.should match('.')
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'should have the course number in each URL' do
|
20
|
+
mine.each do |c|
|
21
|
+
c.url.should match(c.number)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe Stellar::Course do
|
28
|
+
let(:six) { test_client.course("6.006", 2011, :fall) }
|
29
|
+
|
30
|
+
describe '#navigation' do
|
31
|
+
let(:nav) { six.navigation }
|
32
|
+
|
33
|
+
it 'should have a Gradebook link' do
|
34
|
+
nav['Gradebook'].should be_kind_of(URI)
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'should have a Homework link' do
|
38
|
+
nav['Homework'].should be_kind_of(URI)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
|
3
|
+
describe Stellar::HomeworkList do
|
4
|
+
let(:six) { test_client.course("6.006", 2011, :fall) }
|
5
|
+
let(:homework) { six.homework }
|
6
|
+
|
7
|
+
describe 'all' do
|
8
|
+
let(:all) { homework.all }
|
9
|
+
|
10
|
+
it 'should have at least one assignment' do
|
11
|
+
all.should have_at_least(1).assignment
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'should have a Stellar::Homework in each assignment' do
|
15
|
+
all.each do |c|
|
16
|
+
c.should be_kind_of(Stellar::Homework)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe Stellar::Homework do
|
23
|
+
let(:six) { test_client.course("6.006", 2011, :fall) }
|
24
|
+
let(:ps1) { six.homework.named('Problem Set 1') }
|
25
|
+
|
26
|
+
it 'should have a name' do
|
27
|
+
ps1.name.should == 'Problem Set 1'
|
28
|
+
end
|
29
|
+
it 'should have a course' do
|
30
|
+
ps1.course.should == six
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,124 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
|
3
|
+
describe Stellar::Homework::Submission do
|
4
|
+
before(:all) do
|
5
|
+
@submissions = test_client.course('6.006', 2011, :fall).homework.
|
6
|
+
named('Problem Set 1').submissions
|
7
|
+
end
|
8
|
+
|
9
|
+
let(:one) { @submissions.find { |s| s.name == 'Christianne B. Swartz' } }
|
10
|
+
|
11
|
+
it "should have the author's name" do
|
12
|
+
one.name.should == 'Christianne B. Swartz'
|
13
|
+
end
|
14
|
+
it "should have the author's email" do
|
15
|
+
one.email.reverse.should == 'ude.tim@ytsirhc'
|
16
|
+
end
|
17
|
+
it 'should have a submission URL' do
|
18
|
+
one.file_url.should be_kind_of(URI)
|
19
|
+
end
|
20
|
+
it 'should have the right bits in the submission' do
|
21
|
+
one.file_data.should match(/\% 6\.006/)
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'should have at least one feedback comment' do
|
25
|
+
one.comments.should have_at_least(1).comment
|
26
|
+
end
|
27
|
+
|
28
|
+
describe Stellar::Homework::Submission::Comment do
|
29
|
+
let(:comment) { one.comments.first }
|
30
|
+
|
31
|
+
it 'should have an author' do
|
32
|
+
comment.author.should == 'Sarah Charmian Eisenstat'
|
33
|
+
end
|
34
|
+
it 'should have some text' do
|
35
|
+
comment.text.should match(/see attached/i)
|
36
|
+
end
|
37
|
+
it 'should have an attachment' do
|
38
|
+
comment.attachment_url.should be_kind_of(URI)
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'should have the right bits in the attachment' do
|
42
|
+
comment.attachment_data.should match(/^\%PDF\-.*\%\%EOF/m)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
describe '#add_comment with no file' do
|
47
|
+
before :all do
|
48
|
+
@text = 'Testing... please ignore this.'
|
49
|
+
@old_comments = one.comments
|
50
|
+
@result = one.add_comment @text
|
51
|
+
one.reload_comments!
|
52
|
+
end
|
53
|
+
after :all do
|
54
|
+
one.comments.last.delete!
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'should create a new comment' do
|
58
|
+
one.comments.length.should == @old_comments.length + 1
|
59
|
+
end
|
60
|
+
|
61
|
+
it 'should have the right text in the new comment' do
|
62
|
+
one.comments.last.text.should == @text
|
63
|
+
end
|
64
|
+
|
65
|
+
it 'should not have an attachment in the new comment' do
|
66
|
+
one.comments.last.attachment_url.should be_nil
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
describe '#add_comment with file' do
|
71
|
+
before :all do
|
72
|
+
@text = 'Testing... please ignore the attachment.'
|
73
|
+
@file_data = 'Please ignore this testing file.'
|
74
|
+
|
75
|
+
@old_comments = one.comments
|
76
|
+
@result = one.add_comment @text, @file_data
|
77
|
+
one.reload_comments!
|
78
|
+
end
|
79
|
+
after :all do
|
80
|
+
one.comments.last.delete!
|
81
|
+
end
|
82
|
+
|
83
|
+
it 'should create a new comment' do
|
84
|
+
one.comments.length.should == @old_comments.length + 1
|
85
|
+
end
|
86
|
+
|
87
|
+
it 'should have the right text in the new comment' do
|
88
|
+
one.comments.last.text.should == @text
|
89
|
+
end
|
90
|
+
|
91
|
+
it 'should have an attachment in the new comment' do
|
92
|
+
one.comments.last.attachment_url.should_not be_nil
|
93
|
+
end
|
94
|
+
|
95
|
+
it 'should have the right attachment bits' do
|
96
|
+
one.comments.last.attachment_data.should == @file_data
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
describe '#delete_comment' do
|
101
|
+
before :all do
|
102
|
+
@old_comments = one.comments
|
103
|
+
@result = one.add_comment @text
|
104
|
+
one.reload_comments!
|
105
|
+
@comment = one.comments.last
|
106
|
+
@comment.delete!
|
107
|
+
one.reload_comments!
|
108
|
+
end
|
109
|
+
|
110
|
+
it 'should remove that last comment' do
|
111
|
+
one.comments.reject(&:deleted?).length.should ==
|
112
|
+
@old_comments.reject(&:deleted?).length
|
113
|
+
end
|
114
|
+
|
115
|
+
it 'should keep the right comments' do
|
116
|
+
one.comments.reject(&:deleted?).map(&:text).should ==
|
117
|
+
@old_comments.reject(&:deleted?).map(&:text)
|
118
|
+
end
|
119
|
+
|
120
|
+
it 'should mark the comment as deleted' do
|
121
|
+
@comment.should be_deleted
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
|
3
|
+
# The MIT kerberos used to run tests.
|
4
|
+
def test_mit_kerberos
|
5
|
+
path = File.expand_path '../fixtures/kerberos.b64', File.dirname(__FILE__)
|
6
|
+
YAML.load File.read(path).unpack('m').first
|
7
|
+
end
|
8
|
+
|
9
|
+
# The MIT certificate used to run tests.
|
10
|
+
def test_mit_cert
|
11
|
+
path = File.expand_path '../fixtures/mit_cert.yml', File.dirname(__FILE__)
|
12
|
+
YAML.load File.read(path)
|
13
|
+
end
|
14
|
+
|
15
|
+
# Cached client authenticated through some means.
|
16
|
+
def test_client
|
17
|
+
TestCredentialsCache.test_client
|
18
|
+
end
|
19
|
+
|
20
|
+
class TestCredentialsCache
|
21
|
+
def self.test_client
|
22
|
+
@__test_client ||= Stellar::Client.new.auth :kerberos => test_mit_kerberos
|
23
|
+
end
|
24
|
+
end
|
metadata
ADDED
@@ -0,0 +1,205 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: stellar
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Victor Costan
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2011-10-16 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: mechanize
|
16
|
+
requirement: &26061560 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 2.0.2
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *26061560
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: nokogiri
|
27
|
+
requirement: &26060720 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 1.5.0
|
33
|
+
type: :runtime
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *26060720
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: rdoc
|
38
|
+
requirement: &26060120 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: 3.9.4
|
44
|
+
type: :development
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *26060120
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: rspec
|
49
|
+
requirement: &26059400 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 2.6.0
|
55
|
+
type: :development
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *26059400
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: yard
|
60
|
+
requirement: &26058440 !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: 0.7.2
|
66
|
+
type: :development
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *26058440
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: yard-rspec
|
71
|
+
requirement: &26054100 !ruby/object:Gem::Requirement
|
72
|
+
none: false
|
73
|
+
requirements:
|
74
|
+
- - ! '>='
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0.1'
|
77
|
+
type: :development
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: *26054100
|
80
|
+
- !ruby/object:Gem::Dependency
|
81
|
+
name: bundler
|
82
|
+
requirement: &26053420 !ruby/object:Gem::Requirement
|
83
|
+
none: false
|
84
|
+
requirements:
|
85
|
+
- - ! '>='
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: 1.0.21
|
88
|
+
type: :development
|
89
|
+
prerelease: false
|
90
|
+
version_requirements: *26053420
|
91
|
+
- !ruby/object:Gem::Dependency
|
92
|
+
name: jeweler
|
93
|
+
requirement: &26052760 !ruby/object:Gem::Requirement
|
94
|
+
none: false
|
95
|
+
requirements:
|
96
|
+
- - ! '>='
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: 1.6.4
|
99
|
+
type: :development
|
100
|
+
prerelease: false
|
101
|
+
version_requirements: *26052760
|
102
|
+
- !ruby/object:Gem::Dependency
|
103
|
+
name: rcov
|
104
|
+
requirement: &26051820 !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
type: :development
|
111
|
+
prerelease: false
|
112
|
+
version_requirements: *26051820
|
113
|
+
- !ruby/object:Gem::Dependency
|
114
|
+
name: ruby-debug
|
115
|
+
requirement: &26050900 !ruby/object:Gem::Requirement
|
116
|
+
none: false
|
117
|
+
requirements:
|
118
|
+
- - ! '>='
|
119
|
+
- !ruby/object:Gem::Version
|
120
|
+
version: '0'
|
121
|
+
type: :development
|
122
|
+
prerelease: false
|
123
|
+
version_requirements: *26050900
|
124
|
+
- !ruby/object:Gem::Dependency
|
125
|
+
name: ruby-debug19
|
126
|
+
requirement: &26050140 !ruby/object:Gem::Requirement
|
127
|
+
none: false
|
128
|
+
requirements:
|
129
|
+
- - ! '>='
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: *26050140
|
135
|
+
- !ruby/object:Gem::Dependency
|
136
|
+
name: highline
|
137
|
+
requirement: &26049520 !ruby/object:Gem::Requirement
|
138
|
+
none: false
|
139
|
+
requirements:
|
140
|
+
- - ! '>='
|
141
|
+
- !ruby/object:Gem::Version
|
142
|
+
version: 1.6.2
|
143
|
+
type: :development
|
144
|
+
prerelease: false
|
145
|
+
version_requirements: *26049520
|
146
|
+
description: So we don't have to put up with Stellar's craptastic ui
|
147
|
+
email: victor@costan.us
|
148
|
+
executables: []
|
149
|
+
extensions: []
|
150
|
+
extra_rdoc_files:
|
151
|
+
- LICENSE.txt
|
152
|
+
- README.rdoc
|
153
|
+
files:
|
154
|
+
- .document
|
155
|
+
- .project
|
156
|
+
- .rspec
|
157
|
+
- Gemfile
|
158
|
+
- Gemfile.lock
|
159
|
+
- LICENSE.txt
|
160
|
+
- README.rdoc
|
161
|
+
- Rakefile
|
162
|
+
- VERSION
|
163
|
+
- lib/stellar.rb
|
164
|
+
- lib/stellar/auth.rb
|
165
|
+
- lib/stellar/client.rb
|
166
|
+
- lib/stellar/courses.rb
|
167
|
+
- lib/stellar/homework.rb
|
168
|
+
- lib/stellar/mitca.crt
|
169
|
+
- spec/fixtures/.gitkeep
|
170
|
+
- spec/spec_helper.rb
|
171
|
+
- spec/stellar/auth_spec.rb
|
172
|
+
- spec/stellar/client_spec.rb
|
173
|
+
- spec/stellar/courses_spec.rb
|
174
|
+
- spec/stellar/homework_spec.rb
|
175
|
+
- spec/stellar/homework_submissions_spec.rb
|
176
|
+
- spec/support/test-credentials.rb
|
177
|
+
homepage: http://github.com/pwnall/stellar
|
178
|
+
licenses:
|
179
|
+
- MIT
|
180
|
+
post_install_message:
|
181
|
+
rdoc_options: []
|
182
|
+
require_paths:
|
183
|
+
- lib
|
184
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
185
|
+
none: false
|
186
|
+
requirements:
|
187
|
+
- - ! '>='
|
188
|
+
- !ruby/object:Gem::Version
|
189
|
+
version: '0'
|
190
|
+
segments:
|
191
|
+
- 0
|
192
|
+
hash: -1218153484388710196
|
193
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
194
|
+
none: false
|
195
|
+
requirements:
|
196
|
+
- - ! '>='
|
197
|
+
- !ruby/object:Gem::Version
|
198
|
+
version: '0'
|
199
|
+
requirements: []
|
200
|
+
rubyforge_project:
|
201
|
+
rubygems_version: 1.8.11
|
202
|
+
signing_key:
|
203
|
+
specification_version: 3
|
204
|
+
summary: Automated access to MIT's Stellar data
|
205
|
+
test_files: []
|