mqtt 0.0.7 → 0.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/NEWS CHANGED
@@ -1,6 +1,30 @@
1
1
  Ruby MQTT NEWS
2
2
  ==============
3
3
 
4
+ Ruby MQTT Version 0.0.8 (2011-02-04)
5
+ ------------------------------------
6
+
7
+ * Implemented Last Will and Testament feature.
8
+ * Renamed dup attribute to duplicate to avoid method name clash.
9
+ * Made the random client_id generator a public class method.
10
+
11
+
12
+ Ruby MQTT Version 0.0.7 (2011-01-19)
13
+ ------------------------------------
14
+
15
+ * You can now pass a topic and block to client.get
16
+ * Added MQTT::Client.connect class method.
17
+
18
+
19
+ Ruby MQTT Version 0.0.5 (2011-01-18)
20
+ ------------------------------------
21
+
22
+ * Implemented setting username and password (MQTT 3.1)
23
+ * Renamed clean_start to clean_session
24
+ * Started using autoload to load classes
25
+ * Modernised Gem building mechanisms
26
+
27
+
4
28
  Ruby MQTT Version 0.0.4 (2009-02-22)
5
29
  ------------------------------------
6
30
 
data/README CHANGED
@@ -26,6 +26,7 @@ Synopsis
26
26
 
27
27
  # Subscribe example
28
28
  MQTT::Client.connect('test.mosquitto.org') do |c|
29
+ # If you pass a block to the get method, then it will loop
29
30
  c.get('test') do |topic,message|
30
31
  puts "#{topic}: #{message}"
31
32
  end
data/lib/mqtt/client.rb CHANGED
@@ -8,6 +8,10 @@ class MQTT::Client
8
8
  attr_accessor :ack_timeout # Number of seconds to wait for acknowledgement packets
9
9
  attr_accessor :username # Username to authenticate to the broker with
10
10
  attr_accessor :password # Password to authenticate to the broker with
11
+ attr_accessor :will_topic # The topic that the Will message is published to
12
+ attr_accessor :will_payload # Contents of message that is sent by broker when client disconnect
13
+ attr_accessor :will_qos # The QoS level of the will message sent by the broker
14
+ attr_accessor :will_retain # If the Will message should be retain by the broker after it is sent
11
15
 
12
16
  # OLD deprecated clean_start
13
17
  alias :clean_start :clean_session
@@ -25,7 +29,11 @@ class MQTT::Client
25
29
  :client_id => nil,
26
30
  :ack_timeout => 5,
27
31
  :username => nil,
28
- :password => nil
32
+ :password => nil,
33
+ :will_topic => nil,
34
+ :will_payload => nil,
35
+ :will_qos => 0,
36
+ :will_retain => false
29
37
  }
30
38
 
31
39
  # Create and connect a new MQTT Client
@@ -43,6 +51,24 @@ class MQTT::Client
43
51
  return client
44
52
  end
45
53
 
54
+ # Generate a random client identifier
55
+ # (using the characters 0-9 and a-z)
56
+ def self.generate_client_id(prefix='ruby_', length=16)
57
+ str = prefix.dup
58
+ length.times do
59
+ num = rand(36)
60
+ if (num<10)
61
+ # Number
62
+ num += 48
63
+ else
64
+ # Letter
65
+ num += 87
66
+ end
67
+ str += num.chr
68
+ end
69
+ return str
70
+ end
71
+
46
72
  # Create a new MQTT Client instance
47
73
  #
48
74
  # Examples:
@@ -79,13 +105,20 @@ class MQTT::Client
79
105
  @write_semaphore = Mutex.new
80
106
  end
81
107
 
108
+ def set_will(topic, payload, retain=false, qos=0)
109
+ self.will_topic = topic
110
+ self.will_payload = payload
111
+ self.will_retain = retain
112
+ self.will_qos = qos
113
+ end
114
+
82
115
  # Connect to the MQTT broker
83
116
  # If a block is given, then yield to that block and then disconnect again.
