canvas_sync 0.12.0 → 0.16.1
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.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/lib/canvas_sync.rb +85 -30
- data/lib/canvas_sync/api_syncable.rb +4 -162
- data/lib/canvas_sync/class_callback_executor.rb +35 -0
- data/lib/canvas_sync/concerns/account/ancestry.rb +60 -0
- data/lib/canvas_sync/concerns/api_syncable.rb +189 -0
- data/lib/canvas_sync/concerns/legacy_columns.rb +34 -0
- data/lib/canvas_sync/generators/templates/migrations/create_group_memberships.rb +18 -0
- data/lib/canvas_sync/generators/templates/migrations/create_groups.rb +23 -0
- data/lib/canvas_sync/generators/templates/migrations/create_pseudonyms.rb +18 -0
- data/lib/canvas_sync/generators/templates/migrations/create_submissions.rb +1 -0
- data/lib/canvas_sync/generators/templates/models/account.rb +11 -1
- data/lib/canvas_sync/generators/templates/models/admin.rb +2 -1
- data/lib/canvas_sync/generators/templates/models/assignment.rb +2 -1
- data/lib/canvas_sync/generators/templates/models/assignment_group.rb +2 -1
- data/lib/canvas_sync/generators/templates/models/context_module.rb +2 -1
- data/lib/canvas_sync/generators/templates/models/context_module_item.rb +2 -1
- data/lib/canvas_sync/generators/templates/models/course.rb +4 -2
- data/lib/canvas_sync/generators/templates/models/enrollment.rb +2 -1
- data/lib/canvas_sync/generators/templates/models/group.rb +19 -0
- data/lib/canvas_sync/generators/templates/models/group_membership.rb +17 -0
- data/lib/canvas_sync/generators/templates/models/pseudonym.rb +8 -0
- data/lib/canvas_sync/generators/templates/models/role.rb +2 -1
- data/lib/canvas_sync/generators/templates/models/section.rb +2 -1
- data/lib/canvas_sync/generators/templates/models/submission.rb +3 -1
- data/lib/canvas_sync/generators/templates/models/term.rb +2 -1
- data/lib/canvas_sync/generators/templates/models/user.rb +4 -1
- data/lib/canvas_sync/importers/bulk_importer.rb +7 -1
- data/lib/canvas_sync/importers/legacy_importer.rb +4 -2
- data/lib/canvas_sync/job.rb +3 -1
- data/lib/canvas_sync/job_chain.rb +57 -0
- data/lib/canvas_sync/jobs/{sync_users_job.rb → sync_accounts_job.rb} +11 -6
- data/lib/canvas_sync/jobs/sync_provisioning_report_job.rb +2 -0
- data/lib/canvas_sync/processors/model_mappings.yml +81 -0
- data/lib/canvas_sync/processors/provisioning_report_processor.rb +28 -0
- data/lib/canvas_sync/record.rb +9 -0
- data/lib/canvas_sync/version.rb +1 -1
- data/spec/canvas_sync/canvas_sync_spec.rb +19 -16
- data/spec/canvas_sync/models/accounts_spec.rb +3 -0
- data/spec/canvas_sync/models/course_spec.rb +4 -0
- data/spec/canvas_sync/models/group_membership_spec.rb +26 -0
- data/spec/canvas_sync/models/group_spec.rb +26 -0
- data/spec/canvas_sync/models/user_spec.rb +2 -0
- data/spec/canvas_sync/processors/provisioning_report_processor_spec.rb +20 -0
- data/spec/dummy/app/models/account.rb +8 -1
- data/spec/dummy/app/models/admin.rb +2 -1
- data/spec/dummy/app/models/assignment.rb +2 -1
- data/spec/dummy/app/models/assignment_group.rb +2 -1
- data/spec/dummy/app/models/context_module.rb +2 -1
- data/spec/dummy/app/models/context_module_item.rb +2 -1
- data/spec/dummy/app/models/course.rb +4 -2
- data/spec/dummy/app/models/enrollment.rb +2 -1
- data/spec/dummy/app/models/group.rb +25 -0
- data/spec/dummy/app/models/group_membership.rb +23 -0
- data/spec/dummy/app/models/role.rb +2 -1
- data/spec/dummy/app/models/section.rb +2 -1
- data/spec/dummy/app/models/submission.rb +2 -1
- data/spec/dummy/app/models/term.rb +2 -1
- data/spec/dummy/app/models/user.rb +3 -1
- data/spec/dummy/config/application.rb +12 -1
- data/spec/dummy/config/database.yml +11 -11
- data/spec/dummy/config/environments/development.rb +3 -3
- data/spec/dummy/config/initializers/assets.rb +1 -1
- data/spec/dummy/db/migrate/20190702203627_create_submissions.rb +1 -0
- data/spec/dummy/db/migrate/20200415171620_create_groups.rb +29 -0
- data/spec/dummy/db/migrate/20200416214248_create_group_memberships.rb +24 -0
- data/spec/dummy/db/schema.rb +31 -1
- data/spec/factories/group_factory.rb +8 -0
- data/spec/factories/group_membership_factory.rb +6 -0
- data/spec/support/fixtures/reports/group_memberships.csv +3 -0
- data/spec/support/fixtures/reports/groups.csv +3 -0
- data/spec/support/fixtures/reports/submissions.csv +3 -3
- metadata +36 -6
- data/spec/canvas_sync/jobs/sync_users_job_spec.rb +0 -15
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe GroupMembership, type: :model do
|
4
|
+
let(:subject) {
|
5
|
+
FactoryGirl.create(:group_membership, group: FactoryGirl.create(:group), user: FactoryGirl.create(:user))
|
6
|
+
}
|
7
|
+
|
8
|
+
describe 'validations' do
|
9
|
+
it { should validate_presence_of(:canvas_id) }
|
10
|
+
it { should validate_uniqueness_of(:canvas_id) }
|
11
|
+
end
|
12
|
+
|
13
|
+
describe 'associations' do
|
14
|
+
it do
|
15
|
+
should belong_to(:group)
|
16
|
+
.with_primary_key(:canvas_id)
|
17
|
+
.with_foreign_key(:canvas_group_id)
|
18
|
+
end
|
19
|
+
|
20
|
+
it do
|
21
|
+
should belong_to(:user)
|
22
|
+
.with_primary_key(:canvas_id)
|
23
|
+
.with_foreign_key(:canvas_user_id)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe Group, type: :model do
|
4
|
+
let(:subject) { FactoryGirl.create(:group) }
|
5
|
+
|
6
|
+
describe 'validations' do
|
7
|
+
it { should validate_presence_of(:canvas_id) }
|
8
|
+
it { should validate_uniqueness_of(:canvas_id) }
|
9
|
+
end
|
10
|
+
|
11
|
+
describe 'associations' do
|
12
|
+
it { should have_many(:group_memberships) }
|
13
|
+
|
14
|
+
it do
|
15
|
+
should belong_to(:course)
|
16
|
+
.with_primary_key(:canvas_id)
|
17
|
+
.with_foreign_key(:canvas_course_id)
|
18
|
+
end
|
19
|
+
|
20
|
+
it do
|
21
|
+
should belong_to(:account)
|
22
|
+
.with_primary_key(:canvas_id)
|
23
|
+
.with_foreign_key(:canvas_account_id)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -42,6 +42,26 @@ RSpec.describe CanvasSync::Processors::ProvisioningReportProcessor do
|
|
42
42
|
expect(cross_listed_section.canvas_nonxlist_course_id).to eq 2
|
43
43
|
end
|
44
44
|
|
45
|
+
it 'processes groups' do
|
46
|
+
expect {
|
47
|
+
subject.process('spec/support/fixtures/reports/groups.csv', { models: ['groups'] }, 1)
|
48
|
+
}.to change { Group.count }.by(2)
|
49
|
+
group = Group.find_by_name('Group1')
|
50
|
+
expect(group.workflow_state).to eq 'available'
|
51
|
+
expect(group.canvas_account_id).to eq 1
|
52
|
+
expect(group.canvas_id).to eq 50
|
53
|
+
end
|
54
|
+
|
55
|
+
it 'processes group memberships' do
|
56
|
+
expect {
|
57
|
+
subject.process('spec/support/fixtures/reports/group_memberships.csv', { models: ['group_membership'] }, 1)
|
58
|
+
}.to change { GroupMembership.count }.by(2)
|
59
|
+
group = GroupMembership.find_by_canvas_id(50)
|
60
|
+
expect(group.workflow_state).to eq 'accepted'
|
61
|
+
expect(group.canvas_group_id).to eq 1
|
62
|
+
expect(group.canvas_user_id).to eq 10
|
63
|
+
end
|
64
|
+
|
45
65
|
context 'options[:models] is multiple models' do
|
46
66
|
it 'extracts the ZIP and processes each model' do
|
47
67
|
user_count = User.count
|
@@ -7,11 +7,18 @@
|
|
7
7
|
|
8
8
|
|
9
9
|
class Account < ApplicationRecord
|
10
|
-
include CanvasSync::
|
10
|
+
include CanvasSync::Record
|
11
|
+
include CanvasSync::Concerns::ApiSyncable
|
12
|
+
# include CanvasSync::Concerns::Account::Ancestry # Add support for the ancestry Gem
|
11
13
|
|
12
14
|
validates :canvas_id, uniqueness: true, presence: true
|
13
15
|
|
14
16
|
has_many :admins, primary_key: :canvas_id, foreign_key: :canvas_account_id
|
17
|
+
belongs_to :canvas_parent, class_name: 'Account', optional: true,
|
18
|
+
primary_key: :canvas_id, foreign_key: :canvas_parent_account_id
|
19
|
+
has_many :sub_accounts, class_name: 'Account',
|
20
|
+
primary_key: :canvas_id, foreign_key: :canvas_parent_account_id
|
21
|
+
has_many :groups, primary_key: :canvas_id, foreign_key: :canvas_account_id
|
15
22
|
|
16
23
|
api_syncable({
|
17
24
|
name: :name,
|
@@ -7,7 +7,8 @@
|
|
7
7
|
|
8
8
|
|
9
9
|
class Admin < ApplicationRecord
|
10
|
-
include CanvasSync::
|
10
|
+
include CanvasSync::Record
|
11
|
+
include CanvasSync::Concerns::ApiSyncable
|
11
12
|
|
12
13
|
validates :canvas_id, uniqueness: true, presence: true
|
13
14
|
belongs_to :account, primary_key: :canvas_id, foreign_key: :canvas_account_id, optional: true
|
@@ -7,7 +7,8 @@
|
|
7
7
|
|
8
8
|
|
9
9
|
class Assignment < ApplicationRecord
|
10
|
-
include CanvasSync::
|
10
|
+
include CanvasSync::Record
|
11
|
+
include CanvasSync::Concerns::ApiSyncable
|
11
12
|
|
12
13
|
validates :canvas_id, uniqueness: true, presence: true
|
13
14
|
belongs_to :context, polymorphic: true, optional: true, primary_key: :canvas_id, foreign_key: :canvas_context_id, foreign_type: :canvas_context_type
|
@@ -7,7 +7,8 @@
|
|
7
7
|
|
8
8
|
|
9
9
|
class AssignmentGroup < ApplicationRecord
|
10
|
-
include CanvasSync::
|
10
|
+
include CanvasSync::Record
|
11
|
+
include CanvasSync::Concerns::ApiSyncable
|
11
12
|
|
12
13
|
validates :canvas_id, uniqueness: true, presence: true
|
13
14
|
belongs_to :course, primary_key: :canvas_id, foreign_key: :canvas_course_id, optional: true
|
@@ -10,7 +10,8 @@
|
|
10
10
|
# 1 - Module is a reserved word in Rails and you can't call a model a Module
|
11
11
|
# 2 - Canvas calls them ContextModules
|
12
12
|
class ContextModule < ApplicationRecord
|
13
|
-
include CanvasSync::
|
13
|
+
include CanvasSync::Record
|
14
|
+
include CanvasSync::Concerns::ApiSyncable
|
14
15
|
|
15
16
|
belongs_to :context, polymorphic: true, optional: true, primary_key: :canvas_id, foreign_key: :canvas_context_id, foreign_type: :canvas_context_type
|
16
17
|
has_many :context_module_items, primary_key: :canvas_id, foreign_key: :canvas_context_module_id
|
@@ -7,7 +7,8 @@
|
|
7
7
|
|
8
8
|
|
9
9
|
class ContextModuleItem < ApplicationRecord
|
10
|
-
include CanvasSync::
|
10
|
+
include CanvasSync::Record
|
11
|
+
include CanvasSync::Concerns::ApiSyncable
|
11
12
|
|
12
13
|
belongs_to :context_module, primary_key: :canvas_id, foreign_key: :canvas_context_module_id, optional: true
|
13
14
|
belongs_to :content, polymorphic: true, optional: true, primary_key: :canvas_id, foreign_key: :canvas_content_id, foreign_type: :canvas_content_type
|
@@ -7,7 +7,8 @@
|
|
7
7
|
|
8
8
|
|
9
9
|
class Course < ApplicationRecord
|
10
|
-
include CanvasSync::
|
10
|
+
include CanvasSync::Record
|
11
|
+
include CanvasSync::Concerns::ApiSyncable
|
11
12
|
|
12
13
|
validates :canvas_id, uniqueness: true, presence: true
|
13
14
|
belongs_to :term, foreign_key: :canvas_term_id, primary_key: :canvas_id, optional: true
|
@@ -16,7 +17,8 @@ class Course < ApplicationRecord
|
|
16
17
|
has_many :assignments, as: :context, primary_key: :canvas_id, foreign_key: :canvas_context_id, foreign_type: :canvas_context_type
|
17
18
|
has_many :submissions, primary_key: :canvas_id, foreign_key: :canvas_course_id
|
18
19
|
has_many :assignment_groups, primary_key: :canvas_id, foreign_key: :canvas_course_id
|
19
|
-
|
20
|
+
has_many :groups, primary_key: :canvas_id, foreign_key: :canvas_course_id
|
21
|
+
|
20
22
|
api_syncable({
|
21
23
|
sis_id: :sis_course_id,
|
22
24
|
course_code: :course_code,
|
@@ -7,7 +7,8 @@
|
|
7
7
|
|
8
8
|
|
9
9
|
class Enrollment < ApplicationRecord
|
10
|
-
include CanvasSync::
|
10
|
+
include CanvasSync::Record
|
11
|
+
include CanvasSync::Concerns::ApiSyncable
|
11
12
|
|
12
13
|
validates :canvas_id, uniqueness: true, presence: true
|
13
14
|
belongs_to :user, primary_key: :canvas_id, foreign_key: :canvas_user_id, optional: true
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# #
|
2
|
+
# AUTO GENERATED MODEL
|
3
|
+
# This model was auto generated by the CanvasSync Gem.
|
4
|
+
# You can customize it as needed, but make sure you test
|
5
|
+
# any changes you make to the auto generated methods.
|
6
|
+
#
|
7
|
+
|
8
|
+
|
9
|
+
class Group < ApplicationRecord
|
10
|
+
include CanvasSync::Record
|
11
|
+
include CanvasSync::Concerns::ApiSyncable
|
12
|
+
|
13
|
+
validates :canvas_id, uniqueness: true, presence: true
|
14
|
+
belongs_to :course, primary_key: :canvas_id, foreign_key: :canvas_course_id, optional: true
|
15
|
+
belongs_to :account, primary_key: :canvas_id, foreign_key: :canvas_account_id, optional: true
|
16
|
+
has_many :group_memberships, primary_key: :canvas_id, foreign_key: :canvas_group_id
|
17
|
+
|
18
|
+
api_syncable({
|
19
|
+
canvas_id: :id,
|
20
|
+
name: :name,
|
21
|
+
canvas_course_id: :course_id,
|
22
|
+
sis_id: :sis_group_id,
|
23
|
+
workflow_state: ->(r){ 'available' },
|
24
|
+
}, -> (api) { api.group(canvas_id) })
|
25
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# #
|
2
|
+
# AUTO GENERATED MODEL
|
3
|
+
# This model was auto generated by the CanvasSync Gem.
|
4
|
+
# You can customize it as needed, but make sure you test
|
5
|
+
# any changes you make to the auto generated methods.
|
6
|
+
#
|
7
|
+
|
8
|
+
|
9
|
+
class GroupMembership < ApplicationRecord
|
10
|
+
include CanvasSync::Record
|
11
|
+
include CanvasSync::Concerns::ApiSyncable
|
12
|
+
|
13
|
+
validates :canvas_id, uniqueness: true, presence: true
|
14
|
+
belongs_to :group, primary_key: :canvas_id, foreign_key: :canvas_group_id
|
15
|
+
belongs_to :user, primary_key: :canvas_id, foreign_key: :canvas_user_id
|
16
|
+
|
17
|
+
api_syncable({
|
18
|
+
canvas_id: :id,
|
19
|
+
canvas_group_id: :group_id,
|
20
|
+
canvas_user_id: :user_id,
|
21
|
+
workflow_state: :workflow_state,
|
22
|
+
}, -> (api) { api.group_membership(canvas_group_id, canvas_id) })
|
23
|
+
end
|
@@ -7,7 +7,8 @@
|
|
7
7
|
|
8
8
|
|
9
9
|
class Role < ApplicationRecord
|
10
|
-
include CanvasSync::
|
10
|
+
include CanvasSync::Record
|
11
|
+
include CanvasSync::Concerns::ApiSyncable
|
11
12
|
|
12
13
|
validates :canvas_id, uniqueness: true, presence: true
|
13
14
|
has_many :admins, foreign_key: :canvas_role_id, primary_key: :canvas_id
|
@@ -7,7 +7,8 @@
|
|
7
7
|
|
8
8
|
|
9
9
|
class Section < ApplicationRecord
|
10
|
-
include CanvasSync::
|
10
|
+
include CanvasSync::Record
|
11
|
+
include CanvasSync::Concerns::ApiSyncable
|
11
12
|
|
12
13
|
validates :canvas_id, uniqueness: true, presence: true
|
13
14
|
belongs_to :course, primary_key: :canvas_id, foreign_key: :canvas_course_id, optional: true
|
@@ -7,7 +7,8 @@
|
|
7
7
|
|
8
8
|
|
9
9
|
class Submission < ApplicationRecord
|
10
|
-
include CanvasSync::
|
10
|
+
include CanvasSync::Record
|
11
|
+
include CanvasSync::Concerns::ApiSyncable
|
11
12
|
|
12
13
|
validates :canvas_id, uniqueness: true, presence: true
|
13
14
|
belongs_to :assignment, primary_key: :canvas_id, foreign_key: :canvas_assignment_id, optional: true
|
@@ -7,7 +7,8 @@
|
|
7
7
|
|
8
8
|
|
9
9
|
class Term < ApplicationRecord
|
10
|
-
include CanvasSync::
|
10
|
+
include CanvasSync::Record
|
11
|
+
include CanvasSync::Concerns::ApiSyncable
|
11
12
|
|
12
13
|
validates :canvas_id, uniqueness: true, presence: true
|
13
14
|
has_many :courses, foreign_key: :canvas_term_id, primary_key: :canvas_id
|
@@ -7,13 +7,15 @@
|
|
7
7
|
|
8
8
|
|
9
9
|
class User < ApplicationRecord
|
10
|
-
include CanvasSync::
|
10
|
+
include CanvasSync::Record
|
11
|
+
include CanvasSync::Concerns::ApiSyncable
|
11
12
|
|
12
13
|
validates :canvas_id, uniqueness: true, presence: true
|
13
14
|
has_many :enrollments, primary_key: :canvas_id, foreign_key: :canvas_user_id
|
14
15
|
has_many :admins, primary_key: :canvas_id, foreign_key: :canvas_user_id
|
15
16
|
has_many :admin_roles, through: :admins, source: :role
|
16
17
|
has_many :submissions, primary_key: :canvas_id, foreign_key: :canvas_user_id
|
18
|
+
has_many :group_memberships, primary_key: :canvas_id, foreign_key: :canvas_user_id
|
17
19
|
|
18
20
|
api_syncable({
|
19
21
|
sis_id: :sis_user_id,
|
@@ -1,6 +1,17 @@
|
|
1
1
|
require File.expand_path('../boot', __FILE__)
|
2
2
|
|
3
|
-
require 'rails
|
3
|
+
require 'rails'
|
4
|
+
require 'active_record/railtie'
|
5
|
+
# require 'active_storage/engine'
|
6
|
+
require 'action_controller/railtie'
|
7
|
+
require 'action_view/railtie'
|
8
|
+
require 'action_mailer/railtie'
|
9
|
+
require 'active_job/railtie'
|
10
|
+
# require 'action_cable/engine'
|
11
|
+
# require 'action_mailbox/engine'
|
12
|
+
# require 'action_text/engine'
|
13
|
+
require 'rails/test_unit/railtie'
|
14
|
+
# require 'sprockets/railtie'
|
4
15
|
|
5
16
|
Bundler.require(*Rails.groups)
|
6
17
|
require "canvas_sync"
|
@@ -1,25 +1,25 @@
|
|
1
|
-
|
2
|
-
# gem install sqlite3
|
3
|
-
#
|
4
|
-
# Ensure the SQLite 3 gem is defined in your Gemfile
|
5
|
-
# gem 'sqlite3'
|
6
|
-
#
|
1
|
+
|
7
2
|
default: &default
|
8
3
|
adapter: postgresql
|
9
|
-
|
10
|
-
|
4
|
+
encoding: unicode
|
5
|
+
# For details on connection pooling, see Rails configuration guide
|
6
|
+
# http://guides.rubyonrails.org/configuring.html#database-pooling
|
7
|
+
pool: <%= ENV.fetch("DB_POOL_SIZE", nil) || (ENV.fetch("RAILS_MAX_THREADS") { 5 }.to_i + 10) %>
|
8
|
+
username: <%= ENV.fetch("DB_USERNAME", "") %>
|
9
|
+
password: <%= ENV.fetch("DB_PASSWORD", "") %>
|
10
|
+
host: <%= ENV.fetch("DB_ADDRESS", "localhost") %>
|
11
11
|
|
12
12
|
development:
|
13
13
|
<<: *default
|
14
14
|
database: canvas_sync_development
|
15
15
|
|
16
|
-
# Warning: The database defined as "test" will be erased and
|
17
|
-
# re-generated from your development database when you run "rake".
|
18
|
-
# Do not set this db to the same as development or production.
|
19
16
|
test:
|
20
17
|
<<: *default
|
21
18
|
database: canvas_sync_test
|
22
19
|
|
23
20
|
production:
|
24
21
|
<<: *default
|
22
|
+
host: <%= ENV.fetch('DB_ADDRESS', 'localhost') %>
|
25
23
|
database: canvas_sync_production
|
24
|
+
username: <%= ENV.fetch("DB_USERNAME", "canvas_sync_specs_postgres_user") %>
|
25
|
+
password: <%= ENV.fetch("DB_PASSWORD", 'canvas_sync_specs_postgres_password') %>
|
@@ -25,16 +25,16 @@ Rails.application.configure do
|
|
25
25
|
# Debug mode disables concatenation and preprocessing of assets.
|
26
26
|
# This option may cause significant delays in view rendering with a large
|
27
27
|
# number of complex assets.
|
28
|
-
config.assets.debug = true
|
28
|
+
# config.assets.debug = true
|
29
29
|
|
30
30
|
# Asset digests allow you to set far-future HTTP expiration dates on all assets,
|
31
31
|
# yet still be able to expire them through the digest params.
|
32
|
-
config.assets.digest = true
|
32
|
+
# config.assets.digest = true
|
33
33
|
|
34
34
|
# Adds additional error checking when serving assets at runtime.
|
35
35
|
# Checks for improperly declared sprockets dependencies.
|
36
36
|
# Raises helpful error messages.
|
37
|
-
config.assets.raise_runtime_errors = true
|
37
|
+
# config.assets.raise_runtime_errors = true
|
38
38
|
|
39
39
|
# Raises error for missing translations
|
40
40
|
# config.action_view.raise_on_missing_translations = true
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# Be sure to restart your server when you modify this file.
|
2
2
|
|
3
3
|
# Version of your assets, change this if you want to expire all your assets.
|
4
|
-
Rails.application.config.assets.version = '1.0'
|
4
|
+
# Rails.application.config.assets.version = '1.0'
|
5
5
|
|
6
6
|
# Add additional assets to the asset load path
|
7
7
|
# Rails.application.config.assets.paths << Emoji.images_path
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# #
|
2
|
+
# AUTO GENERATED MIGRATION
|
3
|
+
# This migration was auto generated by the CanvasSync Gem.
|
4
|
+
# You can add new columns to this table, but removing or
|
5
|
+
# re-naming ones created here may break Canvas Syncing.
|
6
|
+
#
|
7
|
+
|
8
|
+
|
9
|
+
class CreateGroups < ActiveRecord::Migration[5.1]
|
10
|
+
def change
|
11
|
+
create_table :groups do |t|
|
12
|
+
t.bigint :canvas_id, null: false
|
13
|
+
t.string :sis_id
|
14
|
+
t.bigint :canvas_group_category_id
|
15
|
+
t.string :group_category_sis_id
|
16
|
+
t.bigint :canvas_account_id
|
17
|
+
t.bigint :canvas_course_id
|
18
|
+
t.string :name
|
19
|
+
t.string :workflow_state
|
20
|
+
t.bigint :context_id
|
21
|
+
t.string :context_type
|
22
|
+
t.integer :max_membership
|
23
|
+
|
24
|
+
t.timestamps
|
25
|
+
end
|
26
|
+
|
27
|
+
add_index :groups, :canvas_id, unique: true
|
28
|
+
end
|
29
|
+
end
|