scimitar 1.6.0 → 1.7.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.
Files changed (29) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.txt +21 -0
  3. data/README.md +671 -0
  4. data/app/controllers/scimitar/active_record_backed_resources_controller.rb +22 -4
  5. data/app/controllers/scimitar/application_controller.rb +7 -2
  6. data/app/controllers/scimitar/schemas_controller.rb +5 -0
  7. data/app/models/scimitar/errors.rb +1 -1
  8. data/app/models/scimitar/resources/base.rb +12 -2
  9. data/app/models/scimitar/schema/attribute.rb +15 -6
  10. data/app/models/scimitar/schema/base.rb +4 -2
  11. data/config/initializers/scimitar.rb +8 -3
  12. data/lib/scimitar/version.rb +2 -2
  13. data/spec/apps/dummy/app/controllers/custom_save_mock_users_controller.rb +24 -0
  14. data/spec/apps/dummy/app/models/mock_user.rb +4 -0
  15. data/spec/apps/dummy/config/initializers/scimitar.rb +8 -0
  16. data/spec/apps/dummy/config/routes.rb +5 -0
  17. data/spec/apps/dummy/db/migrate/20210304014602_create_mock_users.rb +1 -0
  18. data/spec/apps/dummy/db/schema.rb +3 -2
  19. data/spec/controllers/scimitar/application_controller_spec.rb +2 -2
  20. data/spec/controllers/scimitar/resource_types_controller_spec.rb +2 -2
  21. data/spec/controllers/scimitar/schemas_controller_spec.rb +8 -0
  22. data/spec/models/scimitar/lists/query_parser_spec.rb +1 -1
  23. data/spec/models/scimitar/resources/base_spec.rb +38 -4
  24. data/spec/models/scimitar/resources/mixin_spec.rb +4 -1
  25. data/spec/models/scimitar/resources/user_spec.rb +4 -4
  26. data/spec/models/scimitar/schema/attribute_spec.rb +22 -0
  27. data/spec/requests/active_record_backed_resources_controller_spec.rb +127 -37
  28. data/spec/requests/application_controller_spec.rb +1 -2
  29. metadata +7 -3
@@ -5,8 +5,6 @@ RSpec.describe Scimitar::ActiveRecordBackedResourcesController do
5
5
  before :each do
6
6
  allow_any_instance_of(Scimitar::ApplicationController).to receive(:authenticated?).and_return(true)
7
7
 
8
- lmt = Time.parse("2023-01-09 14:25:00 +1300")
9
-
10
8
  # If a sort order is unspecified, the controller defaults to ID ascending.
11
9
  # With UUID based IDs, testing life is made easier by ensuring that the
12
10
  # creation order matches an ascending UUID sort order (which is what would
@@ -28,13 +26,17 @@ RSpec.describe Scimitar::ActiveRecordBackedResourcesController do
28
26
 
29
27
  context '#index' do
30
28
  context 'with no items' do
31
- it 'returns empty list' do
29
+ before :each do
32
30
  MockUser.delete_all
31
+ end
33
32
 
33
+ it 'returns empty list' do
34
34
  expect_any_instance_of(MockUsersController).to receive(:index).once.and_call_original
35
35
  get '/Users', params: { format: :scim }
36
36
 
37
- expect(response.status).to eql(200)
37
+ expect(response.status ).to eql(200)
38
+ expect(response.headers['Content-Type']).to eql('application/scim+json; charset=utf-8')
39
+
38
40
  result = JSON.parse(response.body)
39
41
 
40
42
  expect(result['totalResults']).to eql(0)
@@ -48,7 +50,9 @@ RSpec.describe Scimitar::ActiveRecordBackedResourcesController do
48
50
  it 'returns all items' do
49
51
  get '/Users', params: { format: :scim }
50
52
 
51
- expect(response.status).to eql(200)
53
+ expect(response.status ).to eql(200)
54
+ expect(response.headers['Content-Type']).to eql('application/scim+json; charset=utf-8')
55
+
52
56
  result = JSON.parse(response.body)
53
57
 
54
58
  expect(result['totalResults']).to eql(3)
@@ -66,7 +70,9 @@ RSpec.describe Scimitar::ActiveRecordBackedResourcesController do
66
70
  it 'returns all items' do
67
71
  get '/Groups', params: { format: :scim }
68
72
 
