Skip to content

Commit be0444b

Browse files
author
Scott Hagan
committed
ignore default scopes on user model
1 parent a51b496 commit be0444b

File tree

10 files changed

+52
-12
lines changed

10 files changed

+52
-12
lines changed

Gemfile.lock

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
PATH
22
remote: .
33
specs:
4-
scim_rails (0.3.0)
4+
scim_rails (0.3.1)
55
jwt (>= 1.5, < 3.0)
66
rails (~> 5.0)
77

@@ -72,7 +72,7 @@ GEM
7272
concurrent-ruby (~> 1.0)
7373
interception (0.5)
7474
json (2.4.0)
75-
jwt (2.2.1)
75+
jwt (2.2.2)
7676
loofah (2.6.0)
7777
crass (~> 1.0.2)
7878
nokogiri (>= 1.5.9)
@@ -81,11 +81,14 @@ GEM
8181
marcel (0.3.3)
8282
mimemagic (~> 0.3.2)
8383
method_source (1.0.0)
84+
mime-types (3.2.2)
85+
mime-types-data (~> 3.2015)
86+
mime-types-data (3.2021.0225)
8487
mimemagic (0.3.5)
85-
mini_mime (1.0.2)
88+
mini_mime (1.0.3)
8689
mini_portile2 (2.4.0)
8790
minitest (5.14.1)
88-
nio4r (2.5.2)
91+
nio4r (2.5.7)
8992
nokogiri (1.10.10)
9093
mini_portile2 (~> 2.4.0)
9194
pry (0.13.1)
@@ -148,7 +151,7 @@ GEM
148151
sprockets (4.0.2)
149152
concurrent-ruby (~> 1.0)
150153
rack (> 1, < 3)
151-
sprockets-rails (3.2.1)
154+
sprockets-rails (3.2.2)
152155
actionpack (>= 4.0)
153156
activesupport (>= 4.0)
154157
sprockets (>= 3.0.0)
@@ -170,6 +173,9 @@ DEPENDENCIES
170173
byebug
171174
factory_bot_rails
172175
faker
176+
mime-types (~> 3.2.2)
177+
mime-types-data
178+
mimemagic (~> 0.3.0)
173179
pry
174180
pry-rescue
175181
rake (~> 13.0)

app/controllers/scim_rails/scim_users_controller.rb

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,14 @@ def create
4040
else
4141
username_key = ScimRails.config.queryable_user_attributes[:userName]
4242

43-
find_by_username = Hash.new
43+
find_by_params = Hash.new
4444

45-
find_by_username[username_key] = user_params[username_key]
46-
user = @company
47-
.public_send(ScimRails.config.scim_users_scope)
48-
.find_or_create_by(find_by_username)
45+
find_by_params[username_key] = user_params[username_key]
46+
find_by_params[ScimRails.config.basic_auth_model.to_s.underscore] = @company
47+
48+
user = ScimRails.config.scim_users_model
49+
.unscoped # Specific to our use case and should be changed back after we remove the default_scope from our "User" model
50+
.find_or_initialize_by(find_by_params)
4951
user.update!(user_params)
5052
end
5153
update_status(user) unless params[:active].nil?

lib/scim_rails/version.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
module ScimRails
2-
VERSION = '0.3.0'
2+
VERSION = '0.3.1'
33
end

scim_rails.gemspec

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,4 +33,7 @@ Gem::Specification.new do |s|
3333
s.add_development_dependency "sqlite3", "~> 1.3.6"
3434
s.add_development_dependency "simplecov", "< 0.18.0"
3535
s.add_development_dependency "simplecov_json_formatter"
36+
s.add_development_dependency 'mime-types', '~> 3.2.2'
37+
s.add_development_dependency 'mime-types-data'
38+
s.add_development_dependency 'mimemagic', '~> 0.3.0'
3639
end

spec/controllers/scim_rails/scim_users_controller_spec.rb

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -347,6 +347,24 @@
347347
expect(company.users.count).to eq 1
348348
end
349349

350+
it 'returns 201 if the user has a default_scope attribute' do
351+
create(:user, email: "new@example.com", company: company, scoped_attribute: false)
352+
post :create, params: {
353+
name: {
354+
givenName: "Not New",
355+
familyName: "User"
356+
},
357+
emails: [
358+
{
359+
value: "new@example.com"
360+
}
361+
]
362+
}
363+
expect(response.status).to eq 201
364+
expect(User.unscoped.where(company: company).count).to eq 1
365+
expect(User.unscoped.where(company: company).first.first_name).to eq "Not New"
366+
end
367+
350368
it "creates and archives inactive user" do
351369
post :create, params: {
352370
id: 1,

spec/dummy/app/models/user.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ class User < ApplicationRecord
44
has_many :groups_users
55
has_many :groups, through: :groups_users
66

7+
default_scope { where(scoped_attribute: true) }
8+
79
validates \
810
:first_name,
911
:last_name,
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
class AddScopedAttribute < ActiveRecord::Migration[5.2]
2+
def change
3+
add_column :users, :scoped_attribute, :boolean, default: true
4+
end
5+
end

spec/dummy/db/schema.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
#
1111
# It's strongly recommended that you check this file into your version control system.
1212

13-
ActiveRecord::Schema.define(version: 2020_04_08_164220) do
13+
ActiveRecord::Schema.define(version: 2021_03_31_202326) do
1414

1515
create_table "companies", force: :cascade do |t|
1616
t.string "name", null: false
@@ -50,6 +50,7 @@
5050
t.datetime "archived_at"
5151
t.datetime "created_at", null: false
5252
t.datetime "updated_at", null: false
53+
t.boolean "scoped_attribute", default: true
5354
end
5455

5556
end

spec/factories/user.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
sequence(:email) { |n| "#{n}@example.com" }
88

99
test_attribute { Faker::Games::Pokemon.name }
10+
scoped_attribute { true }
1011
alternate_email { Faker::Internet.email }
1112
end
1213
end

spec/spec_helper.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,6 @@
2121
config.use_transactional_fixtures = true
2222
config.infer_base_class_for_anonymous_controllers = false
2323
config.order = "random"
24+
config.filter_run :focus
25+
config.run_all_when_everything_filtered = true
2426
end

0 commit comments

Comments
 (0)