File tree Expand file tree Collapse file tree 5 files changed +67
-26
lines changed Expand file tree Collapse file tree 5 files changed +67
-26
lines changed Original file line number Diff line number Diff line change 13
13
require 'resque/worker'
14
14
require 'resque/plugin'
15
15
require 'resque/queue'
16
+ require 'resque/coder'
17
+ require 'resque/multi_json_coder'
16
18
17
19
module Resque
18
20
include Helpers
@@ -45,10 +47,17 @@ def redis=(server)
45
47
@redis = Redis ::Namespace . new ( :resque , :redis => server )
46
48
end
47
49
@queues = Hash . new { |h , name |
48
- h [ name ] = Resque ::Queue . new ( name , @redis , self )
50
+ h [ name ] = Resque ::Queue . new ( name , @redis , coder )
49
51
}
50
52
end
51
53
54
+ # Encapsulation of encode/decode. Overwrite this to use it across Resque.
55
+ # This defaults to MultiJson for backwards compatibilty.
56
+ def coder
57
+ @coder ||= MultiJsonCoder . new
58
+ end
59
+ attr_writer :coder
60
+
52
61
# Returns the current Redis connection. If none has been created, will
53
62
# create a new one.
54
63
def redis
Original file line number Diff line number Diff line change
1
+ module Resque
2
+ class EncodeException < StandardError ; end
3
+ class DecodeException < StandardError ; end
4
+
5
+ class Coder
6
+ # Given a Ruby object, returns a string suitable for storage in a
7
+ # queue.
8
+ def encode ( object )
9
+ raise EncodeException
10
+ end
11
+
12
+ # alias for encode
13
+ def dump ( object )
14
+ encode ( object )
15
+ end
16
+
17
+ # Given a string, returns a Ruby object.
18
+ def decode ( object )
19
+ raise DecodeException
20
+ end
21
+
22
+ # alias for decode
23
+ def load ( object )
24
+ decode ( object )
25
+ end
26
+ end
27
+ end
Original file line number Diff line number Diff line change 1
- require 'multi_json'
2
-
3
- # OkJson won't work because it doesn't serialize symbols
4
- # in the same way yajl and json do.
5
- if MultiJson . engine . to_s == 'MultiJson::Engines::OkJson'
6
- raise "Please install the yajl-ruby or json gem"
7
- end
8
-
9
1
module Resque
10
2
# Methods used by various classes in Resque.
11
3
module Helpers
12
- class DecodeException < StandardError ; end
13
-
14
4
# Direct access to the Redis instance.
15
5
def redis
16
6
Resque . redis
17
7
end
18
8
19
- # Given a Ruby object, returns a string suitable for storage in a
20
- # queue.
21
9
def encode ( object )
22
- :: MultiJson . encode ( object )
10
+ Resque . coder . encode ( object )
23
11
end
24
- alias :dump :encode
25
12
26
- # Given a string, returns a Ruby object.
27
13
def decode ( object )
28
- return unless object
29
-
30
- begin
31
- ::MultiJson . decode ( object )
32
- rescue ::MultiJson ::DecodeError => e
33
- raise DecodeException , e . message , e . backtrace
34
- end
14
+ Resque . coder . decode ( object )
35
15
end
36
- alias :load :decode
37
16
38
17
# Given a word with dashes, returns a camel cased version of it.
39
18
#
Original file line number Diff line number Diff line change
1
+ require 'multi_json'
2
+ require 'resque/coder'
3
+
4
+ # OkJson won't work because it doesn't serialize symbols
5
+ # in the same way yajl and json do.
6
+ if MultiJson . engine . to_s == 'MultiJson::Engines::OkJson'
7
+ raise "Please install the yajl-ruby or json gem"
8
+ end
9
+
10
+ module Resque
11
+ class MultiJsonCoder < Coder
12
+ def encode ( object )
13
+ ::MultiJson . encode ( object )
14
+ end
15
+
16
+ def decode ( object )
17
+ return unless object
18
+
19
+ begin
20
+ ::MultiJson . decode ( object )
21
+ rescue ::MultiJson ::DecodeError => e
22
+ raise DecodeException , e . message , e . backtrace
23
+ end
24
+ end
25
+ end
26
+ end
Original file line number Diff line number Diff line change 263
263
end
264
264
265
265
it "decode bad json" do
266
- assert_raises Resque ::Helpers :: DecodeException do
267
- Resque . decode ( "{\" error\" :\" Module not found \\ u002\" }" )
266
+ assert_raises Resque ::DecodeException do
267
+ Resque . coder . decode ( "{\" error\" :\" Module not found \\ u002\" }" )
268
268
end
269
269
end
270
270
You can’t perform that action at this time.
0 commit comments