scimitar 1.8.2 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/scimitar/active_record_backed_resources_controller.rb +20 -94
  3. data/app/controllers/scimitar/application_controller.rb +13 -41
  4. data/app/controllers/scimitar/schemas_controller.rb +0 -5
  5. data/app/models/scimitar/complex_types/address.rb +6 -0
  6. data/app/models/scimitar/engine_configuration.rb +5 -13
  7. data/app/models/scimitar/error_response.rb +0 -12
  8. data/app/models/scimitar/lists/query_parser.rb +10 -25
  9. data/app/models/scimitar/resource_invalid_error.rb +1 -1
  10. data/app/models/scimitar/resources/base.rb +4 -17
  11. data/app/models/scimitar/resources/mixin.rb +42 -539
  12. data/app/models/scimitar/schema/address.rb +0 -1
  13. data/app/models/scimitar/schema/attribute.rb +5 -14
  14. data/app/models/scimitar/schema/base.rb +1 -1
  15. data/app/models/scimitar/schema/vdtp.rb +1 -1
  16. data/app/models/scimitar/service_provider_configuration.rb +3 -14
  17. data/config/initializers/scimitar.rb +3 -28
  18. data/lib/scimitar/support/hash_with_indifferent_case_insensitive_access.rb +10 -140
  19. data/lib/scimitar/version.rb +2 -2
  20. data/lib/scimitar.rb +2 -7
  21. data/spec/apps/dummy/app/controllers/mock_groups_controller.rb +1 -1
  22. data/spec/apps/dummy/app/models/mock_group.rb +1 -1
  23. data/spec/apps/dummy/app/models/mock_user.rb +8 -36
  24. data/spec/apps/dummy/config/application.rb +1 -0
  25. data/spec/apps/dummy/config/environments/test.rb +28 -5
  26. data/spec/apps/dummy/config/initializers/scimitar.rb +10 -61
  27. data/spec/apps/dummy/config/routes.rb +7 -28
  28. data/spec/apps/dummy/db/migrate/20210304014602_create_mock_users.rb +1 -10
  29. data/spec/apps/dummy/db/migrate/20210308044214_create_join_table_mock_groups_mock_users.rb +3 -8
  30. data/spec/apps/dummy/db/schema.rb +4 -11
  31. data/spec/controllers/scimitar/application_controller_spec.rb +3 -126
  32. data/spec/controllers/scimitar/resource_types_controller_spec.rb +2 -2
  33. data/spec/controllers/scimitar/schemas_controller_spec.rb +2 -10
  34. data/spec/models/scimitar/complex_types/address_spec.rb +4 -3
  35. data/spec/models/scimitar/complex_types/email_spec.rb +2 -0
  36. data/spec/models/scimitar/lists/query_parser_spec.rb +9 -76
  37. data/spec/models/scimitar/resources/base_spec.rb +70 -216
  38. data/spec/models/scimitar/resources/base_validation_spec.rb +2 -27
  39. data/spec/models/scimitar/resources/mixin_spec.rb +129 -1447
  40. data/spec/models/scimitar/schema/attribute_spec.rb +3 -22
  41. data/spec/models/scimitar/schema/base_spec.rb +1 -1
  42. data/spec/models/scimitar/schema/user_spec.rb +0 -10
  43. data/spec/requests/active_record_backed_resources_controller_spec.rb +68 -787
  44. data/spec/requests/application_controller_spec.rb +3 -16
  45. data/spec/spec_helper.rb +0 -8
  46. data/spec/support/hash_with_indifferent_case_insensitive_access_spec.rb +0 -108
  47. metadata +14 -25
  48. data/LICENSE.txt +0 -21
  49. data/README.md +0 -710
  50. data/lib/scimitar/support/utilities.rb +0 -51
  51. data/spec/apps/dummy/app/controllers/custom_create_mock_users_controller.rb +0 -25
  52. data/spec/apps/dummy/app/controllers/custom_replace_mock_users_controller.rb +0 -25
  53. data/spec/apps/dummy/app/controllers/custom_save_mock_users_controller.rb +0 -24
  54. data/spec/apps/dummy/app/controllers/custom_update_mock_users_controller.rb +0 -25
@@ -11,14 +11,11 @@ RSpec.describe Scimitar::ApplicationController do
11
11
  end
