diff --git a/app/controllers/assignments_controller.rb b/app/controllers/assignments_controller.rb index f917c60547..14c57b561c 100644 --- a/app/controllers/assignments_controller.rb +++ b/app/controllers/assignments_controller.rb @@ -88,7 +88,7 @@ def assistant def new_assignment_params params .require(:assignment) - .permit(:title, :slug, :public_repo, :students_are_repo_admins, :invitations_enabled) + .permit(:title, :slug, :public_repo, :students_are_repo_admins, :invitations_enabled, :use_roster_id) .merge(creator: current_user, organization: @organization, starter_code_repo_id: starter_code_repo_id_param, @@ -130,7 +130,7 @@ def starter_code_repo_id_param def update_assignment_params params .require(:assignment) - .permit(:title, :slug, :public_repo, :students_are_repo_admins, :deadline, :invitations_enabled) + .permit(:title, :slug, :public_repo, :students_are_repo_admins, :deadline, :invitations_enabled, :use_roster_id) .merge(starter_code_repo_id: starter_code_repo_id_param) end diff --git a/app/models/assignment_repo/creator.rb b/app/models/assignment_repo/creator.rb index e54d33d866..896df5247c 100644 --- a/app/models/assignment_repo/creator.rb +++ b/app/models/assignment_repo/creator.rb @@ -197,11 +197,18 @@ def verify_organization_has_private_repos_available! ##################################### # rubocop:disable AbcSize + # rubocop:disable MethodLength def generate_github_repository_name suffix_count = 0 - owner = organization.github_organization.login_no_cache - repository_name = "#{assignment.slug}-#{user.github_user.login_no_cache}" + owner = organization.github_organization.login_no_cache + + entry = RosterEntry.find_by(roster: organization.roster, user: user) + repository_name = if assignment.use_roster_id && entry.present? + "#{assignment.slug}-#{entry.identifier}" + else + "#{assignment.slug}-#{user.github_user.login_no_cache}" + end loop do name = "#{owner}/#{suffixed_repo_name(repository_name, suffix_count)}" @@ -213,6 +220,7 @@ def generate_github_repository_name suffixed_repo_name(repository_name, suffix_count) end # rubocop:enable AbcSize + # rubocop:enable MethodLength def suffixed_repo_name(repository_name, suffix_count) return repository_name if suffix_count.zero? diff --git a/app/views/assignments/_assignment_form_options.html.erb b/app/views/assignments/_assignment_form_options.html.erb index d02fcda468..e41cc27efa 100644 --- a/app/views/assignments/_assignment_form_options.html.erb +++ b/app/views/assignments/_assignment_form_options.html.erb @@ -41,6 +41,12 @@ +
+
+ +
+
+
diff --git a/db/migrate/20181220032936_add_use_roster_id_to_assignments.rb b/db/migrate/20181220032936_add_use_roster_id_to_assignments.rb new file mode 100644 index 0000000000..647d83fd73 --- /dev/null +++ b/db/migrate/20181220032936_add_use_roster_id_to_assignments.rb @@ -0,0 +1,7 @@ +class AddUseRosterIdToAssignments < ActiveRecord::Migration[5.1] + + def change + add_column :assignments, :use_roster_id, :boolean, null: false, default: false + end + +end diff --git a/db/schema.rb b/db/schema.rb index 5cf32ecdc0..b1465a63df 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20181101185917) do +ActiveRecord::Schema.define(version: 20181220032936) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -56,6 +56,7 @@ t.string "slug", null: false t.boolean "students_are_repo_admins", default: false, null: false t.boolean "invitations_enabled", default: true + t.boolean "use_roster_id", default: false, null:false t.index ["deleted_at"], name: "index_assignments_on_deleted_at" t.index ["organization_id"], name: "index_assignments_on_organization_id" t.index ["slug"], name: "index_assignments_on_slug" diff --git a/spec/jobs/assignment_repo/create_github_repository_job_spec.rb b/spec/jobs/assignment_repo/create_github_repository_job_spec.rb index 69f399cf01..08dc6370db 100644 --- a/spec/jobs/assignment_repo/create_github_repository_job_spec.rb +++ b/spec/jobs/assignment_repo/create_github_repository_job_spec.rb @@ -16,7 +16,8 @@ title: "Learn Elm", starter_code_repo_id: 1_062_897, organization: organization, - students_are_repo_admins: true + students_are_repo_admins: true, + use_roster_id: false } create(:assignment, options) diff --git a/spec/models/assignment_repo/creator_spec.rb b/spec/models/assignment_repo/creator_spec.rb index cc750ffdc8..81569a3285 100644 --- a/spec/models/assignment_repo/creator_spec.rb +++ b/spec/models/assignment_repo/creator_spec.rb @@ -14,7 +14,8 @@ starter_code_repo_id: 1_062_897, organization: organization, students_are_repo_admins: true, - public_repo: false + public_repo: false, + use_roster_id: false } create(:assignment, options)