84
117
  def connect(clientid=nil)
85
118
  if !clientid.nil?
86
119
  @client_id = clientid
87
120
  elsif @clientid.nil?
88
- @client_id = random_letters(16)
121
+ @client_id = MQTT::Client.generate_client_id
89
122
  @clean_session = true
90
123
  end
91
124
 
@@ -99,7 +132,11 @@ class MQTT::Client
99
132
  :keep_alive => @keep_alive,
100
133
  :client_id => @client_id,
101
134
  :username => @username,
102
- :password => @password
135
+ :password => @password,
136
+ :will_topic => @will_topic,
137
+ :will_payload => @will_payload,
138
+ :will_qos => @will_qos,
139
+ :will_retain => @will_retain
103
140
  )
104
141
 
105
142
  # Send packet
@@ -284,21 +321,4 @@ private
284
321
  end
285
322
  end
286
323
 
287
- # Generate a string of random letters (0-9,a-z)
288
- def random_letters(count)
289
- str = ''
290
- count.times do
291
- num = rand(36)
292
- if (num<10)
293
- # Number
294
- num += 48
295
- else
296
- # Letter
297
- num += 87
298
- end
299
- str += num.chr
300
- end
301
- return str
302
- end
303
-
304
324
  end
data/lib/mqtt/packet.rb CHANGED
@@ -3,12 +3,19 @@ module MQTT
3
3
  # Class representing a MQTT Packet
4
4
  # Performs binary encoding and decoding of headers
5
5
  class MQTT::Packet
6
- attr_reader :dup # Duplicate delivery flag
6
+ attr_reader :duplicate # Duplicate delivery flag
7
7
  attr_reader :retain # Retain flag
8
8
  attr_reader :qos # Quality of Service level
9
9
  attr_reader :body_length # The length of the parsed packet body
10
10
 
11
- # Deprecate this: Read in a packet from a socket
11
+ DEFAULTS = {
12
+ :duplicate => false,
13
+ :qos => 0,
14
+ :retain => false,
15
+ :body_length => nil
16
+ }
17
+
18
+ # Read in a packet from a socket
12
19
  def self.read(socket)
13
20
  # Read in the packet header and work out the class
14
21
  header = read_byte(socket)
@@ -17,7 +24,7 @@ module MQTT
17
24
 
18
25
  # Create a new packet object
19
26
  packet = packet_class.new(
20
- :dup => ((header & 0x08) >> 3),
27
+ :duplicate => ((header & 0x08) >> 3),
21
28
  :qos => ((header & 0x06) >> 1),
22
29
  :retain => ((header & 0x01) >> 0)
23
30
  )
@@ -60,7 +67,7 @@ module MQTT
60
67
 
61
68
  # Create a new packet object
62
69
  packet = packet_class.new(
63
- :dup => ((buffer[0] & 0x08) >> 3) == 0x01,
70
+ :duplicate => ((buffer[0] & 0x08) >> 3) == 0x01,
64
71
  :qos => ((buffer[0] & 0x06) >> 1),
65
72
  :retain => ((buffer[0] & 0x01) >> 0) == 0x01
66
73
  )
@@ -91,12 +98,7 @@ module MQTT
91
98
 
92
99
  # Create a new empty packet
93
100
  def initialize(args={})
94
- update_attributes({
95
- :dup => false,
96
- :qos => 0,
97
- :retain => false,
98
- :body_length => nil
99
- }.merge(args))
101
+ update_attributes(DEFAULTS.merge(args))
100
102
  end
101
103
 
102
104
  def update_attributes(attr={})
@@ -115,11 +117,11 @@ module MQTT
115
117
  end
116
118
 
117
119
  # Set the dup flag (true/false)
118
- def dup=(arg)
120
+ def duplicate=(arg)
119
121
  if arg.kind_of?(Integer)
120
- @dup = (arg != 0)
122
+ @duplicate = (arg != 0)
121
123
  else
122
- @dup = arg
124
+ @duplicate = arg
123
125
  end
