coalescing_panda 3.1.13 → 3.1.14
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/models/coalescing_panda/course.rb +2 -0
- data/app/models/coalescing_panda/group.rb +11 -0
- data/app/models/coalescing_panda/group_membership.rb +7 -0
- data/app/models/coalescing_panda/workers/course_miner.rb +19 -2
- data/app/models/concerns/single_table_polymorphic.rb +11 -0
- data/db/migrate/20150107205405_create_coalescing_panda_groups.rb +15 -0
- data/db/migrate/20150107205413_create_coalescing_panda_group_memberships.rb +13 -0
- data/lib/coalescing_panda/version.rb +1 -1
- data/spec/dummy/db/development.sqlite3 +0 -0
- data/spec/dummy/db/schema.rb +30 -5
- data/spec/dummy/db/test.sqlite3 +0 -0
- data/spec/dummy/log/development.log +28 -0
- data/spec/dummy/log/test.log +45990 -0
- data/spec/models/coalescing_panda/course_spec.rb +10 -0
- data/spec/models/coalescing_panda/group_membership_spec.rb +17 -0
- data/spec/models/coalescing_panda/group_spec.rb +17 -0
- data/spec/models/coalescing_panda/workers/course_miner_spec.rb +39 -3
- metadata +55 -43
@@ -19,6 +19,16 @@ RSpec.describe CoalescingPanda::Course, :type => :model do
|
|
19
19
|
expect(CoalescingPanda::Course.reflect_on_association(:sections).macro).to eql(:has_many)
|
20
20
|
end
|
21
21
|
|
22
|
+
it 'should have many groups' do
|
23
|
+
expect(CoalescingPanda::Course.reflect_on_association(:groups)).to_not be_nil
|
24
|
+
expect(CoalescingPanda::Course.reflect_on_association(:groups).macro).to eql(:has_many)
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'should have many group_memberships' do
|
28
|
+
expect(CoalescingPanda::Course.reflect_on_association(:group_memberships)).to_not be_nil
|
29
|
+
expect(CoalescingPanda::Course.reflect_on_association(:group_memberships).macro).to eql(:has_many)
|
30
|
+
end
|
31
|
+
|
22
32
|
it 'should have many assignments' do
|
23
33
|
expect(CoalescingPanda::Course.reflect_on_association(:assignments)).to_not be_nil
|
24
34
|
expect(CoalescingPanda::Course.reflect_on_association(:assignments).macro).to eql(:has_many)
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'rails_helper'
|
2
|
+
|
3
|
+
RSpec.describe CoalescingPanda::GroupMembership, :type => :model do
|
4
|
+
let(:term) { FactoryGirl.create(:group) }
|
5
|
+
|
6
|
+
context "associations" do
|
7
|
+
it 'should belong_to a group' do
|
8
|
+
expect(CoalescingPanda::GroupMembership.reflect_on_association(:group)).to_not be_nil
|
9
|
+
expect(CoalescingPanda::GroupMembership.reflect_on_association(:group).macro).to eql(:belongs_to)
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'should belong_to a user' do
|
13
|
+
expect(CoalescingPanda::GroupMembership.reflect_on_association(:user)).to_not be_nil
|
14
|
+
expect(CoalescingPanda::GroupMembership.reflect_on_association(:user).macro).to eql(:belongs_to)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'rails_helper'
|
2
|
+
|
3
|
+
RSpec.describe CoalescingPanda::Group, :type => :model do
|
4
|
+
let(:term) { FactoryGirl.create(:group) }
|
5
|
+
|
6
|
+
context "associations" do
|
7
|
+
it 'should belong_to a context' do
|
8
|
+
expect(CoalescingPanda::Group.reflect_on_association(:context)).to_not be_nil
|
9
|
+
expect(CoalescingPanda::Group.reflect_on_association(:context).macro).to eql(:belongs_to)
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'should have_many group_memberships' do
|
13
|
+
expect(CoalescingPanda::Group.reflect_on_association(:group_memberships)).to_not be_nil
|
14
|
+
expect(CoalescingPanda::Group.reflect_on_association(:group_memberships).macro).to eql(:has_many)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -2,7 +2,7 @@ require 'rails_helper'
|
|
2
2
|
|
3
3
|
RSpec.describe CoalescingPanda::Workers::CourseMiner, :type => :model do
|
4
4
|
let(:course) { FactoryGirl.create(:course) }
|
5
|
-
let(:worker) { CoalescingPanda::Workers::CourseMiner.new(course, [:sections, :users, :enrollments, :assignments, :submissions]) }
|
5
|
+
let(:worker) { CoalescingPanda::Workers::CourseMiner.new(course, [:sections, :users, :enrollments, :assignments, :submissions, :groups, :group_memberships]) }
|
6
6
|
let(:users_response) {[
|
7
7
|
{"id"=>1, "name"=>"teacher@test.com", "sortable_name"=>"teacher@test.com", "short_name"=>"teacher@test.com", "login_id"=>"teacher@test.com"},
|
8
8
|
{"id"=>2, "name"=>"student1@test.com", "sortable_name"=>"student1@test.com", "short_name"=>"student1@test.com", "login_id"=>"student1@test.com"},
|
@@ -28,6 +28,14 @@ RSpec.describe CoalescingPanda::Workers::CourseMiner, :type => :model do
|
|
28
28
|
{"assignment_id"=>2, "attempt"=>nil, "body"=>nil, "grade"=>"90", "grade_matches_current_submission"=>true, "graded_at"=>"2014-11-20T23:18:21Z", "grader_id"=>1, "id"=>4, "score"=>90, "submission_type"=>nil, "submitted_at"=>nil, "url"=>nil, "user_id"=>3, "workflow_state"=>"graded", "late"=>false, "preview_url"=>"http://localhost:3000/courses/1/assignments/2/submissions/3?preview=1"},
|
29
29
|
{"assignment_id"=>2, "attempt"=>nil, "body"=>nil, "grade"=>"80", "grade_matches_current_submission"=>true, "graded_at"=>"2014-11-20T23:18:17Z", "grader_id"=>1, "id"=>2, "score"=>80, "submission_type"=>nil, "submitted_at"=>nil, "url"=>nil, "user_id"=>2, "workflow_state"=>"graded", "late"=>false, "preview_url"=>"http://localhost:3000/courses/1/assignments/2/submissions/2?preview=1"}
|
30
30
|
]}
|
31
|
+
let(:groups_response){[
|
32
|
+
{"description"=> nil, "group_category_id"=> 3, "id"=> 4, "is_public"=> false, "join_level"=> "invitation_only", "max_membership"=> 5, "name"=> "Student Group 1", "members_count"=> 2, "storage_quota_mb"=> 50, "context_type"=> "CoalescingPanda::Course", "course_id"=> 1, "avatar_url"=> nil, "role"=> nil, "leader"=> nil},
|
33
|
+
{"description"=> nil, "group_category_id"=> 3, "id"=> 5, "is_public"=> false, "join_level"=> "invitation_only", "max_membership"=> 5, "name"=> "Student Group 2", "members_count"=> 2, "storage_quota_mb"=> 50, "context_type"=> "CoalescingPanda::Course", "course_id"=> 1, "avatar_url"=> nil, "role"=> nil, "leader"=> nil}
|
34
|
+
]}
|
35
|
+
let(:membership_response){[
|
36
|
+
{"group_id"=> 4, "id"=> 13, "moderator"=> false, "user_id"=> 2, "workflow_state"=> "accepted"},
|
37
|
+
{"group_id"=> 4, "id"=> 14, "moderator"=> false, "user_id"=> 3, "workflow_state"=> "accepted"}
|
38
|
+
]}
|
31
39
|
|
32
40
|
before do
|
33
41
|
Bearcat::Client.any_instance.stub(:list_course_users) { double(Bearcat::ApiArray, :all_pages! => users_response) }
|
@@ -37,13 +45,15 @@ RSpec.describe CoalescingPanda::Workers::CourseMiner, :type => :model do
|
|
37
45
|
Bearcat::Client.any_instance.stub(:get_course_submissions) { double(Bearcat::ApiArray, :all_pages! => {}) }
|
38
46
|
Bearcat::Client.any_instance.stub(:get_course_submissions).with("1", "1") { double(Bearcat::ApiArray, :all_pages! => submissions_response1) }
|
39
47
|
Bearcat::Client.any_instance.stub(:get_course_submissions).with("1", "2") { double(Bearcat::ApiArray, :all_pages! => submissions_response2) }
|
48
|
+
Bearcat::Client.any_instance.stub(:course_groups) { double(Bearcat::ApiArray, :all_pages! => groups_response) }
|
49
|
+
Bearcat::Client.any_instance.stub(:list_group_memberships) { double(Bearcat::ApiArray, :all_pages! => membership_response) }
|
40
50
|
end
|
41
51
|
|
42
52
|
describe '#initialize' do
|
43
53
|
it 'should set instance variables a user' do
|
44
54
|
expect(worker.course).to eq course
|
45
55
|
expect(worker.account).to eq course.account
|
46
|
-
expect(worker.options).to eq [:sections, :users, :enrollments, :assignments, :submissions]
|
56
|
+
expect(worker.options).to eq [:sections, :users, :enrollments, :assignments, :submissions, :groups, :group_memberships]
|
47
57
|
expect(worker.batch).to eq CoalescingPanda::CanvasBatch.last
|
48
58
|
end
|
49
59
|
end
|
@@ -68,6 +78,8 @@ RSpec.describe CoalescingPanda::Workers::CourseMiner, :type => :model do
|
|
68
78
|
expect(worker.api_method(:enrollments)).to eq :course_enrollments
|
69
79
|
expect(worker.api_method(:assignments)).to eq :assignments
|
70
80
|
expect(worker.api_method(:submissions)).to eq :get_course_submissions
|
81
|
+
expect(worker.api_method(:groups)).to eq :course_groups
|
82
|
+
expect(worker.api_method(:group_memberships)).to eq :list_group_memberships
|
71
83
|
end
|
72
84
|
|
73
85
|
it 'raises and error if method doesnt exist' do
|
@@ -111,6 +123,18 @@ RSpec.describe CoalescingPanda::Workers::CourseMiner, :type => :model do
|
|
111
123
|
worker.create_records(submissions_response, :submissions)
|
112
124
|
expect(CoalescingPanda::Submission.count).to eq 4
|
113
125
|
end
|
126
|
+
|
127
|
+
it 'creates groups' do
|
128
|
+
CoalescingPanda::Group.destroy_all
|
129
|
+
worker.create_records(groups_response, :groups)
|
130
|
+
expect(CoalescingPanda::Group.count).to eq 2
|
131
|
+
end
|
132
|
+
|
133
|
+
it 'creates group memberships' do
|
134
|
+
CoalescingPanda::GroupMembership.destroy_all
|
135
|
+
worker.create_records(membership_response, :group_memberships)
|
136
|
+
expect(CoalescingPanda::GroupMembership.count).to eq 2
|
137
|
+
end
|
114
138
|
end
|
115
139
|
|
116
140
|
describe '#standard_attributes' do
|
@@ -138,7 +162,7 @@ RSpec.describe CoalescingPanda::Workers::CourseMiner, :type => :model do
|
|
138
162
|
it 'returns assignment attributes' do
|
139
163
|
attributes = {"assignment_group_id"=>1, "automatic_peer_reviews"=>false, "created_at"=>"2014-11-18T18:04:38Z", "description"=>"<p>What is your name?</p>", "due_at"=>end_time, "grade_group_students_individually"=>false, "grading_standard_id"=>nil, "grading_type"=>"points", "group_category_id"=>nil, "id"=>1, "lock_at"=>start_time, "peer_reviews"=>false, "points_possible"=>100, "position"=>1, "post_to_sis"=>true, "unlock_at"=>nil, "updated_at"=>"2014-11-18T18:04:42Z", "course_id"=>1, "name"=>"Gimme your name", "submission_types"=>["online_text_entry"], "has_submitted_submissions"=>false, "muted"=>false, "html_url"=>"http://localhost:3000/courses/1/assignments/1", "needs_grading_count"=>0, "integration_id"=>nil, "integration_data"=>{}, "published"=>true, "unpublishable"=>true, "locked_for_user"=>false}
|
140
164
|
record = CoalescingPanda::Assignment.new
|
141
|
-
expect(worker.standard_attributes(record, attributes)).to eq({"created_at"=>"2014-11-18T18:04:38Z", "description"=>"<p>What is your name?</p>", "due_at"=>end_time, "lock_at"=>start_time, "points_possible"=>100, "unlock_at"=>nil, "updated_at"=>"2014-11-18T18:04:42Z", "name"=>"Gimme your name"})
|
165
|
+
expect(worker.standard_attributes(record, attributes)).to eq({"created_at"=>"2014-11-18T18:04:38Z", "description"=>"<p>What is your name?</p>", "due_at"=>end_time, "grade_group_students_individually" => false, "group_category_id" => nil, "lock_at"=>start_time, "points_possible"=>100, "published" => true, "submission_types" => ["online_text_entry"], "unlock_at"=>nil, "updated_at"=>"2014-11-18T18:04:42Z", "name"=>"Gimme your name"})
|
142
166
|
end
|
143
167
|
|
144
168
|
it 'returns submission attributes' do
|
@@ -146,6 +170,18 @@ RSpec.describe CoalescingPanda::Workers::CourseMiner, :type => :model do
|
|
146
170
|
record = CoalescingPanda::Submission.new
|
147
171
|
expect(worker.standard_attributes(record, attributes)).to eq({"grade"=>"70", "score"=>70, "submitted_at"=>nil, "url"=>"http://test.com", "workflow_state"=>"graded"})
|
148
172
|
end
|
173
|
+
|
174
|
+
it 'returns group attributes' do
|
175
|
+
attributes = {"description"=> nil,"group_category_id"=> 3,"id"=> 4,"is_public"=> false,"join_level"=> "invitation_only","max_membership"=> 5,"name"=> "Student Group 1","members_count"=> 2,"storage_quota_mb"=> 50,"context_type"=> "Course","course_id"=> 3709,"avatar_url"=> nil,"role"=> nil,"leader"=> nil}
|
176
|
+
record = CoalescingPanda::Group.new
|
177
|
+
expect(worker.standard_attributes(record, attributes)).to eq({"description" => nil , "group_category_id" => 3, "name" => "Student Group 1", "members_count" => 2, "context_type" => 'Course'})
|
178
|
+
end
|
179
|
+
|
180
|
+
it 'returns group membership attributes' do
|
181
|
+
attributes = {"group_id"=> 4,"id"=> 13,"moderator"=> false,"user_id"=> 2,"workflow_state"=> "accepted"}
|
182
|
+
record = CoalescingPanda::GroupMembership.new
|
183
|
+
expect(worker.standard_attributes(record, attributes)).to eq({"workflow_state" => "accepted"})
|
184
|
+
end
|
149
185
|
end
|
150
186
|
|
151
187
|
describe '#sis_id' do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: coalescing_panda
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.1.
|
4
|
+
version: 3.1.14
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nathan Mills
|
@@ -10,34 +10,34 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2015-01-
|
13
|
+
date: 2015-01-08 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rails
|
17
17
|
requirement: !ruby/object:Gem::Requirement
|
18
18
|
requirements:
|
19
|
-
- -
|
19
|
+
- - ~>
|
20
20
|
- !ruby/object:Gem::Version
|
21
21
|
version: 4.0.1
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
25
|
requirements:
|
26
|
-
- -
|
26
|
+
- - ~>
|
27
27
|
- !ruby/object:Gem::Version
|
28
28
|
version: 4.0.1
|
29
29
|
- !ruby/object:Gem::Dependency
|
30
30
|
name: bearcat
|
31
31
|
requirement: !ruby/object:Gem::Requirement
|
32
32
|
requirements:
|
33
|
-
- -
|
33
|
+
- - ~>
|
34
34
|
- !ruby/object:Gem::Version
|
35
35
|
version: 1.0.5
|
36
36
|
type: :runtime
|
37
37
|
prerelease: false
|
38
38
|
version_requirements: !ruby/object:Gem::Requirement
|
39
39
|
requirements:
|
40
|
-
- -
|
40
|
+
- - ~>
|
41
41
|
- !ruby/object:Gem::Version
|
42
42
|
version: 1.0.5
|
43
43
|
- !ruby/object:Gem::Dependency
|
@@ -58,238 +58,238 @@ dependencies:
|
|
58
58
|
name: ims-lti
|
59
59
|
requirement: !ruby/object:Gem::Requirement
|
60
60
|
requirements:
|
61
|
-
- -
|
61
|
+
- - '>='
|
62
62
|
- !ruby/object:Gem::Version
|
63
63
|
version: '0'
|
64
64
|
type: :runtime
|
65
65
|
prerelease: false
|
66
66
|
version_requirements: !ruby/object:Gem::Requirement
|
67
67
|
requirements:
|
68
|
-
- -
|
68
|
+
- - '>='
|
69
69
|
- !ruby/object:Gem::Version
|
70
70
|
version: '0'
|
71
71
|
- !ruby/object:Gem::Dependency
|
72
72
|
name: haml-rails
|
73
73
|
requirement: !ruby/object:Gem::Requirement
|
74
74
|
requirements:
|
75
|
-
- -
|
75
|
+
- - '>='
|
76
76
|
- !ruby/object:Gem::Version
|
77
77
|
version: '0'
|
78
78
|
type: :runtime
|
79
79
|
prerelease: false
|
80
80
|
version_requirements: !ruby/object:Gem::Requirement
|
81
81
|
requirements:
|
82
|
-
- -
|
82
|
+
- - '>='
|
83
83
|
- !ruby/object:Gem::Version
|
84
84
|
version: '0'
|
85
85
|
- !ruby/object:Gem::Dependency
|
86
86
|
name: sass-rails
|
87
87
|
requirement: !ruby/object:Gem::Requirement
|
88
88
|
requirements:
|
89
|
-
- -
|
89
|
+
- - ~>
|
90
90
|
- !ruby/object:Gem::Version
|
91
91
|
version: 4.0.0
|
92
92
|
type: :runtime
|
93
93
|
prerelease: false
|
94
94
|
version_requirements: !ruby/object:Gem::Requirement
|
95
95
|
requirements:
|
96
|
-
- -
|
96
|
+
- - ~>
|
97
97
|
- !ruby/object:Gem::Version
|
98
98
|
version: 4.0.0
|
99
99
|
- !ruby/object:Gem::Dependency
|
100
100
|
name: jquery-rails
|
101
101
|
requirement: !ruby/object:Gem::Requirement
|
102
102
|
requirements:
|
103
|
-
- -
|
103
|
+
- - '>='
|
104
104
|
- !ruby/object:Gem::Version
|
105
105
|
version: '0'
|
106
106
|
type: :runtime
|
107
107
|
prerelease: false
|
108
108
|
version_requirements: !ruby/object:Gem::Requirement
|
109
109
|
requirements:
|
110
|
-
- -
|
110
|
+
- - '>='
|
111
111
|
- !ruby/object:Gem::Version
|
112
112
|
version: '0'
|
113
113
|
- !ruby/object:Gem::Dependency
|
114
114
|
name: coffee-rails
|
115
115
|
requirement: !ruby/object:Gem::Requirement
|
116
116
|
requirements:
|
117
|
-
- -
|
117
|
+
- - ~>
|
118
118
|
- !ruby/object:Gem::Version
|
119
119
|
version: 4.0.0
|
120
120
|
type: :runtime
|
121
121
|
prerelease: false
|
122
122
|
version_requirements: !ruby/object:Gem::Requirement
|
123
123
|
requirements:
|
124
|
-
- -
|
124
|
+
- - ~>
|
125
125
|
- !ruby/object:Gem::Version
|
126
126
|
version: 4.0.0
|
127
127
|
- !ruby/object:Gem::Dependency
|
128
128
|
name: p3p
|
129
129
|
requirement: !ruby/object:Gem::Requirement
|
130
130
|
requirements:
|
131
|
-
- -
|
131
|
+
- - '>='
|
132
132
|
- !ruby/object:Gem::Version
|
133
133
|
version: '0'
|
134
134
|
type: :runtime
|
135
135
|
prerelease: false
|
136
136
|
version_requirements: !ruby/object:Gem::Requirement
|
137
137
|
requirements:
|
138
|
-
- -
|
138
|
+
- - '>='
|
139
139
|
- !ruby/object:Gem::Version
|
140
140
|
version: '0'
|
141
141
|
- !ruby/object:Gem::Dependency
|
142
142
|
name: useragent
|
143
143
|
requirement: !ruby/object:Gem::Requirement
|
144
144
|
requirements:
|
145
|
-
- -
|
145
|
+
- - '>='
|
146
146
|
- !ruby/object:Gem::Version
|
147
147
|
version: '0'
|
148
148
|
type: :runtime
|
149
149
|
prerelease: false
|
150
150
|
version_requirements: !ruby/object:Gem::Requirement
|
151
151
|
requirements:
|
152
|
-
- -
|
152
|
+
- - '>='
|
153
153
|
- !ruby/object:Gem::Version
|
154
154
|
version: '0'
|
155
155
|
- !ruby/object:Gem::Dependency
|
156
156
|
name: delayed_job_active_record
|
157
157
|
requirement: !ruby/object:Gem::Requirement
|
158
158
|
requirements:
|
159
|
-
- -
|
159
|
+
- - '>='
|
160
160
|
- !ruby/object:Gem::Version
|
161
161
|
version: '0'
|
162
162
|
type: :runtime
|
163
163
|
prerelease: false
|
164
164
|
version_requirements: !ruby/object:Gem::Requirement
|
165
165
|
requirements:
|
166
|
-
- -
|
166
|
+
- - '>='
|
167
167
|
- !ruby/object:Gem::Version
|
168
168
|
version: '0'
|
169
169
|
- !ruby/object:Gem::Dependency
|
170
170
|
name: sqlite3
|
171
171
|
requirement: !ruby/object:Gem::Requirement
|
172
172
|
requirements:
|
173
|
-
- -
|
173
|
+
- - '>='
|
174
174
|
- !ruby/object:Gem::Version
|
175
175
|
version: '0'
|
176
176
|
type: :development
|
177
177
|
prerelease: false
|
178
178
|
version_requirements: !ruby/object:Gem::Requirement
|
179
179
|
requirements:
|
180
|
-
- -
|
180
|
+
- - '>='
|
181
181
|
- !ruby/object:Gem::Version
|
182
182
|
version: '0'
|
183
183
|
- !ruby/object:Gem::Dependency
|
184
184
|
name: rspec-rails
|
185
185
|
requirement: !ruby/object:Gem::Requirement
|
186
186
|
requirements:
|
187
|
-
- -
|
187
|
+
- - '>='
|
188
188
|
- !ruby/object:Gem::Version
|
189
189
|
version: '0'
|
190
190
|
type: :development
|
191
191
|
prerelease: false
|
192
192
|
version_requirements: !ruby/object:Gem::Requirement
|
193
193
|
requirements:
|
194
|
-
- -
|
194
|
+
- - '>='
|
195
195
|
- !ruby/object:Gem::Version
|
196
196
|
version: '0'
|
197
197
|
- !ruby/object:Gem::Dependency
|
198
198
|
name: factory_girl_rails
|
199
199
|
requirement: !ruby/object:Gem::Requirement
|
200
200
|
requirements:
|
201
|
-
- -
|
201
|
+
- - '>='
|
202
202
|
- !ruby/object:Gem::Version
|
203
203
|
version: '0'
|
204
204
|
type: :development
|
205
205
|
prerelease: false
|
206
206
|
version_requirements: !ruby/object:Gem::Requirement
|
207
207
|
requirements:
|
208
|
-
- -
|
208
|
+
- - '>='
|
209
209
|
- !ruby/object:Gem::Version
|
210
210
|
version: '0'
|
211
211
|
- !ruby/object:Gem::Dependency
|
212
212
|
name: shoulda-matchers
|
213
213
|
requirement: !ruby/object:Gem::Requirement
|
214
214
|
requirements:
|
215
|
-
- -
|
215
|
+
- - '>='
|
216
216
|
- !ruby/object:Gem::Version
|
217
217
|
version: '0'
|
218
218
|
type: :development
|
219
219
|
prerelease: false
|
220
220
|
version_requirements: !ruby/object:Gem::Requirement
|
221
221
|
requirements:
|
222
|
-
- -
|
222
|
+
- - '>='
|
223
223
|
- !ruby/object:Gem::Version
|
224
224
|
version: '0'
|
225
225
|
- !ruby/object:Gem::Dependency
|
226
226
|
name: nokogiri
|
227
227
|
requirement: !ruby/object:Gem::Requirement
|
228
228
|
requirements:
|
229
|
-
- -
|
229
|
+
- - '>='
|
230
230
|
- !ruby/object:Gem::Version
|
231
231
|
version: '0'
|
232
232
|
type: :development
|
233
233
|
prerelease: false
|
234
234
|
version_requirements: !ruby/object:Gem::Requirement
|
235
235
|
requirements:
|
236
|
-
- -
|
236
|
+
- - '>='
|
237
237
|
- !ruby/object:Gem::Version
|
238
238
|
version: '0'
|
239
239
|
- !ruby/object:Gem::Dependency
|
240
240
|
name: simplecov
|
241
241
|
requirement: !ruby/object:Gem::Requirement
|
242
242
|
requirements:
|
243
|
-
- -
|
243
|
+
- - '>='
|
244
244
|
- !ruby/object:Gem::Version
|
245
245
|
version: '0'
|
246
246
|
type: :development
|
247
247
|
prerelease: false
|
248
248
|
version_requirements: !ruby/object:Gem::Requirement
|
249
249
|
requirements:
|
250
|
-
- -
|
250
|
+
- - '>='
|
251
251
|
- !ruby/object:Gem::Version
|
252
252
|
version: '0'
|
253
253
|
- !ruby/object:Gem::Dependency
|
254
254
|
name: byebug
|
255
255
|
requirement: !ruby/object:Gem::Requirement
|
256
256
|
requirements:
|
257
|
-
- -
|
257
|
+
- - '>='
|
258
258
|
- !ruby/object:Gem::Version
|
259
259
|
version: '0'
|
260
260
|
type: :development
|
261
261
|
prerelease: false
|
262
262
|
version_requirements: !ruby/object:Gem::Requirement
|
263
263
|
requirements:
|
264
|
-
- -
|
264
|
+
- - '>='
|
265
265
|
- !ruby/object:Gem::Version
|
266
266
|
version: '0'
|
267
267
|
- !ruby/object:Gem::Dependency
|
268
268
|
name: pry
|
269
269
|
requirement: !ruby/object:Gem::Requirement
|
270
270
|
requirements:
|
271
|
-
- -
|
271
|
+
- - '>='
|
272
272
|
- !ruby/object:Gem::Version
|
273
273
|
version: '0'
|
274
274
|
type: :development
|
275
275
|
prerelease: false
|
276
276
|
version_requirements: !ruby/object:Gem::Requirement
|
277
277
|
requirements:
|
278
|
-
- -
|
278
|
+
- - '>='
|
279
279
|
- !ruby/object:Gem::Version
|
280
280
|
version: '0'
|
281
281
|
- !ruby/object:Gem::Dependency
|
282
282
|
name: webmock
|
283
283
|
requirement: !ruby/object:Gem::Requirement
|
284
284
|
requirements:
|
285
|
-
- -
|
285
|
+
- - '>='
|
286
286
|
- !ruby/object:Gem::Version
|
287
287
|
version: '0'
|
288
288
|
type: :development
|
289
289
|
prerelease: false
|
290
290
|
version_requirements: !ruby/object:Gem::Requirement
|
291
291
|
requirements:
|
292
|
-
- -
|
292
|
+
- - '>='
|
293
293
|
- !ruby/object:Gem::Version
|
294
294
|
version: '0'
|
295
295
|
description:
|
@@ -326,6 +326,8 @@ files:
|
|
326
326
|
- app/models/coalescing_panda/canvas_batch.rb
|
327
327
|
- app/models/coalescing_panda/course.rb
|
328
328
|
- app/models/coalescing_panda/enrollment.rb
|
329
|
+
- app/models/coalescing_panda/group.rb
|
330
|
+
- app/models/coalescing_panda/group_membership.rb
|
329
331
|
- app/models/coalescing_panda/lti_account.rb
|
330
332
|
- app/models/coalescing_panda/lti_nonce.rb
|
331
333
|
- app/models/coalescing_panda/section.rb
|
@@ -334,6 +336,7 @@ files:
|
|
334
336
|
- app/models/coalescing_panda/term.rb
|
335
337
|
- app/models/coalescing_panda/user.rb
|
336
338
|
- app/models/coalescing_panda/workers/course_miner.rb
|
339
|
+
- app/models/concerns/single_table_polymorphic.rb
|
337
340
|
- app/views/coalescing_panda/canvas_batches/_canvas_batch.html.haml
|
338
341
|
- app/views/coalescing_panda/canvas_batches/_canvas_batch_flash.html.haml
|
339
342
|
- app/views/coalescing_panda/launch.html.haml
|
@@ -359,6 +362,8 @@ files:
|
|
359
362
|
- db/migrate/20141208221740_add_submission_types_to_assignments.rb
|
360
363
|
- db/migrate/20150106175418_add_group_category_id_to_assignment.rb
|
361
364
|
- db/migrate/20150106180131_add_published_to_assignments.rb
|
365
|
+
- db/migrate/20150107205405_create_coalescing_panda_groups.rb
|
366
|
+
- db/migrate/20150107205413_create_coalescing_panda_group_memberships.rb
|
362
367
|
- lib/coalescing_panda.rb
|
363
368
|
- lib/coalescing_panda/controller_helpers.rb
|
364
369
|
- lib/coalescing_panda/engine.rb
|
@@ -400,6 +405,7 @@ files:
|
|
400
405
|
- spec/dummy/db/schema.rb
|
401
406
|
- spec/dummy/db/test.sqlite3
|
402
407
|
- spec/dummy/log/development.log
|
408
|
+
- spec/dummy/log/test.log
|
403
409
|
- spec/dummy/public/404.html
|
404
410
|
- spec/dummy/public/422.html
|
405
411
|
- spec/dummy/public/500.html
|
@@ -418,6 +424,8 @@ files:
|
|
418
424
|
- spec/models/coalescing_panda/canvas_batch_spec.rb
|
419
425
|
- spec/models/coalescing_panda/course_spec.rb
|
420
426
|
- spec/models/coalescing_panda/enrollment_spec.rb
|
427
|
+
- spec/models/coalescing_panda/group_membership_spec.rb
|
428
|
+
- spec/models/coalescing_panda/group_spec.rb
|
421
429
|
- spec/models/coalescing_panda/lti_account_spec.rb
|
422
430
|
- spec/models/coalescing_panda/lti_nonce_spec.rb
|
423
431
|
- spec/models/coalescing_panda/section_spec.rb
|
@@ -436,17 +444,17 @@ require_paths:
|
|
436
444
|
- lib
|
437
445
|
required_ruby_version: !ruby/object:Gem::Requirement
|
438
446
|
requirements:
|
439
|
-
- -
|
447
|
+
- - '>='
|
440
448
|
- !ruby/object:Gem::Version
|
441
449
|
version: '0'
|
442
450
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
443
451
|
requirements:
|
444
|
-
- -
|
452
|
+
- - '>='
|
445
453
|
- !ruby/object:Gem::Version
|
446
454
|
version: '0'
|
447
455
|
requirements: []
|
448
456
|
rubyforge_project:
|
449
|
-
rubygems_version: 2.
|
457
|
+
rubygems_version: 2.4.5
|
450
458
|
signing_key:
|
451
459
|
specification_version: 4
|
452
460
|
summary: Canvas LTI and OAUTH2 mountable engine
|
@@ -484,6 +492,7 @@ test_files:
|
|
484
492
|
- spec/dummy/db/schema.rb
|
485
493
|
- spec/dummy/db/test.sqlite3
|
486
494
|
- spec/dummy/log/development.log
|
495
|
+
- spec/dummy/log/test.log
|
487
496
|
- spec/dummy/public/404.html
|
488
497
|
- spec/dummy/public/422.html
|
489
498
|
- spec/dummy/public/500.html
|
@@ -504,6 +513,8 @@ test_files:
|
|
504
513
|
- spec/models/coalescing_panda/canvas_batch_spec.rb
|
505
514
|
- spec/models/coalescing_panda/course_spec.rb
|
506
515
|
- spec/models/coalescing_panda/enrollment_spec.rb
|
516
|
+
- spec/models/coalescing_panda/group_membership_spec.rb
|
517
|
+
- spec/models/coalescing_panda/group_spec.rb
|
507
518
|
- spec/models/coalescing_panda/lti_account_spec.rb
|
508
519
|
- spec/models/coalescing_panda/lti_nonce_spec.rb
|
509
520
|
- spec/models/coalescing_panda/section_spec.rb
|
@@ -513,3 +524,4 @@ test_files:
|
|
513
524
|
- spec/models/coalescing_panda/workers/course_miner_spec.rb
|
514
525
|
- spec/rails_helper.rb
|
515
526
|
- spec/spec_helper.rb
|
527
|
+
has_rdoc:
|