Commit a429c56
Changed files (4)
lib
scim
lib/scim/kit/cli/app.rb
@@ -15,10 +15,8 @@ module Scim
end
class_option :url, desc: 'Base URL of the SCIM server (or SCIM_KIT_URL)'
- class_option :header, type: :array, default: [],
- desc: 'Extra header as "Name: Value" (repeatable)'
- class_option :validate, type: :boolean, default: false,
- desc: 'Validate the response against a JSON Schema'
+ class_option :header, type: :array, default: [], desc: 'Extra header as "Name: Value" (repeatable)'
+ class_option :validate, type: :boolean, default: false, desc: 'Validate the response against a JSON Schema'
desc 'discover', "Discover a server's ServiceProviderConfig, Schemas, and ResourceTypes"
def discover
lib/scim/kit/cli/schema_registry.rb
@@ -15,16 +15,16 @@ module Scim
def self.fetch(key)
@cache ||= {}
- @cache[key] ||= load(FILES.fetch(key))
+ @cache[key] ||= load_schema(FILES.fetch(key))
end
def self.list_response_with_items(resource_schema)
- schema = load('list_response.schema.json')
+ schema = load_schema('list_response.schema.json')
schema['properties']['Resources']['items'] = resource_schema
schema
end
- def self.load(file_name)
+ def self.load_schema(file_name)
JSON.parse(File.read(File.join(DIR, file_name)))
end
end
lib/scim/kit/cli/scim_schema_converter.rb
@@ -12,20 +12,27 @@ module Scim
'decimal' => { 'type' => 'number' },
'integer' => { 'type' => 'integer' },
'dateTime' => { 'type' => 'string', 'format' => 'date-time' }
- }.freeze
+ }.each_value(&:freeze).freeze
def self.convert(schema)
object_schema(schema[:attributes] || [])
end
def self.object_schema(attributes)
- properties, required = attributes.reduce([{}, []]) do |(p, r), a|
- p[a[:name]] = attribute_schema(a)
- r << a[:name] if a[:required]
- [p, r]
- end
- { 'type' => 'object', 'properties' => properties,
- 'required' => required, 'additionalProperties' => false }
+ {
+ 'type' => 'object',
+ 'properties' => properties_for(attributes),
+ 'required' => required_for(attributes),
+ 'additionalProperties' => false
+ }
+ end
+
+ def self.properties_for(attributes)
+ attributes.to_h { |a| [a[:name], attribute_schema(a)] }
+ end
+
+ def self.required_for(attributes)
+ attributes.filter_map { |a| a[:name] if a[:required] }
end
def self.attribute_schema(attribute)
@@ -44,7 +51,7 @@ module Scim
end
def self.with_enum(attribute)
- schema = TYPE_MAP.fetch(attribute[:type]).dup
+ schema = TYPE_MAP.fetch(attribute[:type])
canonical_values = attribute[:canonicalValues]
return schema if canonical_values.nil? || canonical_values.empty?
lib/scim/kit/cli.rb
@@ -1,15 +1,15 @@
# frozen_string_literal: true
+require 'json_schemer'
require 'thor'
+require 'scim/kit/cli/app'
require 'scim/kit/cli/reporting'
+require 'scim/kit/cli/resource_schema_resolver'
require 'scim/kit/cli/resource_type_resolver'
-require 'scim/kit/cli/scim_schema_converter'
-require 'json_schemer'
require 'scim/kit/cli/schema_registry'
+require 'scim/kit/cli/scim_schema_converter'
require 'scim/kit/cli/validator'
-require 'scim/kit/cli/resource_schema_resolver'
-require 'scim/kit/cli/app'
module Scim
module Kit