jsonrpc-server 0.1.0

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 +74 -0
  2. metadata +64 -0
@@ -0,0 +1,74 @@
1
+ module JSONServer
2
+
3
+ def index
4
+ begin
5
+ data = ActiveSupport::JSON.decode request.body
6
+ rescue StandardError
7
+ render :json => parseError
8
+ return
9
+ end
10
+ if data.class == Array
11
+ if data.length == 0
12
+ render :json => invalidRequest
13
+ return
14
+ end
15
+ res = data.collect { |single|
16
+ parseSingle single
17
+ }
18
+ render :json => res
19
+ return
20
+ end
21
+ render :json => parseSingle(data)
22
+ end
23
+
24
+ private
25
+
26
+ def parseSingle(data)
27
+ if data.class != Hash ||
28
+ data["jsonrpc"] != "2.0" ||
29
+ data["method"].class != String ||
30
+ data["method"] == ""
31
+ return invalidRequest
32
+ end
33
+ 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
+ }
42
+ end
43
+ result["result"] = self.send(data["method"], *arr)
44
+ return result
45
+ end
46
+ }
47
+ return methodNotFound data["id"]
48
+ end
49
+
50
+ ##
51
+ # Error handling section
52
+ ##
53
+
54
+ def methodNotFound id
55
+ return {:jsonrpc => "2.0",
56
+ :error => {:code => -32601,
57
+ :message => "Procedure not found."},
58
+ :id => id}
59
+ end
60
+
61
+ def parseError
62
+ return {:jsonrpc => "2.0",
63
+ :error => {:code => -32700,
64
+ :message => "Parse error."},
65
+ :id => nil}
66
+ end
67
+
68
+ def invalidRequest
69
+ return {:jsonrpc => "2.0",
70
+ :error => {:code => -32600,
71
+ :message => "Invalid Request."},
72
+ :id => nil}
73
+ end
74
+ end
metadata ADDED
@@ -0,0 +1,64 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jsonrpc-server
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 1
8
+ - 0
9
+ version: 0.1.0
10
+ platform: ruby
11
+ authors:
12
+ - Dima Levchenko
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2011-05-27 00:00:00 +03:00
18
+ default_executable:
19
+ dependencies: []
20
+
21
+ description: initial deploiment
22
+ email: ldimat@gmail.com
23
+ executables: []
24
+
25
+ extensions: []
26
+
27
+ extra_rdoc_files: []
28
+
29
+ files:
30
+ - lib/json_server.rb
31
+ has_rdoc: true
32
+ homepage: http://rubygems.org/gems/jsonrpc-server
33
+ licenses: []
34
+
35
+ post_install_message:
36
+ rdoc_options: []
37
+
38
+ require_paths:
39
+ - lib
40
+ required_ruby_version: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ segments:
46
+ - 0
47
+ version: "0"
48
+ required_rubygems_version: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ segments:
54
+ - 0
55
+ version: "0"
56
+ requirements: []
57
+
58
+ rubyforge_project:
59
+ rubygems_version: 1.3.7
60
+ signing_key:
61
+ specification_version: 3
62
+ summary: JSON RPC 2.0 server implementation for rails 3.0
63
+ test_files: []
64
+