resque_ranger 1.0.0.alpha.2 → 1.0.0.alpha.3
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 +8 -8
- data/lib/resque_ranger/core.rb +83 -3
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
MDI1ZDFjM2ZlYzdkOTdiZjBlMWU1NmM5Y2NlNTViN2E0MzM4Y2M1Ng==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ZTZiMGU3YmU5YjY1Mzg1NWFhMTI3YzFjZGVjNWFiYjFmNTgyNjUwMA==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
NjgzNjFlM2NkZTBlMTFjZjgzY2M4MmVjZWE1YmJiMzllNjIxNzVhNjEwNDlh
|
10
|
+
YTk3ZDUwMWY2ZjZlY2U4MmQ3NTViZDAzNGEzYTQyNmVlZmFjMGFmYzY1YTg4
|
11
|
+
NjM4ZWM0ODI3Yjk3MWZmOTcxMzE4MGY0N2FlZjU0NzY4ODliNDU=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
YmVlM2UyZWI5MTg5OGYzNjAzOTYyN2ZjYjk2MGIzNjFlYzNlMzJhYWQxNGRj
|
14
|
+
MjEzOWFkMmFjYmVlMzVjMDY1YTU1NmQ4NjNjYjJhODcyODNjZTFlZWYzNTE5
|
15
|
+
MjE2YWZmNWM2YTc1YjIxOGEzNzgzZjcxYmRhYzI2MGZkYjI0Zjk=
|
data/lib/resque_ranger/core.rb
CHANGED
@@ -1,14 +1,41 @@
|
|
1
1
|
require 'resque'
|
2
2
|
|
3
|
+
require 'json'
|
4
|
+
|
3
5
|
module ResqueRanger
|
4
6
|
|
5
7
|
def self.queues
|
6
|
-
|
7
|
-
Queue.new(name: q)
|
8
|
-
end
|
8
|
+
@queues ||= QueueManager.new
|
9
9
|
end
|
10
10
|
|
11
11
|
|
12
|
+
class QueueManager
|
13
|
+
include Enumerable
|
14
|
+
|
15
|
+
def keys
|
16
|
+
Resque.queues
|
17
|
+
end
|
18
|
+
|
19
|
+
def key?(name)
|
20
|
+
Resque.queues.include?(name.to_s)
|
21
|
+
end
|
22
|
+
|
23
|
+
def [](name)
|
24
|
+
if self.key?(name)
|
25
|
+
Queue.new(name: name.to_s)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
|
30
|
+
def each
|
31
|
+
return enum_for(:each) unless block_given?
|
32
|
+
|
33
|
+
self.keys.each do |k|
|
34
|
+
yield self[k]
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
12
39
|
class Queue
|
13
40
|
|
14
41
|
attr_reader :name, :redis
|
@@ -31,11 +58,64 @@ module ResqueRanger
|
|
31
58
|
end
|
32
59
|
|
33
60
|
|
61
|
+
def raw_listing(index, &block)
|
62
|
+
block ||= ->(x){ x }
|
63
|
+
|
64
|
+
if index.is_a? Integer
|
65
|
+
redis.lrange(formal_name, index, index).map(&block).first
|
66
|
+
elsif index.is_a? Range
|
67
|
+
# FIXME: This will not work for "..." ranges
|
68
|
+
redis.lrange(formal_name, index.begin, index.end).map(&block)
|
69
|
+
else
|
70
|
+
raise ArgumentError.new("index must be either an Integer or a Range")
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def [](index)
|
75
|
+
raw_listing(index) do |listing|
|
76
|
+
QueueEntry.create(listing)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
|
34
81
|
def to_s
|
35
82
|
name
|
36
83
|
end
|
37
84
|
|
38
85
|
end
|
39
86
|
|
87
|
+
|
88
|
+
# Wrapper around a single queue entry
|
89
|
+
class QueueEntry
|
90
|
+
|
91
|
+
attr_reader :raw_data, :worker_name, :args
|
92
|
+
|
93
|
+
def initialize(options = {})
|
94
|
+
@raw_data = options.fetch(:raw_data)
|
95
|
+
@worker_name = options.fetch(:worker_name)
|
96
|
+
@args = options.fetch(:args)
|
97
|
+
end
|
98
|
+
|
99
|
+
def self.create(raw_data)
|
100
|
+
parsed_data = JSON.parse(raw_data)
|
101
|
+
self.new(
|
102
|
+
raw_data: raw_data,
|
103
|
+
worker_name: parsed_data["class"],
|
104
|
+
args: parsed_data["args"]
|
105
|
+
)
|
106
|
+
end
|
107
|
+
|
108
|
+
|
109
|
+
def to_s
|
110
|
+
"#{worker_name}.perform(...)"
|
111
|
+
end
|
112
|
+
|
113
|
+
def inspect
|
114
|
+
rendered_args = args.map(&:inspect).join(", ")
|
115
|
+
"#{worker_name}.perform(#{rendered_args})"
|
116
|
+
end
|
117
|
+
|
118
|
+
end
|
119
|
+
|
40
120
|
end
|
41
121
|
|