class Qpid::Proton::Delivery
Allow a {Receiver} to indicate the status of a received message to the {Sender}
Public Class Methods
# File lib/core/delivery.rb, line 21 def initialize(*args) super; @message = nil; end
Public Instance Methods
Accept the receiveed message.
# File lib/core/delivery.rb, line 27 def accept() settle ACCEPTED; end
@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
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
@deprecated use {#release} with modification options
# File lib/core/delivery.rb, line 68 def modify() deprecated __method__, "release(modification_options)" release failed=>true end
@return [Receiver] The parent {Receiver} link.
# File lib/core/delivery.rb, line 24 def receiver() link; end
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
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