124
126
  end
125
127
 
@@ -162,7 +164,7 @@ module MQTT
162
164
  # Encode the fixed header
163
165
  header = [
164
166
  ((type_id.to_i & 0x0F) << 4) |
165
- ((dup ? 0x1 : 0x0) << 3) |
167
+ ((duplicate ? 0x1 : 0x0) << 3) |
166
168
  ((qos.to_i & 0x03) << 1) |
167
169
  (retain ? 0x1 : 0x0)
168
170
  ]
@@ -249,13 +251,15 @@ module MQTT
249
251
  attr_accessor :message_id
250
252
  attr_accessor :payload
251
253
 
252
- # Create a new Publish packet
253
- def initialize(args={})
254
- super({
254
+ DEFAULTS = {
255
255
  :topic => nil,
256
256
  :message_id => 0,
257
257
  :payload => ''
258
- }.merge(args))
258
+ }
259
+
260
+ # Create a new Publish packet
261
+ def initialize(args={})
262
+ super(DEFAULTS.merge(args))
259
263
  end
260
264
 
261
265
  # Get serialisation of packet's body
@@ -297,21 +301,23 @@ module MQTT
297
301
  alias :clean_start :clean_session
298
302
  alias :clean_start= :clean_session=
299
303
 
304
+ DEFAULTS = {
305
+ :protocol_name => 'MQIsdp',
306
+ :protocol_version => 0x03,
307
+ :client_id => nil,
308
+ :clean_session => true,
309
+ :keep_alive => 15,
310
+ :will_topic => nil,
311
+ :will_qos => 0,
312
+ :will_retain => false,
313
+ :will_payload => '',
314
+ :username => nil,
315
+ :password => nil,
316
+ }
317
+
300
318
  # Create a new Client Connect packet
301
319
  def initialize(args={})
302
- super({
303
- :protocol_name => 'MQIsdp',
304
- :protocol_version => 0x03,
305
- :client_id => nil,
306
- :clean_session => true,
307
- :keep_alive => 10,
308
- :will_topic => nil,
309
- :will_qos => 0,
310
- :will_retain => false,
311
- :will_payload => '',
312
- :username => nil,
313
- :password => nil,
314
- }.merge(args))
320
+ super(DEFAULTS.merge(args))
315
321
  end
316
322
 
317
323
  # Get serialisation of packet's body
@@ -372,12 +378,11 @@ module MQTT
372
378
  # Class representing an MQTT Connect Acknowledgment Packet
373
379
  class Connack < MQTT::Packet
374
380
  attr_accessor :return_code
381
+ DEFAULTS = {:return_code => 0x00}
375
382
 
376
383
  # Create a new Client Connect packet
377
384
  def initialize(args={})
378
- super({
379
- :return_code => 0x00
380
- }.merge(args))
385
+ super(DEFAULTS.merge(args))
381
386
  end
382
387
 
383
388
  # Get a string message corresponding to a return code
@@ -422,12 +427,11 @@ module MQTT
422
427
  # Class representing an MQTT Publish Acknowledgment packet
423
428
  class Puback < MQTT::Packet
424
429
  attr_accessor :message_id
430
+ DEFAULTS = {:message_id => 0}
425
431
 
426
432
  # Create a new Publish Acknowledgment packet
427
433
  def initialize(args={})
428
- super({
429
- :message_id => 0
430
- }.merge(args))
434
+ super(DEFAULTS.merge(args))
431
435
  end
432
436
 
433
437
  # Get serialisation of packet's body
@@ -448,12 +452,11 @@ module MQTT
448
452
  # Class representing an MQTT Publish Received packet
449
453
  class Pubrec < MQTT::Packet
450
454
  attr_accessor :message_id
455
+ DEFAULTS = {:message_id => 0}
451
456
 
452
457
  # Create a new Publish Recieved packet
453
458
  def initialize(args={})
454
- super({
455
- :message_id => 0
456
- }.merge(args))
459
+ super(DEFAULTS.merge(args))
457
460
  end
