rabbitmq_http_api_client 0.8.0 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3fcc64344f962ce4cd8a09b31ec56fcb07e0e14e
4
- data.tar.gz: 2ad823cabc46636f2bd76ac3afe11e73092e0949
3
+ metadata.gz: 2c3e80aef7a45dabffb63bf86a447e35b26d0bef
4
+ data.tar.gz: 9d5176e73743320c8efdfbbdd1b42a4927110fcf
5
5
  SHA512:
6
- metadata.gz: 3bef8999c93f6c4b8df933023da82edfc521136e4e6458bf726e081a9b8c348702da3459da8787ee93f6767063909a438588d9996cbdc975f27122174ff2ee0e
7
- data.tar.gz: 4ccda1d68cc3e4f7e7ebfb0aa77900b2c6d0d0bd6acac0285003a7c01b3a3d12bad998d2ca65055f4b38fedb929c31b7adbc26d849563b059d59e483a0ea7550
6
+ metadata.gz: 56714e455a1c24092866bf4f16287abab7be613aced524666b839fbb20d1839992a4f86e2480175f39ccdf331a57a60ab2a201400c8ad9c3c972589d7ed94fc3
7
+ data.tar.gz: 07e576efb22122182602e6fab7fb6bed5c3637f7734abf94140dd5c22b0f125721861e03d7e227682ba99ddb597dc9d32137f5e36fe35a37b3c31436a71ee41a
data/.travis.yml CHANGED
@@ -17,3 +17,4 @@ branches:
17
17
  matrix:
18
18
  allow_failures:
19
19
  - rvm: rbx-19mode
20
+ - rvm: 1.8.7
data/ChangeLog.md CHANGED
@@ -1,3 +1,53 @@
1
+ ## Changes Between 0.8.0 and 0.9.0
2
+
3
+ ### New Queue Binding Methods
4
+
5
+ `RabbitMQ::HTTP::Client#queue_binding_info`,
6
+ `RabbitMQ::HTTP::Client#bind_queue`, and
7
+ `RabbitMQ::HTTP::Client#delete_queue_binding`
8
+ are new methods that operate on queue bindings:
9
+
10
+ ``` ruby
11
+ c = RabbitMQ::HTTP::Client.new("http://guest:guest@127.0.0.1:15672")
12
+
13
+ c.bind_queue("/", "a.queue", "an.exchange", "routing.key")
14
+ c.queue_binding_info("/", "a.queue", "an.exchange", "properties.key")
15
+ c.delete_queue_binding("/", "a.queue", "an.exchange", "properties.key")
16
+ ```
17
+
18
+ Contributed by Noah Magram.
19
+
20
+
21
+ ## Changes Between 0.7.0 and 0.8.0
22
+
23
+ ### Client#protocol_ports
24
+
25
+ `RabbitMQ::HTTP::Client#enabled_protocols` is a new method that returns
26
+ a hash of enabled protocols to their ports. The keys are the same as
27
+ returned by `Client#enabled_protocols`:
28
+
29
+ ``` ruby
30
+ # when TLS and MQTT plugin is enabled
31
+ c.protocol_ports # => {"amqp" => 5672, "amqp/ssl" => 5671, "mqtt" => 1883}
32
+ ```
33
+
34
+ ### Client#enabled_protocols
35
+
36
+ `RabbitMQ::HTTP::Client#enabled_protocols` is a new method that returns
37
+ a list of enabled protocols. Some common values are:
38
+
39
+ * `amqp` (AMQP 0-9-1)
40
+ * `amqp/ssl` (AMQP 0-9-1 with TLS enabled)
41
+ * `mqtt`
42
+ * `stomp`
43
+
44
+ ``` ruby
45
+ # when TLS and MQTT plugin is enabled
46
+ c.enabled_protocols # => ["amqp", "amqp/ssl", "mqtt"]
47
+ ```
48
+
49
+
50
+
1
51
  ## Changes Between 0.6.0 and 0.7.0
2
52
 
3
53
  ### Support for Basic HTTP Auth Credentials in URI
data/Gemfile CHANGED
@@ -3,7 +3,9 @@ source 'https://rubygems.org'
3
3
  group :development, :test do
4
4
  gem "rspec"
5
5
  gem "json", :platform => :ruby_18
6
- gem "bunny", ">= 0.10.8"
6
+ gem "bunny", ">= 1.0.0"
7
+
8
+ gem "rantly"
7
9
  end
8
10
 
9
11
  # Specify your gem's dependencies in superintendent.gemspec
