scim-kit 0.2.9 → 0.2.10

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: 79f02299047002221e07cbb5b8329134fa92d510c1851bd06fd1653b55a9d72e
4
- data.tar.gz: b4f80a7b6480db73b6227da7bfa1b2e06fe274d8536df9e0c48db40a1e34ff5e
3
+ metadata.gz: 33385c673e7d22f17ef8d63edc67fe1bbd6929804f911c9975a5b182bb7de303
4
+ data.tar.gz: 397e0416ac4feb3c286eed89556b2ddcea84978eaf6ffb31cd475ae4ca8f90b6
5
5
  SHA512:
6
- metadata.gz: b7539e5af3e80ccd8ec44118cfdb66ede3740cd5544c91ff7085454e9c841e326a616390bddbd0c69a37867e931d7ebfb0e2f9560f8e07dcdc56c0c51a430b2c
7
- data.tar.gz: 6a442adc9bdcc3c558441727a6f4648d3d1c235420860e36fcb2cad94938353eae27540ce55ac1dd7c5187ab181decfefa4954cbfbe5297cbde39351106fe2bc
6
+ metadata.gz: 94870076efae7bb2854afa211cc3670ae4a27f73a1cf330b3a6ef65bc8ae885bc68cb2258d73eb1d79d3638f9aaec75697486dbfd4ba4733515e192422e2ed2d
7
+ data.tar.gz: 3fc8ccfb002af55083f41490486cf79b7d8d443e1005f6252592b11cf23166e8ccdec491e37d807048aedca63411ddfab0abcbc634bbd76be29023a4837ff521
@@ -7,9 +7,9 @@ module Scim
7
7
  module Attributable
8
8
  attr_reader :dynamic_attributes
9
9
 
10
- def define_attributes_for(types)
10
+ def define_attributes_for(resource, types)
11
11
  @dynamic_attributes = {}.with_indifferent_access
12
- types.each { |x| attribute(x) }
12
+ types.each { |x| attribute(x, resource) }
13
13
  end
14
14
 
15
15
  private
@@ -42,8 +42,11 @@ module Scim
42
42
  end
43
43
  end
44
44
 
45
- def attribute(type)
46
- dynamic_attributes[type.name] = Attribute.new(type: type)
45
+ def attribute(type, resource)
46
+ dynamic_attributes[type.name] = Attribute.new(
47
+ type: type,
48
+ resource: resource
49
+ )
47
50
  extend(create_module_for(type))
48
51
  end
49
52
  end
@@ -9,16 +9,18 @@ module Scim
9
9
  include Attributable
10
10
  include Templatable
11
11
  attr_reader :type
12
+ attr_reader :_resource
12
13
  attr_reader :_value
13
14
 
14
15
  validate :presence_of_value, if: proc { |x| x.type.required }
15
16
  validate :inclusion_of_value, if: proc { |x| x.type.canonical_values }
16
17
  validate :validate_type
17
18
 
18
- def initialize(type:, value: nil)
19
+ def initialize(resource:, type:, value: nil)
19
20
  @type = type
20
- @_value = value
21
- define_attributes_for(type.attributes)
21
+ @_value = value || type.multi_valued ? [] : nil
22
+ @_resource = resource
23
+ define_attributes_for(resource, type.attributes)
22
24
  end
23
25
 
24
26
  def _assign(new_value, coerce: true)
@@ -29,6 +31,14 @@ module Scim
29
31
  _assign(new_value, coerce: true)
30
32
  end
31
33
 
34
+ def renderable?
35
+ return false if read_only? && _resource.mode?(:client)
36
+ return false if write_only? &&
37
+ (_resource.mode?(:server) || _value.blank?)
38
+
39
+ true
40
+ end
41
+
32
42
  private
33
43
 
34
44
  def presence_of_value
@@ -48,6 +58,14 @@ module Scim
48
58
 
49
59
  errors.add(type.name, I18n.t('errors.messages.invalid'))
50
60
  end
61
+
62
+ def read_only?
63
+ type.mutability == Mutability::READ_ONLY
64
+ end
65
+
66
+ def write_only?
67
+ type.mutability == Mutability::WRITE_ONLY
68
+ end
51
69
  end
52
70
  end
53
71
  end
@@ -63,6 +63,7 @@ module Scim
63
63
  end
64
64
 
65
65
  def coerce(value)
66
+ return value if value.nil?
66
67
  return value if complex?
67
68
 
68
69
  if multi_valued
@@ -10,10 +10,13 @@ module Scim
10
10
  IMMUTABLE = 'immutable'
11
11
  WRITE_ONLY = 'writeOnly'
12
12
  VALID = {
13
+ immutable: IMMUTABLE,
13
14
  read_only: READ_ONLY,
14
15
  read_write: READ_WRITE,
15
- immutable: IMMUTABLE,
16
- write_only: WRITE_ONLY
16
+ readonly: READ_ONLY,
17
+ readwrite: READ_WRITE,
18
+ write_only: WRITE_ONLY,
19
+ writeonly: WRITE_ONLY
17
20
  }.freeze
18
21
 
19
22
  def self.find(value)
@@ -21,7 +21,17 @@ module Scim
21
21
  @meta.disable_timestamps
22
22
  @schemas = schemas
23
23
  schemas.each do |schema|
24
- define_attributes_for(schema.attributes)
24
+ define_attributes_for(self, schema.attributes)
25
+ end
26
+ yield self if block_given?
27
+ end
28
+
29
+ def mode?(type)
30
+ case type.to_sym
31
+ when :server
32
+ meta&.location
33
+ else
34
+ meta&.location.nil?
25
35
  end
26
36
  end
27
37
 
@@ -7,6 +7,6 @@ if type.complex? && !type.multi_valued
7
7
  render attribute, json: json
8
8
  end
9
9
  end
10
- else
10
+ elsif renderable?
11
11
  json.set! type.name, _value
12
12
  end
@@ -1,23 +1,25 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  json.key_format! camelize: :lower
4
- if meta.location
4
+ if mode?(:server)
5
5
  json.meta do
6
6
  render meta, json: json
7
7
  end
8
8
  end
9
9
  json.schemas schemas.map(&:id)
10
- json.id id if id
11
- json.external_id external_id if external_id
10
+ json.id id if mode?(:server)
11
+ json.external_id external_id if mode?(:client) && external_id
12
12
  schemas.each do |schema|
13
13
  if schema.core?
14
14
  schema.attributes.each do |type|
15
- render dynamic_attributes[type.name], json: json
15
+ attribute = dynamic_attributes[type.name]
16
+ render attribute, json: json
16
17
  end
17
18
  else
18
19
  json.set! schema.id do
19
20
  schema.attributes.each do |type|
20
- render dynamic_attributes[type.name], json: json
21
+ attribute = dynamic_attributes[type.name]
22
+ render attribute, json: json
21
23
  end
22
24
  end
23
25
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Scim
4
4
  module Kit
5
- VERSION = '0.2.9'
5
+ VERSION = '0.2.10'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: scim-kit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.9
4
+ version: 0.2.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - mo