12
12
 
13
13
  context 'format handling' do
14
- it 'renders "OK" if the request does not provide any Content-Type value' do
14
+ it 'renders "not acceptable" if the request does not use SCIM type' do
15
15
  get '/CustomRequestVerifiers', params: { format: :html }
16
16
 
17
- expect(response).to have_http_status(:ok)
18
- parsed_body = JSON.parse(response.body)
19
- expect(parsed_body['request']['is_scim' ]).to eql(true)
20
- expect(parsed_body['request']['format' ]).to eql('application/scim+json')
21
- expect(parsed_body['request']['content_type']).to eql('application/scim+json') # Filled in by ApplicationController#require_scim
17
+ expect(response).to have_http_status(:not_acceptable)
18
+ expect(JSON.parse(response.body)['detail']).to eql('Only application/scim+json type is accepted.')
22
19
  end
23
20
 
24
21
  it 'renders 400 if given bad JSON' do
@@ -38,16 +35,6 @@ RSpec.describe Scimitar::ApplicationController do
38
35
  expect(parsed_body['request']['content_type']).to eql('application/scim+json')
39
36
  end
40
37
 
41
- it 'translates Content-Type with charset to Rails request format' do
42
- get '/CustomRequestVerifiers', headers: { 'CONTENT_TYPE' => 'application/scim+json; charset=utf-8' }
43
-
44
- expect(response).to have_http_status(:ok)
45
- parsed_body = JSON.parse(response.body)
46
- expect(parsed_body['request']['is_scim' ]).to eql(true)
47
- expect(parsed_body['request']['format' ]).to eql('application/scim+json')
48
- expect(parsed_body['request']['content_type']).to eql('application/scim+json; charset=utf-8')
49
- end
50
-
51
38
  it 'translates Rails request format to header' do
52
39
  get '/CustomRequestVerifiers', params: { format: :scim }
53
40
 
data/spec/spec_helper.rb CHANGED
@@ -30,7 +30,6 @@ RSpec.configure do | config |
30
30
  config.disable_monkey_patching!
31
31
  config.infer_spec_type_from_file_location!
32
32
  config.filter_rails_from_backtrace!
33
- config.raise_errors_for_deprecations!
34
33
 
35
34
  config.color = true
36
35
  config.tty = true
@@ -39,13 +38,6 @@ RSpec.configure do | config |
39
38
  config.use_transactional_fixtures = true
40
39
 
41
40
  Kernel.srand config.seed
42
-
43
- config.around :each do | example |
44
- original_engine_configuration = Scimitar.instance_variable_get('@engine_configuration')
45
- example.run()
46
- ensure
47
- Scimitar.instance_variable_set('@engine_configuration', original_engine_configuration)
48
- end
49
41
  end
50
42
 
51
43
  # ============================================================================
@@ -37,114 +37,6 @@ RSpec.describe Scimitar::Support::HashWithIndifferentCaseInsensitiveAccess do
37
37
  expect(subject()).to_not have_key('bar')
38
38
  end
39
39
  end # "context 'where keys set as symbols' do"