69
- expect(response.status).to eql(200)
73
+ expect(response.status ).to eql(200)
74
+ expect(response.headers['Content-Type']).to eql('application/scim+json; charset=utf-8')
75
+
70
76
  result = JSON.parse(response.body)
71
77
 
72
78
  expect(result['totalResults']).to eql(3)
@@ -86,7 +92,9 @@ RSpec.describe Scimitar::ActiveRecordBackedResourcesController do
86
92
  filter: 'name.givenName eq "FOO" and name.familyName pr and emails ne "home_1@test.com"'
87
93
  }
88
94
 
89
- expect(response.status).to eql(200)
95
+ expect(response.status ).to eql(200)
96
+ expect(response.headers['Content-Type']).to eql('application/scim+json; charset=utf-8')
97
+
90
98
  result = JSON.parse(response.body)
91
99
 
92
100
  expect(result['totalResults']).to eql(1)
@@ -105,7 +113,9 @@ RSpec.describe Scimitar::ActiveRecordBackedResourcesController do
105
113
  filter: 'name.GIVENNAME eq "Foo" and name.Familyname pr and emails ne "home_1@test.com"'
106
114
  }
107
115
 
108
- expect(response.status).to eql(200)
116
+ expect(response.status ).to eql(200)
117
+ expect(response.headers['Content-Type']).to eql('application/scim+json; charset=utf-8')
118
+
109
119
  result = JSON.parse(response.body)
110
120
 
111
121
  expect(result['totalResults']).to eql(1)
@@ -128,7 +138,9 @@ RSpec.describe Scimitar::ActiveRecordBackedResourcesController do
128
138
  filter: "id eq \"#{@u3.primary_key}\""
129
139
  }
130
140
 
131
- expect(response.status).to eql(200)
141
+ expect(response.status ).to eql(200)
142
+ expect(response.headers['Content-Type']).to eql('application/scim+json; charset=utf-8')
143
+
132
144
  result = JSON.parse(response.body)
133
145
 
134
146
  expect(result['totalResults']).to eql(1)
@@ -147,7 +159,9 @@ RSpec.describe Scimitar::ActiveRecordBackedResourcesController do
147
159
  filter: "externalID eq \"#{@u2.scim_uid}\""
148
160
  }
149
161
 
150
- expect(response.status).to eql(200)
162
+ expect(response.status ).to eql(200)
163
+ expect(response.headers['Content-Type']).to eql('application/scim+json; charset=utf-8')
164
+
151
165
  result = JSON.parse(response.body)
152
166
 
153
167
  expect(result['totalResults']).to eql(1)
@@ -166,7 +180,9 @@ RSpec.describe Scimitar::ActiveRecordBackedResourcesController do
166
180
  filter: "Meta.LastModified eq \"#{@u3.updated_at}\""
167
181
  }
168
182
 
169
- expect(response.status).to eql(200)
183
+ expect(response.status ).to eql(200)
184
+ expect(response.headers['Content-Type']).to eql('application/scim+json; charset=utf-8')
185
+
170
186
  result = JSON.parse(response.body)
171
187
 
172
188
  expect(result['totalResults']).to eql(1)
@@ -186,7 +202,9 @@ RSpec.describe Scimitar::ActiveRecordBackedResourcesController do
186
202
  count: 2
187
203
  }
188
204
 
189
- expect(response.status).to eql(200)
205
+ expect(response.status ).to eql(200)
206
+ expect(response.headers['Content-Type']).to eql('application/scim+json; charset=utf-8')
207
+
190
208
  result = JSON.parse(response.body)
191
209
 
192
210
  expect(result['totalResults']).to eql(3)
@@ -205,7 +223,9 @@ RSpec.describe Scimitar::ActiveRecordBackedResourcesController do
205
223
  startIndex: 2
206
224
  }
207
225
 
208
- expect(response.status).to eql(200)
226
+ expect(response.status ).to eql(200)
227
+ expect(response.headers['Content-Type']).to eql('application/scim+json; charset=utf-8')
228
+
209
229
  result = JSON.parse(response.body)
210
230
 
211
231
  expect(result['totalResults']).to eql(3)
@@ -226,8 +246,11 @@ RSpec.describe Scimitar::ActiveRecordBackedResourcesController do
226
246
  filter: 'name.givenName'
227
247
  }
228
248
 
229
- expect(response.status).to eql(400)
249
+ expect(response.status ).to eql(400)
250
+ expect(response.headers['Content-Type']).to eql('application/scim+json; charset=utf-8')
251
+
230
252
  result = JSON.parse(response.body)