458
461
 
459
462
  # Get serialisation of packet's body
@@ -474,12 +477,11 @@ module MQTT
474
477
  # Class representing an MQTT Publish Release packet
475
478
  class Pubrel < MQTT::Packet
476
479
  attr_accessor :message_id
480
+ DEFAULTS = {:message_id => 0}
477
481
 
478
482
  # Create a new Publish Release packet
479
483
  def initialize(args={})
480
- super({
481
- :message_id => 0
482
- }.merge(args))
484
+ super(DEFAULTS.merge(args))
483
485
  end
484
486
 
485
487
  # Get serialisation of packet's body
@@ -500,12 +502,11 @@ module MQTT
500
502
  # Class representing an MQTT Publish Complete packet
501
503
  class Pubcomp < MQTT::Packet
502
504
  attr_accessor :message_id
505
+ DEFAULTS = {:message_id => 0}
503
506
 
504
507
  # Create a new Publish Complete packet
505
508
  def initialize(args={})
506
- super({
507
- :message_id => 0
508
- }.merge(args))
509
+ super(DEFAULTS.merge(args))
509
510
  end
510
511
 
511
512
  # Get serialisation of packet's body
@@ -527,14 +528,13 @@ module MQTT
527
528
  class Subscribe < MQTT::Packet
528
529
  attr_accessor :message_id
529
530
  attr_reader :topics
531
+ DEFAULTS = {:message_id => 0}
530
532
 
531
533
  # Create a new Subscribe packet
532
534
  def initialize(args={})
533
- super({
534
- :topics => [],
535
- :message_id => 0
536
- }.merge(args))
537
- self.qos = 1 # Force a QOS of 1
535
+ super(DEFAULTS.merge(args))
536
+ @topics ||= []
537
+ @qos = 1 # Force a QOS of 1
538
538
  end
539
539
 
540
540
  # Set one or more topics for the Subscrible packet
@@ -609,13 +609,12 @@ module MQTT
609
609
  class Suback < MQTT::Packet
610
610
  attr_accessor :message_id
611
611
  attr_reader :granted_qos
612
+ DEFAULTS = {:message_id => 0}
612
613
 
613
614
  # Create a new Subscribe Acknowledgment packet
614
615
  def initialize(args={})
615
- super({
616
- :granted_qos => [],
617
- :message_id => 0
618
- }.merge(args))
616
+ super(DEFAULTS.merge(args))
617
+ @granted_qos ||= []
619
618
  end
620
619
 
621
620
  def granted_qos=(value)
@@ -649,14 +648,13 @@ module MQTT
649
648
  class Unsubscribe < MQTT::Packet
650
649
  attr_reader :topics
651
650
  attr_accessor :message_id
651
+ DEFAULTS = {:message_id => 0}
652
652
 
653
653
  # Create a new Unsubscribe packet
654
654
  def initialize(args={})
655
- super({
656
- :topics => [],
657
- :message_id => 0
658
- }.merge(args))
659
- self.qos = 1 # Force a QOS of 1
655
+ super(DEFAULTS.merge(args))
656
+ @topics ||= []
657
+ @qos = 1 # Force a QOS of 1
660
658
  end
661
659
 
662
660
  def topics=(value)
@@ -690,12 +688,11 @@ module MQTT
690
688
  # Class representing an MQTT Unsubscribe Acknowledgment packet
691
689
  class Unsuback < MQTT::Packet
692
690
  attr_accessor :message_id
691
+ DEFAULTS = {:message_id => 0}
693
692
 
694
693
  # Create a new Unsubscribe Acknowledgment packet
695
694
  def initialize(args={})
696
- super({
697
- :message_id => 0
698
- }.merge(args))
695
+ super(DEFAULTS.merge(args))
699
696
  end
700
697
 
701
698
  # Get serialisation of packet's body
data/lib/mqtt/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module MQTT
2
- VERSION = "0.0.7"
2
+ VERSION = "0.0.8"
3
3
  end
