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.
- data/lib/json_server.rb +74 -0
- metadata +64 -0
data/lib/json_server.rb
ADDED
|
@@ -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
|
+
|