253
+
231
254
  expect(result['scimType']).to eql('invalidFilter')
232
255
  end
233
256
  end # "context 'with bad calls' do"
@@ -241,7 +264,9 @@ RSpec.describe Scimitar::ActiveRecordBackedResourcesController do
241
264
  expect_any_instance_of(MockUsersController).to receive(:show).once.and_call_original
242
265
  get "/Users/#{@u2.primary_key}", params: { format: :scim }
243
266
 
244
- expect(response.status).to eql(200)
267
+ expect(response.status ).to eql(200)
268
+ expect(response.headers['Content-Type']).to eql('application/scim+json; charset=utf-8')
269
+
245
270
  result = JSON.parse(response.body)
246
271
 
247
272
  expect(result['id']).to eql(@u2.primary_key.to_s)
@@ -256,7 +281,9 @@ RSpec.describe Scimitar::ActiveRecordBackedResourcesController do
256
281
  expect_any_instance_of(MockGroupsController).to receive(:show).once.and_call_original
257
282
  get "/Groups/#{@g2.id}", params: { format: :scim }
258
283
 
259
- expect(response.status).to eql(200)
284
+ expect(response.status ).to eql(200)
285
+ expect(response.headers['Content-Type']).to eql('application/scim+json; charset=utf-8')
286
+
260
287
  result = JSON.parse(response.body)
261
288
 
262
289
  expect(result['id']).to eql(@g2.id.to_s) # Note - ID was converted String; not Integer
@@ -268,8 +295,11 @@ RSpec.describe Scimitar::ActiveRecordBackedResourcesController do
268
295
  it 'renders 404' do
269
296
  get '/Users/xyz', params: { format: :scim }
270
297
 
271
- expect(response.status).to eql(404)
298
+ expect(response.status ).to eql(404)
299
+ expect(response.headers['Content-Type']).to eql('application/scim+json; charset=utf-8')
300
+
272
301
  result = JSON.parse(response.body)
302
+
273
303
  expect(result['status']).to eql('404')
274
304
  end
275
305
  end # "context '#show' do"
@@ -282,7 +312,7 @@ RSpec.describe Scimitar::ActiveRecordBackedResourcesController do
282
312
  it 'with minimal parameters' do
283
313
  mock_before = MockUser.all.to_a
284
314
 
285
- attributes = { userName: '4' } # Minimum required by schema
315
+ attributes = { userName: '4' } # Minimum required by schema
286
316
  attributes = spec_helper_hupcase(attributes) if force_upper_case
287
317
 
288
318
  expect_any_instance_of(MockUsersController).to receive(:create).once.and_call_original
@@ -293,7 +323,9 @@ RSpec.describe Scimitar::ActiveRecordBackedResourcesController do
293
323
  mock_after = MockUser.all.to_a
294
324
  new_mock = (mock_after - mock_before).first
295
325
 
296
- expect(response.status).to eql(201)
326
+ expect(response.status ).to eql(201)
327
+ expect(response.headers['Content-Type']).to eql('application/scim+json; charset=utf-8')
328
+
297
329
  result = JSON.parse(response.body)
298
330
 
299
331
  expect(result['id']).to eql(new_mock.primary_key.to_s)
@@ -334,10 +366,12 @@ RSpec.describe Scimitar::ActiveRecordBackedResourcesController do
334
366
  mock_after = MockUser.all.to_a
335
367
  new_mock = (mock_after - mock_before).first
336
368
 
337
- expect(response.status).to eql(201)
369
+ expect(response.status ).to eql(201)
370
+ expect(response.headers['Content-Type']).to eql('application/scim+json; charset=utf-8')
371
+
338
372
  result = JSON.parse(response.body)
339
373
 
340
- expect(result['id']).to eql(new_mock.primary_key.to_s)
374
+ expect(result['id']).to eql(new_mock.id.to_s)
341
375
  expect(result['meta']['resourceType']).to eql('User')
342
376
  expect(new_mock.username).to eql('4')
343
377
  expect(new_mock.first_name).to eql('Given')
@@ -365,8 +399,11 @@ RSpec.describe Scimitar::ActiveRecordBackedResourcesController do
365
399
  }
366
400
  }.to_not change { MockUser.count }
367
401
 
