disque 0.0.4 → 0.0.5

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4ab3407c0c795f337c046fa94c96e67f9f2be51b
4
- data.tar.gz: 8c0c0aedf7f7a97edf30512bc8558b8bca019bbe
3
+ metadata.gz: 567ba45ec3c94e38a4cdd18cc6a58db6960cb6cf
4
+ data.tar.gz: f6e258e52e77636493ada87f131ce8495ef97c85
5
5
  SHA512:
6
- metadata.gz: bb908195fd598056f7af0f0e45834996b4ae57f479afada1b1b4e21177cc49e4083cfd2bf708736c451102656c33069ebaad29c8af3879d6b79f8b50d597338e
7
- data.tar.gz: 63945a37c822eef761d2fa7f8dd5c75de68f91c54d319572a38d066481b2421feed6a4eb0de55553ba35b45e8e9e838a980ef2602a1699315f203fa89e6f3955
6
+ metadata.gz: 4f933756f0b4165e327f8ce4ea93315d527806bfb9b6a20a5af0c3d2dad25eb219fb06c610410a561f88446ba1c12bbac292126369c9e924ec2c8fde614e0caa
7
+ data.tar.gz: 8f3ad9b91c3d16703fa1d77ae1d64be07108ed59bcf3225c1782d16a773413abcd5eb63c39a1ba4dae6973eab67140443b40952b71528323438b71070060fe8e
data/CHANGELOG CHANGED
@@ -1,3 +1,7 @@
1
+ 0.0.5
2
+
3
+ - Change API to receive a string of nodes
4
+
1
5
  0.0.4
2
6
 
3
7
  - Add AUTH option.
data/README.md CHANGED
@@ -12,15 +12,60 @@ Create a new Disque client by passing a list of nodes:
12
12
  client = Disque.new(["127.0.0.1:7711", "127.0.0.1:7712", "127.0.0.1:7713"])
13
13
  ```
14
14
 
15
+ Alternatively, you can pass a single string with comma-separated nodes:
16
+
17
+ ```ruby
18
+ client = Disque.new("127.0.0.1:7711,127.0.0.1:7712,127.0.0.1:7713")
19
+ ```
20
+
21
+ Using a single string is useful if you are receiving the list of nodes
22
+ from an environment variable.
23
+
24
+ If the nodes are password protected, you can pass the `AUTH` string:
25
+
26
+ ```ruby
27
+ client = Disque.new("127.0.0.1:7711", auth: "e727d1464a...")
28
+ ```
29
+
30
+ The client keeps track of which nodes are providing more jobs, and after
31
+ a given number operations it tries to connect to the preferred node. The
32
+ number of operations for each cycle defaults to 1000, but it can be
33
+ configured:
34
+
35
+ ```ruby
36
+ client = Disque.new("127.0.0.1:7711", cycle: 20000)
37
+ ```
38
+
15
39
  Now you can add jobs:
16
40
 
17
41
  ```ruby
18
42
  client.push("foo", "bar", 100)
19
43
  ```
20
44
 
21
- It will push the job "bar" to the queue "foo" with a timeout of 100
22
- ms, and return the id of the job if it was received and replicated
23
- in time.
45
+ It will push the job `"bar"` to the queue `"foo"` with a timeout
46
+ of 100 ms, and return the id of the job if it was received and
47
+ replicated in time.
48
+
49
+ Disque's `ADDJOB` signature is as follows:
50
+
51
+ ```
52
+ ADDJOB queue_name job <ms-timeout>
53
+ [REPLICATE <count>]
54
+ [DELAY <sec>]
55
+ [RETRY <sec>]
56
+ [TTL <sec>]
57
+ [MAXLEN <count>]
58
+ [ASYNC]
59
+ ```
60
+
61
+ You can pass any optional arguments as a hash, for example:
62
+
63
+ ```ruby
64
+ disque.push("foo", "myjob", 1000, ttl: 1, async: true)
65
+ ```
66
+
67
+ Note that `async` is a special case because it's just a flag. That's
68
+ why `true` must be passed as its value.
24
69
 
25
70
  Then, your workers will do something like this:
26
71
 
@@ -32,6 +77,13 @@ loop do
32
77
  end
33
78
  ```
34
79
 
80
+ The `fetch` command receives an array of queues, and optionally a
81
+ `timeout` (in milliseconds) and the `count` of jobs to retrieve:
82
+
83
+ ```ruby
84
+ client.fetch(from: ["bar", "baz"], count: 10, timeout: 2000)
85
+ ```
86
+
35
87
  Installation
36
88
  ------------
37
89
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "disque"
5
- s.version = "0.0.4"
5
+ s.version = "0.0.5"
6
6
  s.summary = "Client for Disque"
7
7
  s.description = "Disque client for Ruby"
8
8
  s.authors = ["Michel Martens", "Damian Janowski"]
@@ -14,16 +14,25 @@ class Disque
14
14
  #
15
15
  # Disque.new(["127.0.0.1:7711", "127.0.0.1:7712", "127.0.0.1:7713"])
16
16
  #
17
+ # Alternatively, you can pass a single string with a comma-separated
18
+ # list of nodes:
19
+ #
20
+ # Disque.new("127.0.0.1:7711,127.0.0.1:7712,127.0.0.1:7713")
21
+ #
17
22
  # For each operation, a counter is updated to signal which node was
18
23
  # the originator of the message. Based on that information, after
19
24
  # a full cycle (1000 operations, but configurable on initialization)
20
25
  # the stats are checked to see what is the most convenient node
21
26
  # to connect to in order to avoid extra jumps.
22
27
  #
23
- # TODO Account for authentication
24
28
  # TODO Account for timeout
25
29
  def initialize(hosts, auth: nil, cycle: 1000)
26
30
 
31
+ # Split a string of hosts if necessary
32
+ if String === hosts
33
+ hosts = hosts.split(",")
34
+ end
35
+
27
36
  # Cluster password
28
37
  @auth = auth
29
38
 
@@ -235,3 +235,12 @@ test "don't ack jobs when no block is given" do
235
235
 
236
236
  assert_equal info.fetch("state"), "active"
237
237
  end
238
+
239
+ test "receive a string of comma-separated nodes" do
240
+ nodes = DISQUE_GOOD_NODES.join(",")
241
+
242
+ c = Disque.new(nodes, auth: "test")
243
+
244
+ assert_equal "PONG", c.call("PING")
245
+ assert_equal DISQUE_GOOD_NODES.size, c.nodes.size
246
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: disque
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michel Martens
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-05-12 00:00:00.000000000 Z
12
+ date: 2015-05-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: redic