40
-
41
- context 'access and merging' do
42
- before :each do
43
- @original_subject = subject().to_h().dup()
44
- end
45
-
46
- it 'returns keys as Strings' do
47
- subject()[:foo] = 1
48
- subject()[:BAR] = 2
49
-
50
- expect(subject().keys).to match_array(@original_subject.keys + ['foo', 'BAR'])
51
- end
52
-
53
- it 'retains original case of keys' do
54
- subject()[:foo ] = 1
55
- subject()['FoO'] = 40 # (first-time-set case preservation test in passing)
56
- subject()[:BAR ] = 2
57
- subject()['Baz'] = 3
58
-
59
- expectation = @original_subject.merge({
60
- 'foo' => 40,
61
- 'BAR' => 2,
62
- 'Baz' => 3
63
- })
64
-
65
- expect(subject()).to eql(expectation)
66
- end
67
-
68
- it '#merge does not mutate the receiver and retains case of first-set keys' do
69
- subject()[:foo] = 1
70
- subject()[:BAR] = 2
71
-
72
- pre_merge_subject = subject().dup()
73
-
74
- result = subject().merge({:FOO => { 'onE' => 40 }, :Baz => 3})
75
- expectation = @original_subject.merge({
76
- 'foo' => { 'onE' => 40 },
77
- 'BAR' => 2,
78
- 'Baz' => 3
79
- })
80
-
81
- expect(subject()).to eql(pre_merge_subject)
82
- expect(result).to eql(expectation)
83
- end
84
-
85
- it '#merge! mutates the receiver retains case of first-set keys' do
86
- subject()[:foo] = 1
87
- subject()[:BAR] = 2
88
-
89
- subject().merge!({:FOO => { 'onE' => 40 }, :Baz => 3})
90
-
91
- expectation = @original_subject.merge({
92
- 'foo' => { 'onE' => 40 },
93
- 'BAR' => 2,
94
- 'Baz' => 3
95
- })
96
-
97
- expect(subject()).to eql(expectation)
98
- end
99
-
100
- it '#deep_merge does not mutate the receiver and retains nested key cases' do
101
- subject()[:foo] = { :one => 10 }
102
- subject()[:BAR] = 2
103
-
104
- pre_merge_subject = subject().dup()
105
-
106
- result = subject().deep_merge({:FOO => { 'ONE' => 40, :TWO => 20 }, :Baz => 3})
107
- expectation = @original_subject.merge({
108
- 'foo' => { 'one' => 40, 'TWO' => 20 },
109
- 'BAR' => 2,
110
- 'Baz' => 3
111
- })
112
-
113
- expect(subject()).to eql(pre_merge_subject)
114
- expect(result).to eql(expectation)
115
- end
116
-
117
- it '#deep_merge! mutates the receiver and retains nested key cases' do
118
- subject()[:foo] = { :one => 10 }
119
- subject()[:BAR] = 2
120
-
121
- subject().deep_merge!({:FOO => { 'ONE' => 40, :TWO => 20 }, :Baz => 3})
122
-
123
- expectation = @original_subject.merge({
124
- 'foo' => { 'one' => 40, 'TWO' => 20 },
125
- 'BAR' => 2,
126
- 'Baz' => 3
127
- })
128
-
129
- expect(subject()).to eql(expectation)
130
- end
131
-
132
- it 'retains indifferent behaviour after duplication' do
133
- subject()[:foo] = { 'onE' => 40 }
134
- subject()[:BAR] = 2
135
-
136
- duplicate = subject().dup()
137
- duplicate.merge!({ 'FOO' => true, 'baz' => 3 })
138
-
139
- expectation = @original_subject.merge({
140
- 'foo' => true,
141
- 'BAR' => 2,
142
- 'baz' => 3
143
- })
144
-
145
- expect(duplicate.to_h).to eql(expectation.to_h)
146
- end
147
- end # "context 'access and merging' do"
148
40
  end # "shared_examples 'an indifferent access, case insensitive Hash' do"
149
41
 
150
42
  context 'when created directly' 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.8.2
4
+ version: 2.0.0
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: 2024-03-27 00:00:00.000000000 Z
12
+ date: 2022-03-04 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -17,70 +17,70 @@ dependencies:
17
17
  requirements:
18
18
  - - "~>"
19
19
  - !ruby/object:Gem::Version
20
- version: '6.0'
20
+ version: '7.0'
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - "~>"
26
26
  - !ruby/object:Gem::Version
27
- version: '6.0'
27
+ version: '7.0'
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: rake
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
32
  - - "~>"
33
33
  - !ruby/object:Gem::Version
34
- version: '13.1'
34
+ version: '13.0'
35
35
  type: :development
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
39
  - - "~>"
40
40
  - !ruby/object:Gem::Version
41
- version: '13.1'
41
+ version: '13.0'
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: pg
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
46
  - - "~>"
47
47
  - !ruby/object:Gem::Version
48
- version: '1.5'
48
+ version: '1.2'
49
49
  type: :development
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
53
  - - "~>"
54
54
  - !ruby/object:Gem::Version
55
- version: '1.5'
55
+ version: '1.2'
56
56
  - !ruby/object:Gem::Dependency
57
57
  name: simplecov-rcov
58
58
  requirement: !ruby/object:Gem::Requirement
59
59
  requirements:
60
60
  - - "~>"
61
61
  - !ruby/object:Gem::Version
62
- version: '0.3'
62
+ version: '0.2'
63
63
  type: :development
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
66
66
  requirements:
