scim-kit 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 92ae59a0de47e12347ebde89275f9a5e4b545d3ff38aec73d2a918c637dddb91
4
- data.tar.gz: 8b0abab5faf3a77f318ff3848b5b94500b6387d39de551ef412b40bf1c91c93c
3
+ metadata.gz: c615da7460744208a93f82d9731fcb99fd00dd9f6b9e841d54b96394e0b24d49
4
+ data.tar.gz: ea7cb0fb6aa0b69e781728c5677e9fdf119553ef1b7c2828187d62a56ca500db
5
5
  SHA512:
6
- metadata.gz: 1c332a7ca79a8ec07e1a844c41a53f7f9d7dc08c9e08fdc85b21b85bdc8e80a6bcb2c390db9104792fd7253b90555508bf9df007d5b901eb563b6c7c9eee1398
7
- data.tar.gz: 3519cd8596b17182f4cbe8e3fa01af6eeea69fc4a12531e46b96877200ba477768b508ad470a272b8782816f7c7dce34ca4141ac3643133bdaa4157ac462bd35
6
+ metadata.gz: 3ef6cb2e6c3b791b837c4cb6158bf9e1b80d074acc40a75d4ea4b194b93a0b6101c827b1a9f5376ed98395fdf0bd690c2692f83177d0d1ed0af36da748eb84bd
7
+ data.tar.gz: 67a78548780b91ca3d671fcbbbf52eb99c320b04b51255e202b15a97a5ee19ee83eec3b5b023df4ad269f787dd6ad3e42f1cddda367408f2069638d3ebfbae57
data/lib/scim/kit.rb CHANGED
@@ -3,15 +3,20 @@
3
3
  require 'tilt'
4
4
  require 'tilt/jbuilder'
5
5
 
6
+ require 'scim/kit/dynamic_attributes'
6
7
  require 'scim/kit/templatable'
7
8
  require 'scim/kit/template'
8
9
  require 'scim/kit/version'
9
10
 
10
11
  require 'scim/kit/v2/attribute_type'
12
+ require 'scim/kit/v2/authentication_scheme'
13
+ require 'scim/kit/v2/meta'
11
14
  require 'scim/kit/v2/mutability'
12
15
  require 'scim/kit/v2/resource_type'
13
16
  require 'scim/kit/v2/returned'
14
17
  require 'scim/kit/v2/schema'
18
+ require 'scim/kit/v2/service_provider_configuration'
19
+ require 'scim/kit/v2/supportable'
15
20
  require 'scim/kit/v2/uniqueness'
16
21
 
17
22
  module Scim
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Scim
4
+ module Kit
5
+ # Allows dynamic assignment of attributes.
6
+ module DynamicAttributes
7
+ def method_missing(method, *args)
8
+ return super unless respond_to_missing?(method)
9
+
10
+ @dynamic_attributes[method] = args[0]
11
+ end
12
+
13
+ def respond_to_missing?(method, _include_private = false)
14
+ @dynamic_attributes.key?(method) || super
15
+ end
16
+ end
17
+ end
18
+ end
@@ -8,7 +8,7 @@ module Scim
8
8
  render(self, options)
9
9
  end
10
10
 
11
- def as_json(options = nil)
11
+ def as_json(_options = nil)
12
12
  to_h
13
13
  end
