class JWT::JWK::Set

def ==(other)

def ==(other)
  other.is_a?(JWT::JWK::Set) && keys.sort == other.keys.sort
end

def add(key)

def add(key)
  @keys << JWT::JWK.new(key)
  self
end

def export(options = {})

def export(options = {})
  { keys: @keys.map { |k| k.export(options) } }
end

def initialize(jwks = nil, options = {}) # rubocop:disable Metrics/CyclomaticComplexity

rubocop:disable Metrics/CyclomaticComplexity
def initialize(jwks = nil, options = {}) # rubocop:disable Metrics/CyclomaticComplexity
  jwks ||= {}
  @keys = case jwks
          when JWT::JWK::Set # Simple duplication
            jwks.keys
          when JWT::JWK::KeyBase # Singleton
            [jwks]
          when Hash
            jwks = jwks.transform_keys(&:to_sym)
            [*jwks[:keys]].map { |k| JWT::JWK.new(k, nil, options) }
          when Array
            jwks.map { |k| JWT::JWK.new(k, nil, options) }
          else
            raise ArgumentError, 'Can only create new JWKS from Hash, Array and JWK'
  end
end

def merge(enum)

def merge(enum)
  @keys += JWT::JWK::Set.new(enum.to_a).keys
  self
end

def reject!(&block)

def reject!(&block)
  return @keys.reject! unless block
  self if @keys.reject!(&block)
end

def select!(&block)

def select!(&block)
  return @keys.select! unless block
  self if @keys.select!(&block)
end

def union(enum)

def union(enum)
  dup.merge(enum)
end

def uniq!(&block)

def uniq!(&block)
  self if @keys.uniq!(&block)
end