redisrpc 0.3.4 → 0.3.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2) hide show
  1. data/lib/redisrpc.rb +21 -22
  2. metadata +15 -4
@@ -13,7 +13,8 @@
13
13
  # You should have received a copy of the GNU General Public License
14
14
  # along with this program. If not, see <http://www.gnu.org/licenses/>.
15
15
 
16
- require 'json'
16
+ require File.expand_path('../redisrpc/version',__FILE__)
17
+ require 'multi_json'
17
18
 
18
19
  require 'redis'
19
20
 
@@ -31,19 +32,12 @@ module RedisRPC
31
32
  class FunctionCall
32
33
 
33
34
  def initialize(args={})
34
- @name = args['name']
35
+ @method = args['name'].to_sym
35
36
  @args = args['args']
36
37
  end
37
38
 
38
- def as_ruby_code
39
- argstring = ''
40
- if @args != nil
41
- argstring += ' '
42
- argstring += @args.join ','
43
- end
44
- return @name + argstring
45
- end
46
-
39
+ attr_reader :method
40
+ attr_reader :args
47
41
  end
48
42
 
49
43
 
@@ -59,7 +53,7 @@ module RedisRPC
59
53
  function_call = {'name' => sym.to_s, 'args' => args}
60
54
  response_queue = @message_queue + ':rpc:' + rand_string
61
55
  rpc_request = {'function_call' => function_call, 'response_queue' => response_queue}
62
- message = JSON.generate rpc_request
56
+ message = MultiJson.dump rpc_request
63
57
  if $DEBUG
64
58
  $stderr.puts 'RPC Request: ' + message
65
59
  end
@@ -75,7 +69,7 @@ module RedisRPC
75
69
  end
76
70
  $stderr.puts 'RPC Response: ' + message
77
71
  end
78
- rpc_response = JSON.parse message
72
+ rpc_response = MultiJson.load message
79
73
  exception = rpc_response['exception']
80
74
  if exception != nil
81
75
  raise RemoteException, exception
@@ -84,10 +78,10 @@ module RedisRPC
84
78
  raise RemoteException, 'Malformed RPC Response message: ' + rpc_response
85
79
  end
86
80
  return rpc_response['return_value']
87
- end
81
+ end
88
82
 
89
- def rand_string(size=8, charset=%w{ 1 2 3 4 5 6 7 8 9 0 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z})
90
- return (0...size).map{ charset.to_a[rand(charset.size)] }.join
83
+ def rand_string(size=8)
84
+ return rand(36**size).to_s(36).upcase.rjust(size,'0')
91
85
  end
92
86
 
93
87
  def respond_to?(sym)
@@ -106,25 +100,22 @@ module RedisRPC
106
100
  end
107
101
 
108
102
  def run
109
- # Flush the message queue.
110
- @redis_server.del @message_queue
111
103
  loop do
112
104
  message_queue, message = @redis_server.blpop @message_queue, 0
113
105
  if $DEBUG
114
106
  fail 'assertion failed' if message_queue != @message_queue
115
107
  $stderr.puts 'RPC Request: ' + message
116
108
  end
117
- rpc_request = JSON.parse(message)
109
+ rpc_request = MultiJson.load message
118
110
  response_queue = rpc_request['response_queue']
119
111
  function_call = FunctionCall.new(rpc_request['function_call'])
120
- code = '@local_object.' + function_call.as_ruby_code
121
112
  begin
122
- return_value = eval code
113
+ return_value = @local_object.send( function_call.method, *function_call.args )
123
114
  rpc_response = {'return_value' => return_value}
124
115
  rescue => err
125
116
  rpc_response = {'exception' => err}
126
117
  end
127
- message = JSON.generate rpc_response
118
+ message = MultiJson.dump rpc_response
128
119
  if $DEBUG
129
120
  $stderr.puts 'RPC Response: ' + message
130
121
  end
@@ -132,6 +123,14 @@ module RedisRPC
132
123
  end
133
124
  end
134
125
 
126
+ def run!
127
+ flush_queue!
128
+ run
129
+ end
130
+
131
+ def flush_queue!
132
+ @redis_server.del @message_queue
133
+ end
135
134
  end
136
135
 
137
136
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: redisrpc
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.4
4
+ version: 0.3.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-04-04 00:00:00.000000000 Z
12
+ date: 2012-04-20 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: redis
16
- requirement: &2151801000 !ruby/object:Gem::Requirement
16
+ requirement: &2156634200 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - <
@@ -21,7 +21,18 @@ dependencies:
21
21
  version: 3.0.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *2151801000
24
+ version_requirements: *2156634200
25
+ - !ruby/object:Gem::Dependency
26
+ name: multi_json
27
+ requirement: &2156633700 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ~>
31
+ - !ruby/object:Gem::Version
32
+ version: '1.3'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *2156633700
25
36
  description: ! 'RedisRPC is the easiest to use RPC library in the world. (No small
26
37
  claim!) It
27
38