14
14
 
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Scim
4
+ module Kit
5
+ module V2
6
+ # Represents the available Authentication Schemes.
7
+ class AuthenticationScheme
8
+ DEFAULTS = {
9
+ httpbasic: {
10
+ description: 'Authentication scheme using the HTTP Basic Standard',
11
+ documentation_uri: 'http://example.com/help/httpBasic.html',
12
+ name: 'HTTP Basic',
13
+ spec_uri: 'http://www.rfc-editor.org/info/rfc2617'
14
+ },
15
+ oauthbearertoken: {
16
+ description:
17
+ 'Authentication scheme using the OAuth Bearer Token Standard',
18
+ documentation_uri: 'http://example.com/help/oauth.html',
19
+ name: 'OAuth Bearer Token',
20
+ spec_uri: 'http://www.rfc-editor.org/info/rfc6750'
21
+ }
22
+ }.freeze
23
+ include Templatable
24
+ attr_accessor :name
25
+ attr_accessor :description
26
+ attr_accessor :documentation_uri
27
+ attr_accessor :spec_uri
28
+ attr_accessor :type
29
+ attr_accessor :primary
30
+
31
+ def initialize
32
+ yield self if block_given?
33
+ end
34
+
35
+ def self.build_for(type, primary: nil)
36
+ defaults = DEFAULTS[type.to_sym] || {}
37
+ new do |x|
38
+ x.type = type
39
+ x.primary = primary
40
+ x.description = defaults[:description]
41
+ x.documentation_uri = defaults[:documentation_uri]
42
+ x.name = defaults[:name]
43
+ x.spec_uri = defaults[:spec_uri]
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Scim
4
+ module Kit
5
+ module V2
6
+ # Represents a meta section
7
+ class Meta
8
+ include Templatable
9
+
10
+ attr_accessor :created, :last_modified, :version
11
+ attr_reader :location
12
+ attr_reader :resource_type
13
+
14
+ def initialize(resource_type, location)
15
+ @resource_type = resource_type
16
+ @location = location
17
+ @version = @created = @last_modified = Time.now
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -12,10 +12,11 @@ module Scim
12
12
  attr_accessor :description
13
13
  attr_accessor :endpoint
14
14
  attr_accessor :schema
15
- attr_reader :location
15
+ attr_reader :meta
16
16
 
17
17
  def initialize(location:)
18
- @location = location
18
+ @meta = Meta.new('ResourceType', location)
19
+ @meta.version = @meta.created = @meta.last_modified = nil
19
20
  end
20
21
 
21
22
  def self.build(*args)
@@ -6,10 +6,13 @@ module Scim
6
6
  # Represents a SCIM Schema
7
7
  class Schema
8
8
  include Templatable
9
+
10
+ CORE = 'urn:ietf:params:scim:schemas:core:2.0'
9
11
  ERROR = 'urn:ietf:params:scim:api:messages:2.0:Error'
10
- GROUP = 'urn:ietf:params:scim:schemas:core:2.0:Group'
11
- RESOURCE_TYPE = 'urn:ietf:params:scim:schemas:core:2.0:ResourceType'
12
- USER = 'urn:ietf:params:scim:schemas:core:2.0:User'
12
+ GROUP = "#{CORE}:Group"
13
+ RESOURCE_TYPE = "#{CORE}:ResourceType"
14
+ SERVICE_PROVIDER_CONFIGURATION = "#{CORE}:ServiceProviderConfig"
15
+ USER = "#{CORE}:User"
13
16
 
14
17
  attr_reader :id, :name, :location, :attributes
15
18
  attr_accessor :description
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Scim
4
+ module Kit
5
+ module V2
6
+ # Represents a scim Service Provider Configuration
7
+ class ServiceProviderConfiguration
8
+ include Templatable
9
+ attr_reader :location
10
+ attr_accessor :documentation_uri
11
+ attr_reader :authentication_schemes
12
+ attr_reader :etag, :sort, :change_password, :patch
13
+ attr_reader :bulk, :filter, :meta
14
+
15
+ def initialize(location:)
16
+ @meta = Meta.new('ServiceProviderConfig', location)
17
+ @authentication_schemes = []
18
+ @etag = Supportable.new
19
+ @sort = Supportable.new
20
+ @change_password = Supportable.new
21
+ @patch = Supportable.new
22
+ @bulk = Supportable.new(:max_operations, :max_payload_size)
23
+ @filter = Supportable.new(:max_results)
24
+ end
25
+
26
+ def add_authentication(type, primary: nil)
27
+ scheme = AuthenticationScheme.build_for(type, primary: primary)
28
+ yield scheme if block_given?
29
+ @authentication_schemes << scheme
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Scim
4
+ module Kit
5
+ module V2
6
+ # Represents a Feature
7
+ class Supportable
8
+ include Templatable
9
+ include DynamicAttributes
10
+
11
+ attr_accessor :supported
12
+
13
+ def initialize(*dynamic_attributes)
14
+ @dynamic_attributes = Hash[
15
+ dynamic_attributes.map { |x| ["#{x}=".to_sym, nil] }
16
+ ]
17
+ @supported = false
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ json.key_format! camelize: :lower
4
+ json.name name
5
+ json.description description
6
+ json.spec_uri spec_uri
7
+ json.documentation_uri documentation_uri
8
+ json.type type
9
+ json.primary primary if primary
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ json.key_format! camelize: :lower
4
+ json.location location
5
+ json.resource_type resource_type
6
+ json.created created.iso8601 if created
7
+ json.last_modified last_modified.iso8601 if last_modified
8
+ json.version version.to_i if version
File without changes
@@ -2,8 +2,7 @@
2
2
 