data/README.md CHANGED
@@ -7,6 +7,8 @@ This gem is a [RabbitMQ HTTP API](http://hg.rabbitmq.com/rabbitmq-management/raw
7
7
  * Getting information about exchanges, queues, bindings
8
8
  * Closing client connections
9
9
  * Getting information about vhosts, users, permissions
10
+ * Getting information about enabled plugins, protocols, their ports, etc
11
+ * Managing vhosts, users, permissions
10
12
 
11
13
  and will support more HTTP API features in the future
12
14
 
@@ -38,7 +40,7 @@ Add this line to your application's Gemfile:
38
40
 
39
41
  And then execute:
40
42
 
41
- $ bundle
43
+ $ bundle install
42
44
 
43
45
  Or install it yourself as:
44
46
 
@@ -59,7 +61,7 @@ Use `RabbitMQ::HTTP::Client#connect` to specify RabbitMQ HTTP API endpoint (e.g.
59
61
  ``` ruby
60
62
  require "rabbitmq/http/client"
61
63
 
62
- endpoint = "http://127.0.0.1:55672"
64
+ endpoint = "http://127.0.0.1:15672"
63
65
  client = RabbitMQ::HTTP::Client.new(endpoint, :username => "guest", :password => "guest")
64
66
  ```
65
67
 
@@ -68,7 +70,7 @@ Alternatively, credentials can be specified in the endpoint URI:
68
70
  ``` ruby
69
71
  require "rabbitmq/http/client"
70
72
 
71
- client = RabbitMQ::HTTP::Client.new("http://guest:guest@127.0.0.1:55672")
73
+ client = RabbitMQ::HTTP::Client.new("http://guest:guest@127.0.0.1:15672")
72
74
  ```
73
75
 
74
76
  ### Client API Design Overview
@@ -284,7 +286,7 @@ client.create_vhost("myapp.staging")
284
286
  client.delete_vhost("myapp.staging")
285
287
  ```
286
288
 
287
- ### Operations on Users
289
+ ### Managing Users
288
290
 
289
291
  ``` ruby
290
292
  # List all users
@@ -309,7 +311,7 @@ client.update_user("myapp", :tags => "services", :password => "t0ps3krEt")
309
311
  client.delete_user("myapp")
310
312
  ```
311
313
 
312
- ### Operations on Permissions
314
+ ### Managing Permissions
313
315
 
314
316
  ``` ruby
315
317
  # List all permissions
@@ -1,7 +1,7 @@
1
1
  module RabbitMQ
2
2
  module HTTP
3
3
  class Client
4
- VERSION = "0.8.0"
4
+ VERSION = "0.9.0"
5
5
  end
6
6
  end
7
7
  end
@@ -179,6 +179,22 @@ module RabbitMQ
179
179
  decode_resource_collection(@connection.get("/api/bindings/#{uri_encode(vhost)}/e/#{uri_encode(exchange)}/q/#{uri_encode(queue)}"))
180
180
  end
181
181
 
182
+ def queue_binding_info(vhost, queue, exchange, properties_key)
183
+ decode_resource(@connection.get("/api/bindings/#{uri_encode(vhost)}/e/#{uri_encode(exchange)}/q/#{uri_encode(queue)}/#{uri_encode(properties_key)}"))
184
+ end
185
+
186
+ def bind_queue(vhost, queue, exchange, routing_key, arguments = [])
187
+ resp = @connection.post("/api/bindings/#{uri_encode(vhost)}/e/#{uri_encode(exchange)}/q/#{uri_encode(queue)}") do |req|
188
+ req.headers['Content-Type'] = 'application/json'
189
+ req.body = MultiJson.dump({ routing_key: routing_key, arguments: arguments })
190
+ end
191
+ resp.headers['location']
192
+ end
193
+
194
+ def delete_queue_binding(vhost, queue, exchange, properties_key)
195
+ resp = @connection.delete("/api/bindings/#{uri_encode(vhost)}/e/#{uri_encode(exchange)}/q/#{uri_encode(queue)}/#{uri_encode(properties_key)}")
196
+ resp.success?
197
+ end
182
198
 
183
199
 
184
200
 
data/repl ADDED
@@ -0,0 +1,3 @@
1
+ #!/bin/sh
2
+
3
+ bundle exec irb -Ilib -r'json' -r'rabbitmq/http/client'
@@ -1,3 +1,4 @@
1
+ # -*- coding: utf-8 -*-
1
2
  require "spec_helper"
2
3
 
3
4
  describe RabbitMQ::HTTP::Client do
@@ -521,6 +522,7 @@ describe RabbitMQ::HTTP::Client do
521
522
  b.destination_type.should == "queue"
522
523
  b.source.should == x.name
523
524
  b.routing_key.should_not be_nil
525
+ b.properties_key.should_not be_nil
524
526
  b.vhost.should == "/"
525
527
 
526
528
  q.delete
@@ -529,15 +531,69 @@ describe RabbitMQ::HTTP::Client do
529
531
  end
530
532
 
531
533
  describe "POST /api/bindings/:vhost/e/:exchange/q/:queue" do
532
- it "creates a binding between an exchange and a queue"
534
+ before :all do
535
+ @channel = @connection.create_channel
536
+ end
537
+
538
+ it "creates a binding between an exchange and a queue" do
539
+ routing_key = 'test.key'
540
+ q = @channel.queue("")
541
+ x = @channel.fanout("http.client.fanout")
542
+ q.bind(x)
543
+
544
+ b = subject.bind_queue("/", q.name, x.name, routing_key)
545
+
546
+ b.should == q.name + "/" + routing_key
547
+
548
+ q.delete
549
+ x.delete
550
+ end
533
551
  end
534
552
 
535
553
  describe "GET /api/bindings/:vhost/e/:exchange/q/:queue/props" do
536
- it "returns an individual binding between an exchange and a queue"
554
+ before :all do
555
+ @channel = @connection.create_channel
556
+ end
557
+
558
+ it "returns an individual binding between an exchange and a queue" do
559
+ routing_key = 'test.key'
560
+ q = @channel.queue("")
561
+ x = @channel.fanout("http.client.fanout")
562
+ q.bind(x)
563
+
564
+ xs = subject.list_bindings_between_queue_and_exchange("/", q.name, x.name)
565
+ b1 = xs.first
566
+
567
+ b2 = subject.queue_binding_info("/", q.name, x.name, b1.properties_key)
568
+
569
+ b1.should == b2
570
+
571
+ end
537
572
  end
538
573
 
539
574
  describe "DELETE /api/bindings/:vhost/e/:exchange/q/:queue/props" do
540
- it "deletes an individual binding between an exchange and a queue"
575
+ before :all do
576
+ @channel = @connection.create_channel
577
+ end
578
+
579
+ it "deletes an individual binding between an exchange and a queue" do
580
+ routing_key = 'test.key'
581
+ q = @channel.queue("")
582
+ x = @channel.fanout("http.client.fanout")
583
+ q.bind(x)
584
+
585
+ xs = subject.list_bindings_between_queue_and_exchange("/", q.name, x.name)
586
+ b = xs.first
587
+
588
+ subject.delete_queue_binding("/", q.name, x.name, b.properties_key).should be_true
589
+
590
+ xs = subject.list_bindings_between_queue_and_exchange("/", q.name, x.name)
591
+
592
+ xs.size.should == 0
593
+
594
+ q.delete
595
+ x.delete
596
+ end
541
597
  end
542
598
 
543
599
  describe "GET /api/vhosts" do
@@ -571,14 +627,51 @@ describe RabbitMQ::HTTP::Client do
571
627
  end
572
628
 
573
629
  describe "PUT /api/vhosts/:name" do
574
- let(:vhost) { "http-created" }
630
+ gen = Rantly.new
631
+
632
+ [
633
+ "http-created",
634
+ "http_created",
635
+ "http created",
636
+ "создан по хатэтэпэ",
637
+ "creado a través de HTTP",
638
+ "通过http",
639
+ "HTTP를 통해 생성",
640
+ "HTTPを介して作成",
641
+ "created over http?",
642
+ "created @ http API",
643
+ "erstellt über http",
644
+ "http पर बनाया",
645
+ "ถูกสร้างขึ้นผ่าน HTTP",
646
+ "±!@^&#*"
647
+ ].each do |vhost|
648
+ context "when vhost name is #{vhost}" do
649
+ it "creates a vhost" do
650
+ subject.create_vhost(vhost)
651
+ subject.create_vhost(vhost)
652
+
653
+ v = subject.vhost_info(vhost)
654
+ v.name.should == vhost
655
+
656
+ subject.delete_vhost(v.name)
657
+ end
658
+ end
659
+ end
575
660
 
576
- it "creates a vhost" do
577
- subject.create_vhost(vhost)
578
- subject.create_vhost(vhost)
661
+ 1000.times do
662
+ vhost = gen.string
663
+
664
+ context "when vhost name is #{vhost}" do
665
+ it "creates a vhost" do
666
+ subject.create_vhost(vhost)
667
+ subject.create_vhost(vhost)
579
668
 
580
- v = subject.vhost_info(vhost)
581
- v.name.should == vhost
669
+ v = subject.vhost_info(vhost)
670
+ v.name.should == vhost
671
+
672
+ subject.delete_vhost(v.name)
673
+ end
674
+ end
582
675
  end
583
676
  end
584
677
 
data/spec/spec_helper.rb CHANGED
@@ -11,3 +11,4 @@ require "rspec"
11
11
  require "json"
12
12
  require "rabbitmq/http/client"
13
13
  require "bunny"
14
+ require "rantly"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rabbitmq_http_api_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Klishin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-10-29 00:00:00.000000000 Z
11
+ date: 2013-11-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: hashie
@@ -98,6 +98,7 @@ files:
98
98
  - lib/rabbitmq/http/client.rb
99
99
  - lib/rabbitmq/http/client/version.rb
100
100
  - rabbitmq_http_api_client.gemspec
101
+ - repl
101
102
  - spec/integration/client_spec.rb
102
103
  - spec/spec_helper.rb
103
104
  homepage: http://github.com/ruby-amqp/rabbitmq_http_api_client