jsonrpc-server 0.1.0 → 0.1.1

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.
Files changed (2) hide show
  1. data/lib/json_server.rb +33 -12
  2. metadata +3 -3
@@ -1,5 +1,14 @@
1
1
  module JSONServer
2
2
 
3
+ class Error < RuntimeError
4
+ attr_reader :code, :message, :data
5
+ def initialize obj = {}
6
+ @code = obj[:code] || -30000
7
+ @message = obj[:message] || "Runtime Error"
8
+ @data = obj[:data]
9
+ end
10
+ end
11
+
3
12
  def index
4
13
  begin
5
14
  data = ActiveSupport::JSON.decode request.body
@@ -31,19 +40,31 @@ module JSONServer
31
40
  return invalidRequest
32
41
  end
33
42
  result = { :jsonrpc => "2.0", :id => data["id"] }
34
- self.class.public_instance_methods.each { |method|
35
- if method.to_s == data["method"]
36
- if data["params"].class == Array
37
- arr = data["params"]
38
- elsif
39
- arr = self.method(data["method"]).parameters.collect { |pd|
40
- data["params"][pd[1].to_s]
41
- }
43
+ begin
44
+ self.class.public_instance_methods.each { |method|
45
+ if method.to_s == data["method"]
46
+ if data["params"].class == Array
47
+ arr = data["params"]
48
+ elsif
49
+ arr = self.method(data["method"]).parameters.collect { |pd|
50
+ data["params"][pd[1].to_s]
51
+ }
52
+ end
53
+ result["result"] = self.send(data["method"], *arr)
54
+ return result
42
55
  end
43
- result["result"] = self.send(data["method"], *arr)
44
- return result
45
- end
46
- }
56
+ }
57
+ rescue Error
58
+ result["code"] = $!.code
59
+ result["message"] = $!.message
60
+ result["data"] = $!.data
61
+ return result
62
+ rescue RuntimeError
63
+ result["code"] = -32000
64
+ result["message"] = $!.message
65
+ result["data"] = $!
66
+ return result
67
+ end
47
68
  return methodNotFound data["id"]
48
69
  end
49
70
 
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 1
8
- - 0
9
- version: 0.1.0
8
+ - 1
9
+ version: 0.1.1
10
10
  platform: ruby
11
11
  authors:
12
12
  - Dima Levchenko
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2011-05-27 00:00:00 +03:00
17
+ date: 2011-05-30 00:00:00 +03:00
18
18
  default_executable:
19
19
  dependencies: []
20
20