@@ -62,7 +62,6 @@ describe MQTT::Client do
62
62
  end
63
63
  end
64
64
 
65
-
66
65
  describe "when calling the 'connect' method" do
67
66
  before(:each) do
68
67
  TCPSocket.stubs(:new).returns(@socket)
@@ -125,6 +124,39 @@ describe MQTT::Client do
125
124
  @client.connect
126
125
  @client.clean_session.should be_true
127
126
  end
127
+
128
+ context "with a last will and testament set" do
129
+ before(:each) do
130
+ @client.set_will('topic', 'hello', retain=false, qos=1)
131
+ end
132
+
133
+ it "should have set the Will's topic" do
134
+ @client.will_topic.should == 'topic'
135
+ end
136
+
137
+ it "should have set the Will's payload" do
138
+ @client.will_payload.should == 'hello'
139
+ end
140
+
141
+ it "should have set the Will's retain flag to true" do
142
+ @client.will_retain.should be_false
143
+ end
144
+
145
+ it "should have set the Will's retain QOS value to 1" do
146
+ @client.will_qos.should == 1
147
+ end
148
+
149
+ it "should include the will in the CONNECT message" do
150
+ @client.connect('myclient')
151
+ @socket.string.should ==
152
+ "\x10\x24"+
153
+ "\x00\x06MQIsdp"+
154
+ "\x03\x0e\x00\x0f"+
155
+ "\x00\x08myclient"+
156
+ "\x00\x05topic\x00\x05hello"
157
+ end
158
+ end
159
+
128
160
  end
129
161
 
130
162
  describe "when calling the 'receive_connack' method" do
@@ -350,7 +382,44 @@ describe MQTT::Client do
350
382
  MQTT::Packet.stubs(:read).raises(MQTT::Exception)
351
383
  @client.send(:receive_packet)
352
384
  end
385
+ end
353
386
 
387
+ describe "generating a client identifier" do
388
+ context "with default parameters" do
389
+ before :all do
390
+ @client_id = MQTT::Client.generate_client_id
391
+ end
392
+
393
+ it "should be less or equal to 23 characters long" do
394
+ @client_id.length.should <= 23
395
+ end
396
+
397
+ it "should have a prefix of ruby_" do
398
+ @client_id.should match(/^ruby_/)
399
+ end
400
+
401
+ it "should end in 16 characters of lowercase letters and numbers" do
402
+ @client_id.should match(/_[a-z0-9]{16}$/)
403
+ end
404
+ end
405
+
406
+ context "with an alternative prefix" do
407
+ before :all do
408
+ @client_id = MQTT::Client.generate_client_id('test_')
409
+ end
410
+
411
+ it "should be less or equal to 23 characters long" do
412
+ @client_id.length.should <= 23
413
+ end
414
+
415
+ it "should have a prefix of test_" do
416
+ @client_id.should match(/^test_/)
417
+ end
418
+
419
+ it "should end in 16 characters of lowercase letters and numbers" do
420
+ @client_id.should match(/_[a-z0-9]{16}$/)
421
+ end
422
+ end
354
423
  end
355
424
 
356
425
  end
@@ -7,8 +7,8 @@ describe MQTT::Packet do
7
7
 
8
8
  describe "when creating a new packet" do
9
9
  it "should allow you to set the packet dup flag as a hash parameter" do
10
- packet = MQTT::Packet.new( :dup => true )
11
- packet.dup.should be_true
10
+ packet = MQTT::Packet.new( :duplicate => true )
11
+ packet.duplicate.should be_true
12
12
  end
13
13
 
14
14
  it "should allow you to set the packet QOS level as a hash parameter" do
@@ -25,7 +25,7 @@ describe MQTT::Packet do
25
25
  describe "when setting packet parameters" do
26
26
  before(:each) do
27
27
  @packet = MQTT::Packet.new(
28
- :dup => false,
28
+ :duplicate => false,
29
29
  :qos => 0,
30
30
  :retain => false
31
31
  )