368
- expect(response.status).to eql(409)
402
+ expect(response.status ).to eql(409)
403
+ expect(response.headers['Content-Type']).to eql('application/scim+json; charset=utf-8')
404
+
369
405
  result = JSON.parse(response.body)
406
+
370
407
  expect(result['scimType']).to eql('uniqueness')
371
408
  expect(result['detail']).to include('already been taken')
372
409
  end
@@ -379,8 +416,11 @@ RSpec.describe Scimitar::ActiveRecordBackedResourcesController do
379
416
  }
380
417
  }.to_not change { MockUser.count }
381
418
 
382
- expect(response.status).to eql(400)
419
+ expect(response.status ).to eql(400)
420
+ expect(response.headers['Content-Type']).to eql('application/scim+json; charset=utf-8')
421
+
383
422
  result = JSON.parse(response.body)
423
+
384
424
  expect(result['scimType']).to eql('invalidValue')
385
425
  expect(result['detail']).to include('is required')
386
426
  end
@@ -393,12 +433,32 @@ RSpec.describe Scimitar::ActiveRecordBackedResourcesController do
393
433
  }
394
434
  }.to_not change { MockUser.count }
395
435
 
396
- expect(response.status).to eql(400)
436
+ expect(response.status ).to eql(400)
437
+ expect(response.headers['Content-Type']).to eql('application/scim+json; charset=utf-8')
438
+
397
439
  result = JSON.parse(response.body)
398
440
 
399
441
  expect(result['scimType']).to eql('invalidValue')
400
442
  expect(result['detail']).to include('is reserved')
401
443
  end
444
+
445
+ it 'invokes a block if given one' do
446
+ mock_before = MockUser.all.to_a
447
+ attributes = { userName: '5' } # Minimum required by schema
448
+
449
+ expect_any_instance_of(CustomSaveMockUsersController).to receive(:create).once.and_call_original
450
+ expect {
451
+ post "/CustomSaveUsers", params: attributes.merge(format: :scim)
452
+ }.to change { MockUser.count }.by(1)
453
+
454
+ mock_after = MockUser.all.to_a
455
+ new_mock = (mock_after - mock_before).first
456
+
457
+ expect(response.status ).to eql(201)
458
+ expect(response.headers['Content-Type']).to eql('application/scim+json; charset=utf-8')
459
+
460
+ expect(new_mock.username).to eql(CustomSaveMockUsersController::CUSTOM_SAVE_BLOCK_USERNAME_INDICATOR)
461
+ end
402
462
  end # "context '#create' do"
403
463
 
404
464
  # ===========================================================================
@@ -414,7 +474,9 @@ RSpec.describe Scimitar::ActiveRecordBackedResourcesController do
414
474
  put "/Users/#{@u2.primary_key}", params: attributes.merge(format: :scim)
415
475
  }.to_not change { MockUser.count }
416
476
 
417
- expect(response.status).to eql(200)
477
+ expect(response.status ).to eql(200)
478
+ expect(response.headers['Content-Type']).to eql('application/scim+json; charset=utf-8')
479
+
418
480
  result = JSON.parse(response.body)
419
481
 
420
482
  expect(result['id']).to eql(@u2.primary_key.to_s)
@@ -445,8 +507,11 @@ RSpec.describe Scimitar::ActiveRecordBackedResourcesController do
445
507
  }
446
508
  }.to_not change { MockUser.count }
447
509
 
448
- expect(response.status).to eql(400)
510
+ expect(response.status ).to eql(400)
511
+ expect(response.headers['Content-Type']).to eql('application/scim+json; charset=utf-8')
512
+
449
513
  result = JSON.parse(response.body)
514
+
450
515
  expect(result['scimType']).to eql('invalidValue')
451
516
  expect(result['detail']).to include('is required')
452
517
 
@@ -466,7 +531,9 @@ RSpec.describe Scimitar::ActiveRecordBackedResourcesController do
466
531
  }
467
532
  }.to_not change { MockUser.count }
468
533
 
469
- expect(response.status).to eql(400)
534
+ expect(response.status ).to eql(400)
535
+ expect(response.headers['Content-Type']).to eql('application/scim+json; charset=utf-8')
536
+
470
537
  result = JSON.parse(response.body)
471
538
 
472
539
  expect(result['scimType']).to eql('invalidValue')
@@ -488,8 +555,11 @@ RSpec.describe Scimitar::ActiveRecordBackedResourcesController do
488
555
  }
489
556
  }.to_not change { MockUser.count }