67
67
  - - "~>"
68
68
  - !ruby/object:Gem::Version
69
- version: '0.3'
69
+ version: '0.2'
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: rdoc
72
72
  requirement: !ruby/object:Gem::Requirement
73
73
  requirements:
74
74
  - - "~>"
75
75
  - !ruby/object:Gem::Version
76
- version: '6.6'
76
+ version: '6.4'
77
77
  type: :development
78
78
  prerelease: false
79
79
  version_requirements: !ruby/object:Gem::Requirement
80
80
  requirements:
81
81
  - - "~>"
82
82
  - !ruby/object:Gem::Version
83
- version: '6.6'
83
+ version: '6.4'
84
84
  - !ruby/object:Gem::Dependency
85
85
  name: rspec-rails
86
86
  requirement: !ruby/object:Gem::Requirement
@@ -130,8 +130,6 @@ executables: []
130
130
  extensions: []
131
131
  extra_rdoc_files: []
132
132
  files:
133
- - LICENSE.txt
134
- - README.md
135
133
  - Rakefile
136
134
  - app/controllers/scimitar/active_record_backed_resources_controller.rb
137
135
  - app/controllers/scimitar/application_controller.rb
@@ -195,14 +193,9 @@ files:
195
193
  - lib/scimitar.rb
196
194
  - lib/scimitar/engine.rb
197
195
  - lib/scimitar/support/hash_with_indifferent_case_insensitive_access.rb
198
- - lib/scimitar/support/utilities.rb
199
196
  - lib/scimitar/version.rb
200
- - spec/apps/dummy/app/controllers/custom_create_mock_users_controller.rb
201
197
  - spec/apps/dummy/app/controllers/custom_destroy_mock_users_controller.rb
202
- - spec/apps/dummy/app/controllers/custom_replace_mock_users_controller.rb
203
198
  - spec/apps/dummy/app/controllers/custom_request_verifiers_controller.rb
204
- - spec/apps/dummy/app/controllers/custom_save_mock_users_controller.rb
205
- - spec/apps/dummy/app/controllers/custom_update_mock_users_controller.rb
206
199
  - spec/apps/dummy/app/controllers/mock_groups_controller.rb
207
200
  - spec/apps/dummy/app/controllers/mock_users_controller.rb
208
201
  - spec/apps/dummy/app/models/mock_group.rb
@@ -251,7 +244,7 @@ metadata:
251
244
  homepage_uri: https://www.ripaglobal.com/
252
245
  source_code_uri: https://github.com/RIPAGlobal/scimitar/
253
246
  bug_tracker_uri: https://github.com/RIPAGlobal/scimitar/issues/
254
- changelog_uri: https://github.com/RIPAGlobal/scimitar/blob/v1/CHANGELOG.md
247
+ changelog_uri: https://github.com/RIPAGlobal/scimitar/blob/master/CHANGELOG.md
255
248
  post_install_message:
256
249
  rdoc_options: []
257
250
  require_paths:
@@ -267,17 +260,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
267
260
  - !ruby/object:Gem::Version
268
261
  version: '0'
269
262
  requirements: []
270
- rubygems_version: 3.5.4
263
+ rubygems_version: 3.3.3
271
264
  signing_key:
272
265
  specification_version: 4
273
266
  summary: SCIM v2 for Rails
274
267
  test_files:
275
- - spec/apps/dummy/app/controllers/custom_create_mock_users_controller.rb
276
268
  - spec/apps/dummy/app/controllers/custom_destroy_mock_users_controller.rb
277
- - spec/apps/dummy/app/controllers/custom_replace_mock_users_controller.rb
278
269
  - spec/apps/dummy/app/controllers/custom_request_verifiers_controller.rb
279
- - spec/apps/dummy/app/controllers/custom_save_mock_users_controller.rb
280
- - spec/apps/dummy/app/controllers/custom_update_mock_users_controller.rb
281
270
  - spec/apps/dummy/app/controllers/mock_groups_controller.rb
282
271
  - spec/apps/dummy/app/controllers/mock_users_controller.rb
283
272
  - spec/apps/dummy/app/models/mock_group.rb
data/LICENSE.txt DELETED
@@ -1,21 +0,0 @@
1
- MIT License
2
-
3
- Copyright (c) 2021 RIPA Global
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.