@@ -37,13 +37,13 @@ describe MQTT::Packet do
37
37
  end
38
38
 
39
39
  it "should let you change the dup flag of a packet" do
40
- @packet.dup = true
41
- @packet.dup.should be_true
40
+ @packet.duplicate = true
41
+ @packet.duplicate.should be_true
42
42
  end
43
43
 
44
44
  it "should let you change the dup flag of a packet using an integer" do
45
- @packet.dup = 1
46
- @packet.dup.should be_true
45
+ @packet.duplicate = 1
46
+ @packet.duplicate.should be_true
47
47
  end
48
48
 
49
49
  it "should let you change the retain flag of a packet" do
@@ -121,7 +121,7 @@ describe MQTT::Packet::Publish do
121
121
  end
122
122
 
123
123
  it "should output the correct bytes for a packet with QOS 2 and dup flag set" do
124
- packet = MQTT::Packet::Publish.new( :qos => 2, :dup => true, :message_id => 5, :topic => 'c/d', :payload => 'hello world' )
124
+ packet = MQTT::Packet::Publish.new( :qos => 2, :duplicate => true, :message_id => 5, :topic => 'c/d', :payload => 'hello world' )
125
125
  packet.to_s.should == "\x3C\x12\x00\x03c/d\x00\x05hello world"
126
126
  end
127
127
 
@@ -152,7 +152,7 @@ describe MQTT::Packet::Publish do
152
152
  end
153
153
 
154
154
  it "should set the DUP flag correctly" do
155
- @packet.dup.should be_false
155
+ @packet.duplicate.should be_false
156
156
  end
157
157
 
158
158
  it "should set the topic name correctly" do
@@ -182,7 +182,7 @@ describe MQTT::Packet::Publish do
182
182
  end
183
183
 
184
184
  it "should set the DUP flag correctly" do
185
- @packet.dup.should be_true
185
+ @packet.duplicate.should be_true
186
186
  end
187
187
 
188
188
  it "should set the topic name correctly" do
@@ -243,7 +243,7 @@ describe MQTT::Packet::Connect do
243
243
  describe "when serialising a packet" do
244
244
  it "should output the correct bytes for a packet with no flags" do
245
245
  packet = MQTT::Packet::Connect.new( :client_id => 'myclient' )
246
- packet.to_s.should == "\020\026\x00\x06MQIsdp\x03\x02\x00\x0a\x00\x08myclient"
246
+ packet.to_s.should == "\020\026\x00\x06MQIsdp\x03\x02\x00\x0f\x00\x08myclient"
247
247
  end
248
248
 
249
249
  it "should output the correct bytes for a packet with clean session turned off" do
@@ -251,7 +251,7 @@ describe MQTT::Packet::Connect do
251
251
  :client_id => 'myclient',
252
252
  :clean_session => false
253
253
  )
254
- packet.to_s.should == "\020\026\x00\x06MQIsdp\x03\x00\x00\x0a\x00\x08myclient"
254
+ packet.to_s.should == "\020\026\x00\x06MQIsdp\x03\x00\x00\x0f\x00\x08myclient"
255
255
  end
256
256
 
257
257
  it "should throw an exception when there is no client identifier" do
@@ -274,7 +274,7 @@ describe MQTT::Packet::Connect do
274
274
  packet.to_s.should ==
275
275
  "\x10\x24"+
276
276
  "\x00\x06MQIsdp"+
277
- "\x03\x0e\x00\x0a"+
277
+ "\x03\x0e\x00\x0f"+
278
278
  "\x00\x08myclient"+
279
279
  "\x00\x05topic\x00\x05hello"
280
280
  end
@@ -288,8 +288,8 @@ describe MQTT::Packet::Connect do
288
288
  packet.to_s.should ==
289
289
  "\x10\x2A"+
290
290
  "\x00\x06MQIsdp"+
291
- "\x03\xC2\x00\x0a\x00"+
292
- "\x08myclient"+
291
+ "\x03\xC2\x00\x0f"+
292
+ "\x00\x08myclient"+
293
293
  "\x00\x08username"+