490
557
 
491
- expect(response.status).to eql(404)
558
+ expect(response.status ).to eql(404)
559
+ expect(response.headers['Content-Type']).to eql('application/scim+json; charset=utf-8')
560
+
492
561
  result = JSON.parse(response.body)
562
+
493
563
  expect(result['status']).to eql('404')
494
564
  end
495
565
  end # "context '#replace' do"
@@ -521,7 +591,9 @@ RSpec.describe Scimitar::ActiveRecordBackedResourcesController do
521
591
  patch "/Users/#{@u2.primary_key}", params: payload.merge(format: :scim)
522
592
  }.to_not change { MockUser.count }
523
593
 
524
- expect(response.status).to eql(200)
594
+ expect(response.status ).to eql(200)
595
+ expect(response.headers['Content-Type']).to eql('application/scim+json; charset=utf-8')
596
+
525
597
  result = JSON.parse(response.body)
526
598
 
527
599
  expect(result['id']).to eql(@u2.primary_key.to_s)
@@ -558,7 +630,9 @@ RSpec.describe Scimitar::ActiveRecordBackedResourcesController do
558
630
  patch "/Users/#{@u2.primary_key}", params: payload.merge(format: :scim)
559
631
  }.to_not change { MockUser.count }
560
632
 
561
- expect(response.status).to eql(200)
633
+ expect(response.status ).to eql(200)
634
+ expect(response.headers['Content-Type']).to eql('application/scim+json; charset=utf-8')
635
+
562
636
  result = JSON.parse(response.body)
563
637
 
564
638
  expect(result['id']).to eql(@u2.primary_key.to_s)
@@ -590,7 +664,9 @@ RSpec.describe Scimitar::ActiveRecordBackedResourcesController do
590
664
  patch "/Users/#{@u2.primary_key}", params: payload.merge(format: :scim)
591
665
  }.to_not change { MockUser.count }
592
666
 
593
- expect(response.status).to eql(200)
667
+ expect(response.status ).to eql(200)
668
+ expect(response.headers['Content-Type']).to eql('application/scim+json; charset=utf-8')
669
+
594
670
  result = JSON.parse(response.body)
595
671
 
596
672
  expect(result['id']).to eql(@u2.primary_key.to_s)
@@ -622,7 +698,9 @@ RSpec.describe Scimitar::ActiveRecordBackedResourcesController do
622
698
  patch "/Users/#{@u2.primary_key}", params: payload.merge(format: :scim)
623
699
  }.to_not change { MockUser.count }
624
700
 
625
- expect(response.status).to eql(200)
701
+ expect(response.status ).to eql(200)
702
+ expect(response.headers['Content-Type']).to eql('application/scim+json; charset=utf-8')
703
+
626
704
  result = JSON.parse(response.body)
627
705
 
628
706
  expect(result['id']).to eql(@u2.primary_key.to_s)
@@ -661,7 +739,9 @@ RSpec.describe Scimitar::ActiveRecordBackedResourcesController do
661
739
  }
662
740
  }.to_not change { MockUser.count }
663
741
 
664
- expect(response.status).to eql(400)
742
+ expect(response.status ).to eql(400)
743
+ expect(response.headers['Content-Type']).to eql('application/scim+json; charset=utf-8')
744
+
665
745
  result = JSON.parse(response.body)
666
746
 
667
747
  expect(result['scimType']).to eql('invalidValue')
@@ -689,8 +769,11 @@ RSpec.describe Scimitar::ActiveRecordBackedResourcesController do
689
769
  }
690
770
  }.to_not change { MockUser.count }
691
771
 
692
- expect(response.status).to eql(404)
772
+ expect(response.status ).to eql(404)
773
+ expect(response.headers['Content-Type']).to eql('application/scim+json; charset=utf-8')
774
+
693
775
  result = JSON.parse(response.body)
776
+
694
777
  expect(result['status']).to eql('404')
695
778
  end
696
779
 
@@ -727,7 +810,9 @@ RSpec.describe Scimitar::ActiveRecordBackedResourcesController do
727
810
 
728
811
  get "/Groups/#{@g1.id}", params: { format: :scim }
729
812
 
730
- expect(response.status).to eql(200)
813
+ expect(response.status ).to eql(200)
814
+ expect(response.headers['Content-Type']).to eql('application/scim+json; charset=utf-8')
815
+
731
816
  result = JSON.parse(response.body)
