1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
|
module OpenIDConnect
class RequestObject
module Claimable
def self.included(klass)
klass.send :attr_optional, :claims
end
def initialize(attributes = {})
super
if claims.present?
_claims_ = {}
claims.each do |key, value|
_claims_[key] = case value
when :optional, :voluntary
{
essential: false
}
when :required, :essential
{
essential: true
}
else
value
end
end
self.claims = _claims_.with_indifferent_access
end
end
def as_json(options = {})
keys = claims.try(:keys)
hash = super
Array(keys).each do |key|
hash[:claims][key] ||= nil
end
hash
end
def required?(claim)
accessible?(claim) && claims[claim].is_a?(Hash) && claims[claim][:essential]
end
alias_method :essential?, :required?
def optional?(claim)
accessible?(claim) && !required?(claim)
end
alias_method :voluntary?, :optional?
def accessible?(claim)
claims.try(:include?, claim)
end
end
end
end
|