294
294
  "\x00\x08password"
295
295
  end
@@ -429,8 +429,8 @@ describe MQTT::Packet::Connect do
429
429
  @packet = MQTT::Packet.parse(
430
430
  "\x10\x2A"+
431
431
  "\x00\x06MQIsdp"+
432
- "\x03\xC0\x00\x0a\x00"+
433
- "\x08myclient"+
432
+ "\x03\xC0\x00\x0a"+
433
+ "\x00\x08myclient"+
434
434
  "\x00\x08username"+
435
435
  "\x00\x08password"
436
436
  )
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mqtt
3
3
  version: !ruby/object:Gem::Version
4
- hash: 17
4
+ hash: 15
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 7
10
- version: 0.0.7
9
+ - 8
10
+ version: 0.0.8
11
11
  platform: ruby
12
12
  authors:
13
13
  - Nicholas J Humfrey
@@ -15,10 +15,12 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-01-19 00:00:00 +00:00
18
+ date: 2012-02-04 00:00:00 +00:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
+ name: bundler
23
+ prerelease: false
22
24
  requirement: &id001 !ruby/object:Gem::Requirement
23
25
  none: false
24
26
  requirements:
@@ -31,10 +33,10 @@ dependencies:
31
33
  - 7
32
34
  version: 1.0.7
33
35
  type: :development
34
- name: bundler
35
- prerelease: false
36
36
  version_requirements: *id001
37
37
  - !ruby/object:Gem::Dependency
38
+ name: yard
39
+ prerelease: false
38
40
  requirement: &id002 !ruby/object:Gem::Requirement
39
41
  none: false
40
42
  requirements:
@@ -47,10 +49,10 @@ dependencies:
47
49
  - 2
48
50
  version: 0.7.2
49
51
  type: :development
50
- name: yard
51
- prerelease: false
52
52
  version_requirements: *id002
53
53
  - !ruby/object:Gem::Dependency
54
+ name: rake
55
+ prerelease: false
54
56
  requirement: &id003 !ruby/object:Gem::Requirement
55
57
  none: false
56
58
  requirements:
@@ -63,10 +65,10 @@ dependencies:
63
65
  - 7
64
66
  version: 0.8.7
65
67
  type: :development
66
- name: rake
67
- prerelease: false
68
68
  version_requirements: *id003
69
69
  - !ruby/object:Gem::Dependency
70
+ name: rspec
71
+ prerelease: false
70
72
  requirement: &id004 !ruby/object:Gem::Requirement
71
73
  none: false
72
74
  requirements:
@@ -79,10 +81,10 @@ dependencies:
79
81
  - 0
80
82
  version: 2.6.0
81
83
  type: :development
82
- name: rspec
83
- prerelease: false
84
84
  version_requirements: *id004
85
85
  - !ruby/object:Gem::Dependency
86
+ name: mocha
87
+ prerelease: false
86
88
  requirement: &id005 !ruby/object:Gem::Requirement
87
89
  none: false
88
90
  requirements:
@@ -95,10 +97,10 @@ dependencies:
95
97
  - 0
96
98
  version: 0.10.0
97
99
  type: :development
98
- name: mocha
99
- prerelease: false
100
100
  version_requirements: *id005
101
101
  - !ruby/object:Gem::Dependency
102
+ name: rcov
103
+ prerelease: false
102
104
  requirement: &id006 !ruby/object:Gem::Requirement
103
105
  none: false
104
106
  requirements:
@@ -111,8 +113,6 @@ dependencies:
111
113
  - 0
112
114
  version: 0.9.0
113
115
  type: :development
114
- name: rcov
115
- prerelease: false
116
116
  version_requirements: *id006
117
117
  description: Pure Ruby gem that implements the MQTT (Message Queue Telemetry Transport) protocol, a lightweight protocol for publish/subscribe messaging.
118
118
  email: njh@aelius.com