module Universign module Service module Transaction AVAILABLE_OPTIONS = { custom_id: :customId, description: :description, handwritten_signature_mode: :handwrittenSignatureMode, certificate_type: :certificateType, language: :language, identification_type: :identificationType, handwritten_signature: :handwrittenSignature, profile: :profile, final_doc_sent: :finalDocSent, final_doc_requester_sent: :finalDocRequesterSent, chaining_mode: :chainingMode } DEFAULT_OPTIONS = { handwrittenSignatureMode: 1, identificationType: 'sms', language: 'fr', certificateType: 'simple' } # Get a transaction from Universign # # @return [Universign::Transaction] def get @client = Universign::Client.new safeguard do result = @client.call('requester.getTransactionInfo', @transaction_id) self.from_data(result) end end def self.included(base) base.extend(ClassMethods) end module ClassMethods # Signs a document # # @param [Array<Universign::Document>] documents Documents to sign # @param [Array<Universign::SignerTransaction>] signers # @param [Hash] options # @option options: [String] :custom_id Custom ID of the document # @option options: [String] :description Description of the signature # @option options: [String] :handwritten_signature_mode Type of signature # @option options: [String] :certificate_type Type of certificate # @option options: [String] :language Document's language # @option options: [String] :identification_type # @option options: [Boolean] :handwritten_signature # @option options: [String] :profile # @option options: [Boolean] :final_doc_sent # @option options: [Boolean] :final_doc_requester_sent # # @raise [ArgumentError] Raised if unknown_key passed in options # # @return [Universign::Transaction] def create(documents:, signers:, options: {}) @client = Universign::Client.new sign_options = DEFAULT_OPTIONS.merge( documents: documents.map(&:params), signers: signers.map(&:params), ) options.each do |key, value| known_key = AVAILABLE_OPTIONS[key] if known_key sign_options[known_key] = value else raise "Unknown Key" end end safeguard do result = @client.call("requester.requestTransaction", sign_options) Universign::Transaction.new(result['id'], result['url']) end end end end end end