3
3
  json.key_format! camelize: :lower
4
4
  json.meta do
5
- json.resource_type 'ResourceType'
6
- json.location location
5
+ render meta, json: json
7
6
  end
8
7
  json.schemas [Scim::Kit::V2::Schema::RESOURCE_TYPE]
9
8
  json.id id
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ json.key_format! camelize: :lower
4
+ json.schemas [Scim::Kit::V2::Schema::SERVICE_PROVIDER_CONFIGURATION]
5
+ json.documentation_uri documentation_uri
6
+ json.patch do
7
+ render patch, json: json
8
+ end
9
+ json.bulk do
10
+ render bulk, json: json
11
+ end
12
+ json.filter do
13
+ render filter, json: json
14
+ end
15
+ json.change_password do
16
+ render change_password, json: json
17
+ end
18
+ json.sort do
19
+ render sort, json: json
20
+ end
21
+ json.etag do
22
+ render etag, json: json
23
+ end
24
+ json.authentication_schemes authentication_schemes do |authentication_scheme|
25
+ render authentication_scheme, json: json
26
+ end
27
+ json.meta do
28
+ render meta, json: json
29
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ json.key_format! camelize: :lower
4
+ json.supported supported
5
+ @dynamic_attributes.each do |key, value|
6
+ json.set! key.to_s.delete('='), value
7
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Scim
4
4
  module Kit
5
- VERSION = '0.1.0'
5
+ VERSION = '0.2.0'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: scim-kit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - mo
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-12-26 00:00:00.000000000 Z
11
+ date: 2019-01-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: tilt
@@ -174,16 +174,26 @@ files:
174
174
  - exe/scim-kit
175
175
  - lib/scim-kit.rb
176
176
  - lib/scim/kit.rb
177
+ - lib/scim/kit/dynamic_attributes.rb
177
178
  - lib/scim/kit/templatable.rb
178
179
  - lib/scim/kit/template.rb
179
180
  - lib/scim/kit/v2/attribute_type.rb
181
+ - lib/scim/kit/v2/authentication_scheme.rb
182
+ - lib/scim/kit/v2/meta.rb
180
183
  - lib/scim/kit/v2/mutability.rb
181
184
  - lib/scim/kit/v2/resource_type.rb
182
185
  - lib/scim/kit/v2/returned.rb
183
186
  - lib/scim/kit/v2/schema.rb
187
+ - lib/scim/kit/v2/service_provider_configuration.rb
188
+ - lib/scim/kit/v2/supportable.rb
184
189
  - lib/scim/kit/v2/templates/attribute_type.json.jbuilder
190
+ - lib/scim/kit/v2/templates/authentication_scheme.json.jbuilder
191
+ - lib/scim/kit/v2/templates/meta.json.jbuilder
192
+ - lib/scim/kit/v2/templates/nil_class.json.jbuilder
185
193
  - lib/scim/kit/v2/templates/resource_type.json.jbuilder
186
194
  - lib/scim/kit/v2/templates/schema.json.jbuilder
195
+ - lib/scim/kit/v2/templates/service_provider_configuration.json.jbuilder
196
+ - lib/scim/kit/v2/templates/supportable.json.jbuilder
187
197
  - lib/scim/kit/v2/uniqueness.rb
188
198
  - lib/scim/kit/version.rb
189
199
  - scim-kit.gemspec
@@ -206,7 +216,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
206
216
  - !ruby/object:Gem::Version
207
217
  version: '0'
208
218
  requirements: []
209
- rubygems_version: 3.0.1
219
+ rubygems_version: 3.0.2
210
220
  signing_key:
211
221
  specification_version: 4
212
222
  summary: A SCIM library.