lib/saml/elements/signature.rb
require 'saml/elements/signature/inclusive_namespaces'
require 'saml/elements/signature/transform'
require 'saml/elements/signature/transforms'
require 'saml/elements/signature/digest_method'
require 'saml/elements/signature/reference'
require 'saml/elements/signature/signature_method'
require 'saml/elements/signature/canonicalization_method'
require 'saml/elements/signature/signed_info'
require 'saml/elements/key_info'

module Saml
  module Elements
    class Signature
      include Saml::Base

      tag "Signature"
      register_namespace 'ds', Saml::XML_DSIG_NAMESPACE
      namespace 'ds'

      has_one :signed_info, SignedInfo
      element :signature_value, String, tag: "SignatureValue", namespace: 'ds', state_when_nil: true
      has_one :key_info, KeyInfo

      def initialize(*args)
        super(*args)
        options      = args.extract_options!
        @signed_info ||= SignedInfo.new(uri: options.delete(:uri), digest_value: options.delete(:digest_value))
      end

      def key_name
        @key_info.try(:key_name)
      end
    end
  end
end