732
817
 
733
818
  expect(result['members']).to be_empty
@@ -754,7 +839,9 @@ RSpec.describe Scimitar::ActiveRecordBackedResourcesController do
754
839
 
755
840
  get "/Groups/#{@g1.id}", params: { format: :scim }
756
841
 
757
- expect(response.status).to eql(200)
842
+ expect(response.status ).to eql(200)
843
+ expect(response.headers['Content-Type']).to eql('application/scim+json; charset=utf-8')
844
+
758
845
  result = JSON.parse(response.body)
759
846
 
760
847
  expect(result['members'].map { |m| m['value'] }.sort()).to eql(expected_remaining_user_ids)
@@ -865,8 +952,11 @@ RSpec.describe Scimitar::ActiveRecordBackedResourcesController do
865
952
  delete '/Users/xyz', params: { format: :scim }
866
953
  }.to_not change { MockUser.count }
867
954
 
868
- expect(response.status).to eql(404)
955
+ expect(response.status ).to eql(404)
956
+ expect(response.headers['Content-Type']).to eql('application/scim+json; charset=utf-8')
957
+
869
958
  result = JSON.parse(response.body)
959
+
870
960
  expect(result['status']).to eql('404')
871
961
  end
872
962
  end # "context '#destroy' do"
@@ -18,7 +18,7 @@ RSpec.describe Scimitar::ApplicationController do
18
18
  parsed_body = JSON.parse(response.body)
19
19
  expect(parsed_body['request']['is_scim' ]).to eql(true)
20
20
  expect(parsed_body['request']['format' ]).to eql('application/scim+json')
21
- expect(parsed_body['request']['content_type']).to eql('application/scim+json')
21
+ expect(parsed_body['request']['content_type']).to eql('application/scim+json') # Filled in by ApplicationController#require_scim
22
22
  end
23
23
 
24
24
  it 'renders 400 if given bad JSON' do
@@ -26,7 +26,6 @@ RSpec.describe Scimitar::ApplicationController do
26
26
 
27
27
  expect(response).to have_http_status(:bad_request)
28
28
  expect(JSON.parse(response.body)['detail']).to start_with('Invalid JSON - ')
29
- expect(JSON.parse(response.body)['detail']).to include("'not-json-12345'")
30
29
  end
31
30
 
32
31
  it 'translates Content-Type to Rails request format' do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: scimitar
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.0
4
+ version: 1.7.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - RIPA Global
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2023-09-25 00:00:00.000000000 Z
12
+ date: 2023-11-15 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -130,6 +130,8 @@ executables: []
130
130
  extensions: []
131
131
  extra_rdoc_files: []
132
132
  files:
133
+ - LICENSE.txt
134
+ - README.md
133
135
  - Rakefile
134
136
  - app/controllers/scimitar/active_record_backed_resources_controller.rb
135
137
  - app/controllers/scimitar/application_controller.rb
@@ -196,6 +198,7 @@ files:
196
198
  - lib/scimitar/version.rb
197
199
  - spec/apps/dummy/app/controllers/custom_destroy_mock_users_controller.rb
198
200
  - spec/apps/dummy/app/controllers/custom_request_verifiers_controller.rb
201
+ - spec/apps/dummy/app/controllers/custom_save_mock_users_controller.rb
199
202
  - spec/apps/dummy/app/controllers/mock_groups_controller.rb
200
203
  - spec/apps/dummy/app/controllers/mock_users_controller.rb
201
204
  - spec/apps/dummy/app/models/mock_group.rb
@@ -260,13 +263,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
260
263
  - !ruby/object:Gem::Version
261
264
  version: '0'
262
265
  requirements: []
263
- rubygems_version: 3.4.4
266
+ rubygems_version: 3.4.10
264
267
  signing_key:
265
268
  specification_version: 4
266
269
  summary: SCIM v2 for Rails
267
270
  test_files:
268
271
  - spec/apps/dummy/app/controllers/custom_destroy_mock_users_controller.rb
269
272
  - spec/apps/dummy/app/controllers/custom_request_verifiers_controller.rb
273
+ - spec/apps/dummy/app/controllers/custom_save_mock_users_controller.rb
270
274
  - spec/apps/dummy/app/controllers/mock_groups_controller.rb
271
275
  - spec/apps/dummy/app/controllers/mock_users_controller.rb
272
276
  - spec/apps/dummy/app/models/mock_group.rb