scimitar 1.11.0 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/controllers/scimitar/active_record_backed_resources_controller.rb +23 -98
- data/app/controllers/scimitar/application_controller.rb +17 -44
- data/app/controllers/scimitar/resource_types_controller.rb +3 -7
- data/app/controllers/scimitar/resources_controller.rb +2 -0
- data/app/controllers/scimitar/schemas_controller.rb +3 -366
- data/app/controllers/scimitar/service_provider_configurations_controller.rb +1 -0
- data/app/models/scimitar/complex_types/address.rb +6 -0
- data/app/models/scimitar/engine_configuration.rb +5 -15
- data/app/models/scimitar/error_response.rb +0 -12
- data/app/models/scimitar/lists/query_parser.rb +13 -113
- data/app/models/scimitar/resource_invalid_error.rb +1 -1
- data/app/models/scimitar/resources/base.rb +9 -53
- data/app/models/scimitar/resources/mixin.rb +59 -646
- data/app/models/scimitar/schema/address.rb +0 -1
- data/app/models/scimitar/schema/attribute.rb +5 -14
- data/app/models/scimitar/schema/base.rb +1 -1
- data/app/models/scimitar/schema/name.rb +2 -2
- data/app/models/scimitar/schema/user.rb +10 -10
- data/app/models/scimitar/schema/vdtp.rb +1 -1
- data/app/models/scimitar/service_provider_configuration.rb +3 -14
- data/config/initializers/scimitar.rb +3 -69
- data/lib/scimitar/engine.rb +12 -57
- data/lib/scimitar/support/hash_with_indifferent_case_insensitive_access.rb +10 -140
- data/lib/scimitar/version.rb +2 -2
- data/lib/scimitar.rb +2 -7
- data/spec/apps/dummy/app/controllers/mock_groups_controller.rb +1 -1
- data/spec/apps/dummy/app/models/mock_group.rb +1 -1
- data/spec/apps/dummy/app/models/mock_user.rb +9 -52
- data/spec/apps/dummy/config/application.rb +1 -0
- data/spec/apps/dummy/config/environments/test.rb +28 -5
- data/spec/apps/dummy/config/initializers/scimitar.rb +10 -90
- data/spec/apps/dummy/config/routes.rb +7 -28
- data/spec/apps/dummy/db/migrate/20210304014602_create_mock_users.rb +1 -11
- data/spec/apps/dummy/db/migrate/20210308044214_create_join_table_mock_groups_mock_users.rb +3 -8
- data/spec/apps/dummy/db/schema.rb +4 -12
- data/spec/controllers/scimitar/application_controller_spec.rb +3 -126
- data/spec/controllers/scimitar/resource_types_controller_spec.rb +4 -8
- data/spec/controllers/scimitar/schemas_controller_spec.rb +48 -344
- data/spec/models/scimitar/complex_types/address_spec.rb +4 -3
- data/spec/models/scimitar/complex_types/email_spec.rb +2 -0
- data/spec/models/scimitar/lists/query_parser_spec.rb +9 -146
- data/spec/models/scimitar/resources/base_spec.rb +71 -217
- data/spec/models/scimitar/resources/base_validation_spec.rb +5 -43
- data/spec/models/scimitar/resources/mixin_spec.rb +129 -1508
- data/spec/models/scimitar/schema/attribute_spec.rb +3 -22
- data/spec/models/scimitar/schema/base_spec.rb +1 -1
- data/spec/models/scimitar/schema/user_spec.rb +2 -12
- data/spec/requests/active_record_backed_resources_controller_spec.rb +66 -1016
- data/spec/requests/application_controller_spec.rb +3 -16
- data/spec/requests/engine_spec.rb +0 -75
- data/spec/spec_helper.rb +1 -9
- data/spec/support/hash_with_indifferent_case_insensitive_access_spec.rb +0 -108
- metadata +26 -37
- data/LICENSE.txt +0 -21
- data/README.md +0 -717
- data/lib/scimitar/support/utilities.rb +0 -111
- data/spec/apps/dummy/app/controllers/custom_create_mock_users_controller.rb +0 -25
- data/spec/apps/dummy/app/controllers/custom_replace_mock_users_controller.rb +0 -25
- data/spec/apps/dummy/app/controllers/custom_save_mock_users_controller.rb +0 -24
- data/spec/apps/dummy/app/controllers/custom_update_mock_users_controller.rb +0 -25
@@ -35,45 +35,14 @@ module Scimitar
|
|
35
35
|
@errors = ActiveModel::Errors.new(self)
|
36
36
|
end
|
37
37
|
|
38
|
-
# Scimitar has at present a general limitation in handling schema IDs,
|
39
|
-
# which just involves stripping them and requiring attributes across all
|
40
|
-
# extension schemas to be overall unique.
|
41
|
-
#
|
42
|
-
# This method takes an options payload for the initializer and strips out
|
43
|
-
# *recognised* schema IDs, so that the resulting attribute data matches
|
44
|
-
# the resource attribute map.
|
45
|
-
#
|
46
|
-
# +attributes+:: Attributes to assign via initializer; typically a POST
|
47
|
-
# payload of attributes that has been run through Rails
|
48
|
-
# strong parameters for safety.
|
49
|
-
#
|
50
|
-
# Returns a new object of the same class as +options+ with recognised
|
51
|
-
# schema IDs removed.
|
52
|
-
#
|
53
38
|
def flatten_extension_attributes(options)
|
54
|
-
flattened
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
options.each do | key, value |
|
60
|
-
path = Scimitar::Support::Utilities::path_str_to_array(
|
61
|
-
self.class.extended_schemas,
|
62
|
-
key
|
63
|
-
)
|
64
|
-
|
65
|
-
if path.first.include?(':') && lower_case_schema_ids.include?(path.first.downcase)
|
66
|
-
path.shift()
|
67
|
-
end
|
68
|
-
|
69
|
-
if path.empty?
|
70
|
-
flattened.merge!(value)
|
71
|
-
else
|
72
|
-
flattened[path.join('.')] = value
|
39
|
+
flattened = options.dup
|
40
|
+
self.class.extended_schemas.each do |extended_schema|
|
41
|
+
if extension_attrs = flattened.delete(extended_schema.id)
|
42
|
+
flattened.merge!(extension_attrs)
|
73
43
|
end
|
74
44
|
end
|
75
|
-
|
76
|
-
return flattened
|
45
|
+
flattened
|
77
46
|
end
|
78
47
|
|
79
48
|
# Can be used to extend an existing resource type's schema. For example:
|
@@ -143,7 +112,7 @@ module Scimitar
|
|
143
112
|
end
|
144
113
|
|
145
114
|
def self.complex_scim_attributes
|
146
|
-
|
115
|
+
schema.scim_attributes.select(&:complexType).group_by(&:name)
|
147
116
|
end
|
148
117
|
|
149
118
|
def complex_type_from_hash(scim_attribute, attr_value)
|
@@ -160,7 +129,7 @@ module Scimitar
|
|
160
129
|
|
161
130
|
if scim_attribute && scim_attribute.complexType
|
162
131
|
if scim_attribute.multiValued
|
163
|
-
self.send("#{attr_name}=", attr_value
|
132
|
+
self.send("#{attr_name}=", attr_value.map {|attr_for_each_item| complex_type_from_hash(scim_attribute, attr_for_each_item)})
|
164
133
|
else
|
165
134
|
self.send("#{attr_name}=", complex_type_from_hash(scim_attribute, attr_value))
|
166
135
|
end
|
@@ -168,28 +137,15 @@ module Scimitar
|
|
168
137
|
end
|
169
138
|
end
|
170
139
|
|
171
|
-
# Renders *in full* as JSON; typically used for write-based operations...
|
172
|
-
#
|
173
|
-
# record = self.storage_class().new
|
174
|
-
# record.from_scim!(scim_hash: scim_resource.as_json())
|
175
|
-
# self.save!(record)
|
176
|
-
#
|
177
|
-
# ...so all fields, even those marked "returned: false", are included.
|
178
|
-
# Use Scimitar::Resources::Mixin::to_scim to obtain a SCIM object with
|
179
|
-
# non-returnable fields omitted, rendering *that* as JSON via #to_json.
|
180
|
-
#
|
181
140
|
def as_json(options = {})
|
182
|
-
self.meta = Meta.new unless self.meta
|
183
|
-
|
184
|
-
|
141
|
+
self.meta = Meta.new unless self.meta
|
142
|
+
meta.resourceType = self.class.resource_type_id
|
185
143
|
original_hash = super(options).except('errors')
|
186
144
|
original_hash.merge!('schemas' => self.class.schemas.map(&:id))
|
187
|
-
|
188
145
|
self.class.extended_schemas.each do |extension_schema|
|
189
146
|
extension_attributes = extension_schema.scim_attributes.map(&:name)
|
190
147
|
original_hash.merge!(extension_schema.id => original_hash.extract!(*extension_attributes))
|
191
148
|
end
|
192
|
-
|
193
149
|
original_hash
|
194
150
|
end
|
195
151
|
|