diff --git a/Gemfile.lock b/Gemfile.lock index 8c892c58..778be8c0 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -92,7 +92,7 @@ GEM byebug (3.1.2) columnize (~> 0.8) debugger-linecache (~> 1.2) - cancancan (1.8.4) + cancancan (1.13.1) capybara (2.2.1) mime-types (>= 1.16) nokogiri (>= 1.3.3) @@ -331,7 +331,7 @@ GEM sprockets-rails rails-assets-date.format (1.2.3) rails-assets-holderjs (2.9.1) - rails-assets-jquery (2.2.0) + rails-assets-jquery (2.2.1) rails-assets-jquery-smooth-scroll (1.7.2) rails-assets-jquery (>= 1.4.2) rails-assets-leaflet (0.7.7) @@ -376,7 +376,7 @@ GEM rest-client (1.7.3) mime-types (>= 1.16, < 3.0) netrc (~> 0.7) - rolify (3.4.0) + rolify (5.0.0) rspec (3.0.0) rspec-core (~> 3.0.0) rspec-expectations (~> 3.0.0) @@ -561,6 +561,3 @@ DEPENDENCIES web-console (~> 2.0) webmock whenever - -BUNDLED WITH - 1.11.2 diff --git a/app/controllers/admin/conference_controller.rb b/app/controllers/admin/conference_controller.rb index 4ef6b883..5d15d01b 100644 --- a/app/controllers/admin/conference_controller.rb +++ b/app/controllers/admin/conference_controller.rb @@ -217,8 +217,8 @@ module Admin def get_users(role_name) @role_users = {} # Initialize @role variable, so that view can show the role description - @role = Role.where(name: role_name, resource: @conference) - @role.blank? ? @role_users[role_name] = @role : @role_users[role_name] = @role.first.users + @role = Role.find_by(name: role_name, resource: @conference) || [] + @role.blank? ? @role_users[role_name] = [] : (@role_users[role_name] = (User.with_role @role.name, @role.resource).to_a) @role_users end diff --git a/app/models/role.rb b/app/models/role.rb index 87bbe62f..47d0d00f 100644 --- a/app/models/role.rb +++ b/app/models/role.rb @@ -1,5 +1,5 @@ class Role < ActiveRecord::Base - has_and_belongs_to_many :users + has_and_belongs_to_many :users, join_table: :users_roles belongs_to :resource, polymorphic: true scopify diff --git a/app/models/user.rb b/app/models/user.rb index 567b0e41..70b15723 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -29,7 +29,6 @@ class User < ActiveRecord::Base devise(*devise_modules) - has_and_belongs_to_many :roles has_many :openids attr_accessor :login diff --git a/db/migrate/20160226133808_rename_roles_users_to_users_roles.rb b/db/migrate/20160226133808_rename_roles_users_to_users_roles.rb new file mode 100644 index 00000000..6f8424b8 --- /dev/null +++ b/db/migrate/20160226133808_rename_roles_users_to_users_roles.rb @@ -0,0 +1,5 @@ +class RenameRolesUsersToUsersRoles < ActiveRecord::Migration + def change + rename_table :roles_users, :users_roles + end +end diff --git a/db/schema.rb b/db/schema.rb index 2ff3289c..6f0285a2 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20160201221411) do +ActiveRecord::Schema.define(version: 20160226133808) do create_table "ahoy_events", force: :cascade do |t| t.uuid "visit_id", limit: 16 @@ -355,13 +355,6 @@ ActiveRecord::Schema.define(version: 20160201221411) do add_index "roles", ["name", "resource_type", "resource_id"], name: "index_roles_on_name_and_resource_type_and_resource_id" add_index "roles", ["name"], name: "index_roles_on_name" - create_table "roles_users", id: false, force: :cascade do |t| - t.integer "role_id" - t.integer "user_id" - end - - add_index "roles_users", ["user_id", "role_id"], name: "index_roles_users_on_user_id_and_role_id" - create_table "rooms", force: :cascade do |t| t.string "guid", null: false t.string "name", null: false @@ -498,6 +491,13 @@ ActiveRecord::Schema.define(version: 20160201221411) do add_index "users", ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true add_index "users", ["username"], name: "index_users_on_username", unique: true + create_table "users_roles", id: false, force: :cascade do |t| + t.integer "role_id" + t.integer "user_id" + end + + add_index "users_roles", ["user_id", "role_id"], name: "index_users_roles_on_user_id_and_role_id" + create_table "vchoices", force: :cascade do |t| t.integer "vday_id" t.integer "vposition_id" diff --git a/spec/controllers/admin/conferences_controller_spec.rb b/spec/controllers/admin/conferences_controller_spec.rb index fd9f2282..144c0de3 100644 --- a/spec/controllers/admin/conferences_controller_spec.rb +++ b/spec/controllers/admin/conferences_controller_spec.rb @@ -7,8 +7,8 @@ describe Admin::ConferenceController do let!(:first_user) { create(:user) } let!(:organizer_role) { create(:role, name: 'organizer', resource: conference) } - let(:organizer) { create(:user, role_ids: organizer_role.id) } - let(:organizer2) { create(:user, email: 'organizer2@email.osem', role_ids: organizer_role.id) } + let!(:organizer) { create(:user, role_ids: organizer_role.id) } + let!(:organizer2) { create(:user, email: 'organizer2@email.osem', role_ids: organizer_role.id) } let(:participant) { create(:user) } shared_examples 'access as organizer' do @@ -214,7 +214,7 @@ describe Admin::ConferenceController do end it 'finds the correct role' do - expect(assigns(:role)).to eq([organizer_role]) + expect(assigns(:role)).to eq(organizer_role) end it 'properly assigns role_users hash' do @@ -237,8 +237,7 @@ describe Admin::ConferenceController do it 'sets role variable' do post :roles, id: conference.short_title, user: { roles: 'Organizer' } - role = Role.where(name: 'organizer', resource: conference) - expect(assigns(:role)).to eq(role) + expect(assigns(:role)).to eq(organizer_role) end it 'sets role variable (returns blank for nil role)' do @@ -271,7 +270,7 @@ describe Admin::ConferenceController do end it 'sets role_users variable' do - expect(assigns(:role_users)).to eq('organizer' => organizer_role.users) + expect(assigns(:role_users)).to eq('organizer' => [organizer, organizer2, @new_user]) post :add_user, id: conference.short_title, user: { email: 'new_user@email.osem' }, role: 'cfp' expect(assigns(:role_users)).to eq('cfp' => [@new_user])