code: def subscribe(subscriptions)
        req = build_soap! do |type, builder|
          if(type == :header)
          else
            builder.nbuild.Subscribe {
              builder.nbuild.parent.default_namespace = @default_ns
              subscriptions.each do |sub|
                subtype = sub.keys.first
                if(builder.respond_to?(subtype))
                  builder.send subtype, sub[subtype]
                else
                  raise EwsBadArgumentError, "Bad subscription type. #{subtype}"
                end
              end
            }
          end
        end
        do_soap_request(req, response_class: EwsResponse)
      end
docs: Used to subscribe client applications to either push, pull or stream notifications.
   @see http://msdn.microsoft.com/en-us/library/aa566188(v=EXCHG.140).aspx
   @param [Array<Hash>] subscriptions An array of Hash objects that describe each
     subscription.
     Ex: [ {:pull_subscription_request => {
           :subscribe_to_all_folders => false,
           :folder_ids => [ {:id => 'id', :change_key => 'ck'} ],
           :event_types=> %w{CopiedEvent CreatedEvent},
           :watermark  => 'watermark id',
           :timeout    => intval
         }},
         {:push_subscription_request => {
           :subscribe_to_all_folders => true,
           :event_types=> %w{CopiedEvent CreatedEvent},
           :status_frequency => 15,
           :uRL => 'http://my.endpoint.for.updates/',
         }},
         {:streaming_subscription_request => {
           :subscribe_to_all_folders => false,
           :folder_ids => [ {:id => 'id', :change_key => 'ck'} ],
           :event_types=> %w{NewMailEvent DeletedEvent},
         }},
         ]