class Qpid::Proton::Delivery

Allow a {Receiver} to indicate the status of a received message to the {Sender}

Public Class Methods

new(*args) click to toggle source
Calls superclass method
# File lib/core/delivery.rb, line 21
def initialize(*args) super; @message = nil; end

Public Instance Methods

accept() click to toggle source

Accept the receiveed message.

# File lib/core/delivery.rb, line 27
def accept() settle ACCEPTED; end
complete?() click to toggle source

@return true if the incoming message is complete, call {#message} to retrieve it.

# File lib/core/delivery.rb, line 77
def complete?() readable? && !aborted? && !partial?; end
message() click to toggle source

Get the message from the delivery. @return [Message] The message @raise [AbortedError] if the message has been aborted (check with {#aborted?} @raise [UnderflowError] if the message is incomplete (check with {#complete?} @raise [::ArgumentError] if the delivery is not the current delivery on a receiving link.

# File lib/core/delivery.rb, line 84
def message
  unless @message
    raise AbortedError, "message aborted by sender" if aborted?
    raise UnderflowError, "incoming message incomplete" if partial?
    raise ArgumentError, "no incoming message" unless readable?
    @message = Message.new
    @message.decode(link.receive(pending))
    link.advance
  end
  @message
end
modify() click to toggle source

@deprecated use {#release} with modification options

# File lib/core/delivery.rb, line 68
def modify()
  deprecated __method__, "release(modification_options)"
  release failed=>true
end
receiver() click to toggle source

@return [Receiver] The parent {Receiver} link.

# File lib/core/delivery.rb, line 24
def receiver() link; end
reject() click to toggle source

Reject a message, indicating to the sender that is invalid and should never be delivered again to this or any other receiver.

# File lib/core/delivery.rb, line 31
def reject() settle REJECTED; end
release(opts = nil) click to toggle source

Release a message, indicating to the sender that it was not processed but may be delivered again to this or another receiver.

@param opts [Hash] Instructions to the sender to modify re-delivery.

To allow re-delivery with no modifications at all use +release(nil)+

@option opts [Boolean] :failed (true) Instruct the sender to increase

{Message#delivery_count} so future receivers will know there was a
previous failed delivery.

@option opts [Boolean] :undeliverable (false) Instruct the sender that this

message should never be re-delivered to this receiver, although it may be
delivered other receivers.

@option opts [Hash] :annotations Instruct the sender to update the

{Message#annotations} with these +key=>value+ pairs before re-delivery,
replacing existing entries in {Message#annotations} with the same key.
# File lib/core/delivery.rb, line 50
def release(opts = nil)
  opts = { :failed => false } if (opts == false) # deprecated
  failed = !opts || opts.fetch(:failed, true)
  undeliverable = opts && opts[:undeliverable]
  annotations = opts && opts[:annotations]
  annotations = nil if annotations && annotations.empty?
  if failed || undeliverable || annotations
    d = Cproton.pn_delivery_local(@impl)
    Cproton.pn_disposition_set_failed(d, true) if failed
    Cproton.pn_disposition_set_undeliverable(d, true) if undeliverable
    Codec::Data.from_object(Cproton.pn_disposition_annotations(d), annotations) if annotations
    settle(MODIFIED)
  else
    settle(RELEASED)
  end
end