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

Commit d6b92ae

Browse files
committed
Add topic getter to message class
1 parent 7c628e4 commit d6b92ae

4 files changed

Lines changed: 22 additions & 2 deletions

File tree

ext/bindings/message.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ Message::Message(const std::string& data, Rice::Object arg = Rice::Object()) {
4141
}
4242

4343
_msg = mb.build();
44+
built = true;
4445
}
4546

4647
Rice::String Message::getData() {
@@ -65,6 +66,12 @@ Rice::String Message::getOrderingKey() {
6566
return to_ruby(_msg.getOrderingKey());
6667
}
6768

69+
Rice::Object Message::getTopicName() {
70+
// If the message topic hasn't been set (it gets set when received, not when
71+
// built) getTopicName will try to dereference a null pointer.
72+
return built ? Rice::Nil : to_ruby(_msg.getTopicName());
73+
}
74+
6875
}
6976

7077
using namespace Rice;
@@ -84,5 +91,6 @@ void bind_message(Module& module) {
8491
.define_method("properties", &pulsar_rb::Message::getProperties)
8592
.define_method("partition_key", &pulsar_rb::Message::getPartitionKey)
8693
.define_method("ordering_key", &pulsar_rb::Message::getOrderingKey)
94+
.define_method("topic", &pulsar_rb::Message::getTopicName)
8795
;
8896
}

ext/bindings/message.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ namespace pulsar_rb {
2121
class Message {
2222
public:
2323
pulsar::Message _msg;
24+
bool built = false; // built with builder rather than returned from c++
2425
Message(const pulsar::Message& msg) : _msg(msg) {};
2526
Message(const std::string& data, Rice::Object opts);
2627

@@ -29,6 +30,7 @@ namespace pulsar_rb {
2930
Rice::Hash getProperties();
3031
Rice::String getPartitionKey();
3132
Rice::String getOrderingKey();
33+
Rice::Object getTopicName();
3234

3335
typedef Rice::Data_Object<Message> ptr;
3436
};

spec/pulsar/client_spec.rb

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,12 @@
4343

4444
it "can consume a single topic" do
4545
consumer = client.subscribe(topic, subscription_name)
46-
t = Thread.new { consumer.receive(timeout_ms).data }
46+
t = Thread.new { consumer.receive(timeout_ms) }
4747
client.create_producer(topic).send("single")
48-
expect(t.join.value).to eq("single")
48+
message = t.join.value
49+
50+
expect(message.data).to eq("single")
51+
expect(message.topic).to eq(topic)
4952
end
5053

5154
it "can consume multiple topics" do

spec/pulsar/message_spec.rb

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,13 @@
2424
expect(m.data).to eq("payload")
2525
end
2626

27+
describe "topic" do
28+
it "is nil when built rather than received" do
29+
m = described_class.new("payload")
30+
expect(m.topic).to be_nil
31+
end
32+
end
33+
2734
describe "properties" do
2835
it "takes properties" do
2936
m = described_class.new("payload", properties: {"a" => "1", "b" => "2"})

0 commit comments

Comments
 (0)