Skip to content
This repository was archived by the owner on Apr 27, 2023. It is now read-only.

Commit 0806afa

Browse files
committed
Support ordering_key
1 parent 38f639d commit 0806afa

4 files changed

Lines changed: 35 additions & 0 deletions

File tree

ext/bindings/message.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ Message::Message(const std::string& data, Rice::Object arg = Rice::Object()) {
3232
}
3333
} else if (key == "partition_key") {
3434
mb.setPartitionKey(Rice::Object(it->value).to_s().str());
35+
} else if (key == "ordering_key") {
36+
mb.setOrderingKey(Rice::Object(it->value).to_s().str());
3537
} else {
3638
throw Rice::Exception(rb_eArgError, "Unknown keyword argument: %s", key.c_str());
3739
}
@@ -59,6 +61,10 @@ Rice::String Message::getPartitionKey() {
5961
return to_ruby(_msg.getPartitionKey());
6062
}
6163

64+
Rice::String Message::getOrderingKey() {
65+
return to_ruby(_msg.getOrderingKey());
66+
}
67+
6268
}
6369

6470
using namespace Rice;
@@ -77,5 +83,6 @@ void bind_message(Module& module) {
7783
.define_method("message_id", &pulsar_rb::Message::getMessageId)
7884
.define_method("properties", &pulsar_rb::Message::getProperties)
7985
.define_method("partition_key", &pulsar_rb::Message::getPartitionKey)
86+
.define_method("ordering_key", &pulsar_rb::Message::getOrderingKey)
8087
;
8188
}

ext/bindings/message.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ namespace pulsar_rb {
2828
MessageId::ptr getMessageId();
2929
Rice::Hash getProperties();
3030
Rice::String getPartitionKey();
31+
Rice::String getOrderingKey();
3132

3233
typedef Rice::Data_Object<Message> ptr;
3334
};

spec/pulsar/message_spec.rb

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,28 @@
8282
end
8383
end
8484

85+
describe "ordering_key" do
86+
it "defaults to blank string" do
87+
m = described_class.new("payload")
88+
expect(m.ordering_key).to eq("")
89+
end
90+
91+
it "accepts ordering key" do
92+
m = described_class.new("payload", ordering_key: "foo")
93+
expect(m.ordering_key).to eq("foo")
94+
end
95+
96+
it "accepts nil ordering key" do
97+
m = described_class.new("payload", ordering_key: nil)
98+
expect(m.ordering_key).to eq("")
99+
end
100+
101+
it "stringifies ordering key" do
102+
m = described_class.new("payload", ordering_key: ["o"])
103+
expect(m.ordering_key).to eq(%(["o"]))
104+
end
105+
end
106+
85107
describe "errors" do
86108
it "rejects second arg that is not a hash" do
87109
expect do

spec/pulsar/producer_spec.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ def send(message)
5353
"payload",
5454
properties: {"k" => "v"},
5555
partition_key: "foo",
56+
ordering_key: "mine",
5657
)
5758
}
5859

@@ -67,6 +68,10 @@ def send(message)
6768
it "sets partition_key" do
6869
expect(subject.partition_key).to eq("foo")
6970
end
71+
72+
it "sets ordering_key" do
73+
expect(subject.ordering_key).to eq("mine")
74+
end
7075
end
7176
end
7277
end

0 commit comments

Comments
 (0)